diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java index 266afc10d9..ba13b70982 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java @@ -56,9 +56,9 @@ public class BasicMegaphoneView extends FrameLayout { this.megaphone = megaphone; this.megaphoneListener = megaphoneListener; - if (megaphone.getImage() != 0) { + if (megaphone.getImageRequest() != null) { image.setVisibility(VISIBLE); - image.setImageResource(megaphone.getImage()); + megaphone.getImageRequest().into(image); } else { image.setVisibility(GONE); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java index 86927f3822..73dc47b810 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java @@ -1,28 +1,34 @@ package org.thoughtcrime.securesms.megaphone; +import android.content.Context; +import android.graphics.drawable.Drawable; + import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.megaphone.Megaphones.Event; +import org.thoughtcrime.securesms.mms.GlideApp; +import org.thoughtcrime.securesms.mms.GlideRequest; /** * For guidance on creating megaphones, see {@link Megaphones}. */ public class Megaphone { - private final Event event; - private final Style style; - private final boolean mandatory; - private final boolean canSnooze; - private final int titleRes; - private final int bodyRes; - private final int imageRes; - private final int buttonTextRes; - private final EventListener buttonListener; - private final EventListener snoozeListener; - private final EventListener onVisibleListener; + private final Event event; + private final Style style; + private final boolean mandatory; + private final boolean canSnooze; + private final int titleRes; + private final int bodyRes; + private final GlideRequest imageRequest; + private final int buttonTextRes; + private final EventListener buttonListener; + private final EventListener snoozeListener; + private final EventListener onVisibleListener; private Megaphone(@NonNull Builder builder) { this.event = builder.event; @@ -31,7 +37,7 @@ public class Megaphone { this.canSnooze = builder.canSnooze; this.titleRes = builder.titleRes; this.bodyRes = builder.bodyRes; - this.imageRes = builder.imageRes; + this.imageRequest = builder.imageRequest; this.buttonTextRes = builder.buttonTextRes; this.buttonListener = builder.buttonListener; this.snoozeListener = builder.snoozeListener; @@ -62,8 +68,8 @@ public class Megaphone { return bodyRes; } - public @DrawableRes int getImage() { - return imageRes; + public @Nullable GlideRequest getImageRequest() { + return imageRequest; } public @StringRes int getButtonText() { @@ -91,15 +97,15 @@ public class Megaphone { private final Event event; private final Style style; - private boolean mandatory; - private boolean canSnooze; - private int titleRes; - private int bodyRes; - private int imageRes; - private int buttonTextRes; - private EventListener buttonListener; - private EventListener snoozeListener; - private EventListener onVisibleListener; + private boolean mandatory; + private boolean canSnooze; + private int titleRes; + private int bodyRes; + private GlideRequest imageRequest; + private int buttonTextRes; + private EventListener buttonListener; + private EventListener snoozeListener; + private EventListener onVisibleListener; public Builder(@NonNull Event event, @NonNull Style style) { @@ -135,7 +141,12 @@ public class Megaphone { } public @NonNull Builder setImage(@DrawableRes int imageRes) { - this.imageRes = imageRes; + setImageRequest(GlideApp.with(ApplicationDependencies.getApplication()).load(imageRes)); + return this; + } + + public @NonNull Builder setImageRequest(@Nullable GlideRequest imageRequest) { + this.imageRequest = imageRequest; return this; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index 8b2e5c5ebf..b6b3fa754b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.messagerequests.MessageRequestMegaphoneActivity; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; +import org.thoughtcrime.securesms.util.AvatarUtil; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -207,7 +208,7 @@ public final class Megaphones { Megaphone.Builder builder = new Megaphone.Builder(Event.PROFILE_NAMES_FOR_ALL, Megaphone.Style.BASIC) .enableSnooze(null) - .setImage(R.drawable.profile_megaphone); + .setImageRequest(AvatarUtil.getSelfAvatarOrFallbackIcon(context, R.drawable.ic_profilename_64)); if (TextSecurePreferences.getProfileName(ApplicationDependencies.getApplication()) == ProfileName.EMPTY) { return builder.setTitle(R.string.ProfileNamesMegaphone__add_a_profile_name) diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java index 9ad9febfb1..46cd2a6dac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java @@ -55,9 +55,9 @@ public class PopupMegaphoneView extends FrameLayout { this.megaphone = megaphone; this.megaphoneListener = megaphoneListener; - if (megaphone.getImage() != 0) { + if (megaphone.getImageRequest() != null) { image.setVisibility(VISIBLE); - image.setImageResource(megaphone.getImage()); + megaphone.getImageRequest().into(image); } else { image.setVisibility(GONE); } 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 e726257ecd..b5b468be9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java @@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.widget.ImageView; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import androidx.core.graphics.drawable.IconCompat; @@ -43,6 +44,15 @@ public final class AvatarUtil { } } + public static GlideRequest getSelfAvatarOrFallbackIcon(@NonNull Context context, @DrawableRes int fallbackIcon) { + return GlideApp.with(context) + .asDrawable() + .load(new ProfileContactPhoto(Recipient.self().getId(), String.valueOf(TextSecurePreferences.getProfileAvatarId(context)))) + .error(fallbackIcon) + .circleCrop() + .diskCacheStrategy(DiskCacheStrategy.ALL); + } + private static GlideRequest request(@NonNull GlideRequest glideRequest, @NonNull Context context, @NonNull Recipient recipient) { return glideRequest.load(new ProfileContactPhoto(recipient.getId(), String.valueOf(TextSecurePreferences.getProfileAvatarId(context)))) .error(getFallback(context, recipient)) diff --git a/app/src/main/res/drawable-mdpi/profile_megaphone.png b/app/src/main/res/drawable-mdpi/profile_megaphone.png deleted file mode 100644 index a5d9b3133e..0000000000 Binary files a/app/src/main/res/drawable-mdpi/profile_megaphone.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/profile_megaphone.png b/app/src/main/res/drawable-xhdpi/profile_megaphone.png deleted file mode 100644 index 801c510195..0000000000 Binary files a/app/src/main/res/drawable-xhdpi/profile_megaphone.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/profile_megaphone.png b/app/src/main/res/drawable-xxhdpi/profile_megaphone.png deleted file mode 100644 index ca5f625a93..0000000000 Binary files a/app/src/main/res/drawable-xxhdpi/profile_megaphone.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/profile_megaphone.png b/app/src/main/res/drawable-xxxhdpi/profile_megaphone.png deleted file mode 100644 index 21d9146573..0000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/profile_megaphone.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_profilename_64.xml b/app/src/main/res/drawable/ic_profilename_64.xml new file mode 100644 index 0000000000..5f0a523f5f --- /dev/null +++ b/app/src/main/res/drawable/ic_profilename_64.xml @@ -0,0 +1,20 @@ + + + + + +