|
|
@ -29,6 +29,7 @@ class ProfilePictureView : RelativeLayout {
|
|
|
|
var additionalDisplayName: String? = null
|
|
|
|
var additionalDisplayName: String? = null
|
|
|
|
var isRSSFeed = false
|
|
|
|
var isRSSFeed = false
|
|
|
|
var isLarge = false
|
|
|
|
var isLarge = false
|
|
|
|
|
|
|
|
private val imagesCached = mutableSetOf<String>()
|
|
|
|
|
|
|
|
|
|
|
|
// region Lifecycle
|
|
|
|
// region Lifecycle
|
|
|
|
constructor(context: Context) : super(context) {
|
|
|
|
constructor(context: Context) : super(context) {
|
|
|
@ -104,10 +105,7 @@ class ProfilePictureView : RelativeLayout {
|
|
|
|
fun update() {
|
|
|
|
fun update() {
|
|
|
|
val publicKey = publicKey ?: return
|
|
|
|
val publicKey = publicKey ?: return
|
|
|
|
val additionalPublicKey = additionalPublicKey
|
|
|
|
val additionalPublicKey = additionalPublicKey
|
|
|
|
doubleModeImageViewContainer.visibility = if (additionalPublicKey != null && !isRSSFeed) View.VISIBLE else View.INVISIBLE
|
|
|
|
doubleModeImageViewContainer.visibility = if (additionalPublicKey != null && !isRSSFeed) {
|
|
|
|
singleModeImageViewContainer.visibility = if (additionalPublicKey == null && !isRSSFeed && !isLarge) View.VISIBLE else View.INVISIBLE
|
|
|
|
|
|
|
|
largeSingleModeImageViewContainer.visibility = if (additionalPublicKey == null && !isRSSFeed && isLarge) View.VISIBLE else View.INVISIBLE
|
|
|
|
|
|
|
|
rssImageView.visibility = if (isRSSFeed) View.VISIBLE else View.INVISIBLE
|
|
|
|
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
doubleModeImageView1,
|
|
|
|
doubleModeImageView1,
|
|
|
|
publicKey,
|
|
|
|
publicKey,
|
|
|
@ -115,43 +113,70 @@ class ProfilePictureView : RelativeLayout {
|
|
|
|
R.dimen.small_profile_picture_size)
|
|
|
|
R.dimen.small_profile_picture_size)
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
doubleModeImageView2,
|
|
|
|
doubleModeImageView2,
|
|
|
|
additionalPublicKey ?: "",
|
|
|
|
additionalPublicKey,
|
|
|
|
additionalDisplayName,
|
|
|
|
additionalDisplayName,
|
|
|
|
R.dimen.small_profile_picture_size)
|
|
|
|
R.dimen.small_profile_picture_size)
|
|
|
|
|
|
|
|
View.VISIBLE
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
glide.clear(doubleModeImageView1)
|
|
|
|
|
|
|
|
glide.clear(doubleModeImageView2)
|
|
|
|
|
|
|
|
View.INVISIBLE
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
singleModeImageViewContainer.visibility = if (additionalPublicKey == null && !isRSSFeed && !isLarge) {
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
singleModeImageView,
|
|
|
|
singleModeImageView,
|
|
|
|
publicKey,
|
|
|
|
publicKey,
|
|
|
|
displayName,
|
|
|
|
displayName,
|
|
|
|
R.dimen.medium_profile_picture_size)
|
|
|
|
R.dimen.medium_profile_picture_size)
|
|
|
|
|
|
|
|
View.VISIBLE
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
glide.clear(singleModeImageView)
|
|
|
|
|
|
|
|
View.INVISIBLE
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
largeSingleModeImageViewContainer.visibility = if (additionalPublicKey == null && !isRSSFeed && isLarge) {
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
setProfilePictureIfNeeded(
|
|
|
|
largeSingleModeImageView,
|
|
|
|
largeSingleModeImageView,
|
|
|
|
publicKey,
|
|
|
|
publicKey,
|
|
|
|
displayName,
|
|
|
|
displayName,
|
|
|
|
R.dimen.large_profile_picture_size)
|
|
|
|
R.dimen.large_profile_picture_size)
|
|
|
|
|
|
|
|
View.VISIBLE
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
glide.clear(largeSingleModeImageView)
|
|
|
|
|
|
|
|
View.INVISIBLE
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
rssImageView.visibility = if (isRSSFeed) View.VISIBLE else View.INVISIBLE
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun setProfilePictureIfNeeded(imageView: ImageView, publicKey: String, displayName: String?, @DimenRes sizeResId: Int) {
|
|
|
|
private fun setProfilePictureIfNeeded(imageView: ImageView, publicKey: String, displayName: String?, @DimenRes sizeResId: Int) {
|
|
|
|
glide.clear(imageView)
|
|
|
|
|
|
|
|
if (publicKey.isNotEmpty()) {
|
|
|
|
if (publicKey.isNotEmpty()) {
|
|
|
|
val recipient = Recipient.from(context, Address.fromSerialized(publicKey), false);
|
|
|
|
if (imagesCached.contains(publicKey)) return
|
|
|
|
|
|
|
|
val recipient = Recipient.from(context, Address.fromSerialized(publicKey), false)
|
|
|
|
val signalProfilePicture = recipient.contactPhoto
|
|
|
|
val signalProfilePicture = recipient.contactPhoto
|
|
|
|
if (signalProfilePicture != null && (signalProfilePicture as? ProfileContactPhoto)?.avatarObject != "0"
|
|
|
|
if (signalProfilePicture != null && (signalProfilePicture as? ProfileContactPhoto)?.avatarObject != "0"
|
|
|
|
&& (signalProfilePicture as? ProfileContactPhoto)?.avatarObject != "") {
|
|
|
|
&& (signalProfilePicture as? ProfileContactPhoto)?.avatarObject != "") {
|
|
|
|
|
|
|
|
glide.clear(imageView)
|
|
|
|
glide.load(signalProfilePicture).diskCacheStrategy(DiskCacheStrategy.ALL).circleCrop().into(imageView)
|
|
|
|
glide.load(signalProfilePicture).diskCacheStrategy(DiskCacheStrategy.ALL).circleCrop().into(imageView)
|
|
|
|
|
|
|
|
imagesCached.add(publicKey)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
val sizeInPX = resources.getDimensionPixelSize(sizeResId)
|
|
|
|
val sizeInPX = resources.getDimensionPixelSize(sizeResId)
|
|
|
|
val masterPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(context)
|
|
|
|
val masterPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(context)
|
|
|
|
val hepk = if (recipient.isLocalNumber && masterPublicKey != null) masterPublicKey else publicKey
|
|
|
|
val hepk = if (recipient.isLocalNumber && masterPublicKey != null) masterPublicKey else publicKey
|
|
|
|
|
|
|
|
glide.clear(imageView)
|
|
|
|
glide.load(AvatarPlaceholderGenerator.generate(
|
|
|
|
glide.load(AvatarPlaceholderGenerator.generate(
|
|
|
|
context,
|
|
|
|
context,
|
|
|
|
sizeInPX,
|
|
|
|
sizeInPX,
|
|
|
|
hepk,
|
|
|
|
hepk,
|
|
|
|
displayName
|
|
|
|
displayName
|
|
|
|
)).diskCacheStrategy(DiskCacheStrategy.ALL).circleCrop().into(imageView)
|
|
|
|
)).diskCacheStrategy(DiskCacheStrategy.ALL).circleCrop().into(imageView)
|
|
|
|
|
|
|
|
imagesCached.add(publicKey)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
imageView.setImageDrawable(null)
|
|
|
|
imageView.setImageDrawable(null)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun recycle() {
|
|
|
|
|
|
|
|
imagesCached.clear()
|
|
|
|
|
|
|
|
}
|
|
|
|
// endregion
|
|
|
|
// endregion
|
|
|
|
}
|
|
|
|
}
|