Rewrite fallbackphoto system.

This commit is contained in:
Alex Hart
2024-06-12 15:59:35 -03:00
committed by Greyson Parrelli
parent d698f74d0b
commit 11557e4815
42 changed files with 676 additions and 805 deletions

View File

@@ -1,7 +1,6 @@
package org.thoughtcrime.securesms.recipients
import android.content.Context
import android.graphics.drawable.Drawable
import android.net.Uri
import androidx.annotation.AnyThread
import androidx.annotation.WorkerThread
@@ -14,15 +13,12 @@ import org.signal.core.util.logging.Log
import org.signal.core.util.nullIfBlank
import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatar
import org.thoughtcrime.securesms.badges.models.Badge
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.GroupRecordContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.SystemContactPhoto
import org.thoughtcrime.securesms.contacts.avatars.TransparentContactPhoto
import org.thoughtcrime.securesms.conversation.colors.AvatarColor
import org.thoughtcrime.securesms.conversation.colors.ChatColors
import org.thoughtcrime.securesms.conversation.colors.ChatColors.Id.Auto
@@ -47,7 +43,6 @@ import org.thoughtcrime.securesms.phonenumbers.NumberUtil
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
import org.thoughtcrime.securesms.profiles.ProfileName
import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId
import org.thoughtcrime.securesms.util.AvatarUtil
import org.thoughtcrime.securesms.util.UsernameUtil.isValidUsernameForSearch
import org.thoughtcrime.securesms.util.Util
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
@@ -258,10 +253,6 @@ class Recipient(
null
}
/** A photo you can use as a fallback if [contactPhoto] fails to load. */
val fallbackContactPhoto: FallbackContactPhoto
get() = getFallbackContactPhoto(DEFAULT_FALLBACK_PHOTO_PROVIDER)
/** The URI of the ringtone that should be used when receiving a message from this recipient, if set. */
val messageRingtone: Uri? by lazy {
if (messageRingtoneUri != null && messageRingtoneUri.scheme != null && messageRingtoneUri.scheme!!.startsWith("file")) {
@@ -609,45 +600,29 @@ class Recipient(
}
}
fun getFallbackContactPhotoDrawable(context: Context?, inverted: Boolean): Drawable {
return getFallbackContactPhotoDrawable(context, inverted, DEFAULT_FALLBACK_PHOTO_PROVIDER, AvatarUtil.UNDEFINED_SIZE)
}
fun getFallbackContactPhotoDrawable(context: Context?, inverted: Boolean, fallbackPhotoProvider: FallbackPhotoProvider?, targetSize: Int): Drawable {
return getFallbackContactPhoto(Util.firstNonNull(fallbackPhotoProvider, DEFAULT_FALLBACK_PHOTO_PROVIDER), targetSize).asDrawable(context!!, avatarColor, inverted)
}
fun getSmallFallbackContactPhotoDrawable(context: Context?, inverted: Boolean, fallbackPhotoProvider: FallbackPhotoProvider?, targetSize: Int): Drawable {
return getFallbackContactPhoto(Util.firstNonNull(fallbackPhotoProvider, DEFAULT_FALLBACK_PHOTO_PROVIDER), targetSize).asSmallDrawable(context!!, avatarColor, inverted)
}
fun getFallbackContactPhoto(fallbackPhotoProvider: FallbackPhotoProvider): FallbackContactPhoto {
return getFallbackContactPhoto(fallbackPhotoProvider, AvatarUtil.UNDEFINED_SIZE)
}
private fun getFallbackContactPhoto(fallbackPhotoProvider: FallbackPhotoProvider, targetSize: Int): FallbackContactPhoto {
fun getFallbackAvatar(): FallbackAvatar {
return if (isSelf) {
fallbackPhotoProvider.photoForLocalNumber
FallbackAvatar.Resource.Local(avatarColor)
} else if (isResolving) {
fallbackPhotoProvider.photoForResolvingRecipient
FallbackAvatar.Transparent
} else if (isDistributionList) {
fallbackPhotoProvider.photoForDistributionList
FallbackAvatar.Resource.DistributionList(avatarColor)
} else if (isCallLink) {
fallbackPhotoProvider.photoForCallLink
FallbackAvatar.Resource.CallLink(avatarColor)
} else if (groupIdValue != null) {
fallbackPhotoProvider.photoForGroup
FallbackAvatar.Resource.Group(avatarColor)
} else if (isGroup) {
fallbackPhotoProvider.photoForGroup
FallbackAvatar.Resource.Group(avatarColor)
} else if (groupName.isNotNullOrBlank()) {
fallbackPhotoProvider.getPhotoForRecipientWithName(groupName, targetSize)
FallbackAvatar.forTextOrDefault(groupName, avatarColor, FallbackAvatar.Resource.Group(avatarColor))
} else if (!nickname.isEmpty) {
fallbackPhotoProvider.getPhotoForRecipientWithName(nickname.toString(), targetSize)
FallbackAvatar.forTextOrDefault(nickname.toString(), avatarColor)
} else if (systemContactName.isNotNullOrBlank()) {
fallbackPhotoProvider.getPhotoForRecipientWithName(systemContactName, targetSize)
FallbackAvatar.forTextOrDefault(systemContactName, avatarColor)
} else if (!profileName.isEmpty) {
fallbackPhotoProvider.getPhotoForRecipientWithName(profileName.toString(), targetSize)
FallbackAvatar.forTextOrDefault(profileName.toString(), avatarColor)
} else {
fallbackPhotoProvider.photoForRecipientWithoutName
FallbackAvatar.Resource.Person(avatarColor)
}
}
@@ -818,30 +793,6 @@ class Recipient(
return id.hashCode()
}
open class FallbackPhotoProvider {
open val photoForLocalNumber: FallbackContactPhoto
get() = ResourceContactPhoto(R.drawable.ic_note_34, R.drawable.ic_note_24)
open val photoForResolvingRecipient: FallbackContactPhoto
get() = TransparentContactPhoto()
open val photoForGroup: FallbackContactPhoto
get() = ResourceContactPhoto(R.drawable.ic_group_outline_34, R.drawable.ic_group_outline_20, R.drawable.ic_group_outline_48)
open val photoForRecipientWithoutName: FallbackContactPhoto
get() = ResourceContactPhoto(R.drawable.ic_profile_outline_40, R.drawable.ic_profile_outline_20, R.drawable.ic_profile_outline_48)
val photoForDistributionList: FallbackContactPhoto
get() = ResourceContactPhoto(R.drawable.symbol_stories_24, R.drawable.symbol_stories_24, R.drawable.symbol_stories_24)
val photoForCallLink: FallbackContactPhoto
get() = ResourceContactPhoto(R.drawable.symbol_video_24, R.drawable.symbol_video_24, R.drawable.symbol_video_24)
open fun getPhotoForRecipientWithName(name: String, targetSize: Int): FallbackContactPhoto {
return GeneratedContactPhoto(name, R.drawable.ic_profile_outline_40, targetSize)
}
}
private class MissingAddressError(recipientId: RecipientId) : AssertionError("Missing address for " + recipientId.serialize())
companion object {
@@ -850,9 +801,6 @@ class Recipient(
@JvmField
val UNKNOWN = Recipient()
@JvmField
val DEFAULT_FALLBACK_PHOTO_PROVIDER = FallbackPhotoProvider()
private const val MAX_MEMBER_NAMES = 10
/**

View File

@@ -31,8 +31,6 @@ import org.thoughtcrime.securesms.badges.BadgeImageView;
import org.thoughtcrime.securesms.badges.view.ViewBadgeBottomSheetDialogFragment;
import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon;
import org.thoughtcrime.securesms.components.settings.conversation.preferences.ButtonStripPreference;
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto80dp;
import org.thoughtcrime.securesms.fonts.SignalSymbols;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.nicknames.NicknameActivity;
@@ -167,13 +165,6 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF
viewModel.getRecipient().observe(getViewLifecycleOwner(), recipient -> {
interactionsContainer.setVisibility(recipient.isSelf() ? View.GONE : View.VISIBLE);
avatar.setFallbackPhotoProvider(new Recipient.FallbackPhotoProvider() {
@Override
public @NonNull FallbackContactPhoto getPhotoForLocalNumber() {
return new FallbackPhoto80dp(R.drawable.ic_note_80, recipient.getAvatarColor());
}
});
avatar.displayChatAvatar(recipient);
if (!recipient.isSelf()) {