mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-29 05:04:54 +01:00
Rewrite fallbackphoto system.
This commit is contained in:
committed by
Greyson Parrelli
parent
d698f74d0b
commit
11557e4815
@@ -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
|
||||
|
||||
/**
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user