From cea4ee4ea995d5204b3cbe69f9d57ce000f2678e Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 1 Dec 2020 17:08:30 -0400 Subject: [PATCH] Utilize GeneratedContactPhoto for named folk. --- .../contacts/avatars/FallbackPhoto80dp.java | 8 +++--- .../avatars/GeneratedContactPhoto.java | 15 +++++++++-- .../ui/managegroup/ManageGroupFragment.java | 2 +- .../RecipientBottomSheetDialogFragment.java | 2 +- .../ManageRecipientFragment.java | 4 +-- .../securesms/util/AvatarUtil.java | 2 -- .../util/ConversationShortcutPhoto.java | 26 ++++++++++++++++--- 7 files changed, 43 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto80dp.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto80dp.java index 82ad2fb922..6bcd9fd47a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto80dp.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto80dp.java @@ -18,10 +18,10 @@ import java.util.Objects; public final class FallbackPhoto80dp implements FallbackContactPhoto { - @DrawableRes private final int drawable80dp; - private final MaterialColor backgroundColor; + @DrawableRes private final int drawable80dp; + private final int backgroundColor; - public FallbackPhoto80dp(@DrawableRes int drawable80dp, @NonNull MaterialColor backgroundColor) { + public FallbackPhoto80dp(@DrawableRes int drawable80dp, int backgroundColor) { this.drawable80dp = drawable80dp; this.backgroundColor = backgroundColor; } @@ -53,7 +53,7 @@ public final class FallbackPhoto80dp implements FallbackContactPhoto { LayerDrawable drawable = new LayerDrawable(new Drawable[]{background, foreground, gradient}); int foregroundInset = ViewUtil.dpToPx(24); - DrawableCompat.setTint(background, backgroundColor.toAvatarColor(context)); + DrawableCompat.setTint(background, backgroundColor); drawable.setLayerInset(1, foregroundInset, foregroundInset, foregroundInset, foregroundInset); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java index 2dd43b7b2a..bde796e0d6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java @@ -27,10 +27,18 @@ public class GeneratedContactPhoto implements FallbackContactPhoto { private final String name; private final int fallbackResId; + private final int targetSize; + private final int fontSize; public GeneratedContactPhoto(@NonNull String name, @DrawableRes int fallbackResId) { + this(name, fallbackResId, -1, ViewUtil.dpToPx(24)); + } + + public GeneratedContactPhoto(@NonNull String name, @DrawableRes int fallbackResId, int targetSize, int fontSize) { this.name = name; this.fallbackResId = fallbackResId; + this.targetSize = targetSize; + this.fontSize = fontSize; } @Override @@ -40,7 +48,10 @@ public class GeneratedContactPhoto implements FallbackContactPhoto { @Override public Drawable asDrawable(Context context, int color, boolean inverted) { - int targetSize = context.getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size); + int targetSize = this.targetSize != -1 + ? this.targetSize + : context.getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size); + String character = getAbbreviation(name); if (!TextUtils.isEmpty(character)) { @@ -49,7 +60,7 @@ public class GeneratedContactPhoto implements FallbackContactPhoto { .width(targetSize) .height(targetSize) .useFont(TYPEFACE) - .fontSize(ViewUtil.dpToPx(context, 24)) + .fontSize(fontSize) .textColor(inverted ? color : Color.WHITE) .endConfig() .buildRound(character, inverted ? Color.WHITE : color); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java index 8f6bcdfa4c..1697b503dd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java @@ -118,7 +118,7 @@ public class ManageGroupFragment extends LoggingFragment { private final Recipient.FallbackPhotoProvider fallbackPhotoProvider = new Recipient.FallbackPhotoProvider() { @Override public @NonNull FallbackContactPhoto getPhotoForGroup() { - return new FallbackPhoto80dp(R.drawable.ic_group_80, MaterialColor.ULTRAMARINE); + return new FallbackPhoto80dp(R.drawable.ic_group_80, MaterialColor.ULTRAMARINE.toAvatarColor(requireContext())); } }; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java index 9f46e354fa..e133e94ec0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java @@ -137,7 +137,7 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF avatar.setFallbackPhotoProvider(new Recipient.FallbackPhotoProvider() { @Override public @NonNull FallbackContactPhoto getPhotoForLocalNumber() { - return new FallbackPhoto80dp(R.drawable.ic_note_80, recipient.getColor()); + return new FallbackPhoto80dp(R.drawable.ic_note_80, recipient.getColor().toAvatarColor(requireContext())); } }); avatar.setAvatar(recipient); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java index fda4248a3f..82891239b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java @@ -306,12 +306,12 @@ public class ManageRecipientFragment extends LoggingFragment { avatar.setFallbackPhotoProvider(new Recipient.FallbackPhotoProvider() { @Override public @NonNull FallbackContactPhoto getPhotoForRecipientWithoutName() { - return new FallbackPhoto80dp(R.drawable.ic_profile_80, recipientColor); + return new FallbackPhoto80dp(R.drawable.ic_profile_80, recipientColor.toAvatarColor(requireContext())); } @Override public @NonNull FallbackContactPhoto getPhotoForLocalNumber() { - return new FallbackPhoto80dp(R.drawable.ic_note_80, recipientColor); + return new FallbackPhoto80dp(R.drawable.ic_note_80, recipientColor.toAvatarColor(requireContext())); } }); avatar.setAvatar(recipient); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java index 97f3a77321..9e63014d40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java @@ -8,7 +8,6 @@ import android.text.TextUtils; import android.view.View; import android.widget.ImageView; -import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -25,7 +24,6 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.color.MaterialColor; import org.thoughtcrime.securesms.contacts.avatars.ContactColors; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; -import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto80dp; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationShortcutPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationShortcutPhoto.java index 1a592af1db..2a87944264 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationShortcutPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationShortcutPhoto.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.util; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -19,7 +20,9 @@ import com.bumptech.glide.load.model.ModelLoaderFactory; import com.bumptech.glide.load.model.MultiModelLoaderFactory; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto80dp; +import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideRequest; @@ -129,17 +132,21 @@ public final class ConversationShortcutPhoto implements Key { } private @NonNull Bitmap getFallbackForShortcut(@NonNull Context context) { + Recipient recipient = photo.recipient; + @DrawableRes final int photoSource; - if (photo.recipient.isSelf()) { + if (recipient.isSelf()) { photoSource = R.drawable.ic_note_80; - } else if (photo.recipient.isGroup()) { + } else if (recipient.isGroup()) { photoSource = R.drawable.ic_group_80; } else { photoSource = R.drawable.ic_profile_80; } - Bitmap toWrap = DrawableUtil.toBitmap(new FallbackPhoto80dp(photoSource, photo.recipient.getColor()).asDrawable(context, -1), ViewUtil.dpToPx(80), ViewUtil.dpToPx(80)); - Bitmap wrapped = DrawableUtil.wrapBitmapForShortcutInfo(toWrap); + FallbackContactPhoto photo = recipient.isSelf() || recipient.isGroup() ? new FallbackPhoto80dp(photoSource, recipient.getColor().toAvatarColor(context)) + : new ShortcutGeneratedContactPhoto(recipient.getDisplayName(context), photoSource, ViewUtil.dpToPx(80), ViewUtil.dpToPx(28)); + Bitmap toWrap = DrawableUtil.toBitmap(photo.asDrawable(context, recipient.getColor().toAvatarColor(context)), ViewUtil.dpToPx(80), ViewUtil.dpToPx(80)); + Bitmap wrapped = DrawableUtil.wrapBitmapForShortcutInfo(toWrap); toWrap.recycle(); @@ -150,4 +157,15 @@ public final class ConversationShortcutPhoto implements Key { return glideRequest.load(photo.recipient.getContactPhoto()).diskCacheStrategy(DiskCacheStrategy.ALL); } } + + private static final class ShortcutGeneratedContactPhoto extends GeneratedContactPhoto { + public ShortcutGeneratedContactPhoto(@NonNull String name, int fallbackResId, int targetSize, int fontSize) { + super(name, fallbackResId, targetSize, fontSize); + } + + @Override + protected Drawable newFallbackDrawable(@NonNull Context context, int color, boolean inverted) { + return new FallbackPhoto80dp(getFallbackResId(), color).asDrawable(context, -1); + } + } }