From cbc3cce66f74e22c9141656aff25308ffacae673 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 8 Jun 2020 11:34:39 -0300 Subject: [PATCH] Fix API 19 drawable crash in ManageGroupFragment. --- .../avatars/GroupFallbackPhoto80.java | 55 +++++++++++++++++++ .../ui/managegroup/ManageGroupFragment.java | 23 +------- .../group_resource_placeholder_80.xml | 16 ------ app/src/main/res/values/attrs.xml | 2 - app/src/main/res/values/themes.xml | 4 -- 5 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupFallbackPhoto80.java delete mode 100644 app/src/main/res/drawable/group_resource_placeholder_80.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupFallbackPhoto80.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupFallbackPhoto80.java new file mode 100644 index 0000000000..a2633fb346 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupFallbackPhoto80.java @@ -0,0 +1,55 @@ +package org.thoughtcrime.securesms.contacts.avatars; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.InsetDrawable; +import android.graphics.drawable.LayerDrawable; +import android.os.Build; + +import androidx.annotation.NonNull; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.core.content.ContextCompat; +import androidx.core.graphics.drawable.DrawableCompat; + +import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.color.MaterialColor; +import org.thoughtcrime.securesms.util.ThemeUtil; +import org.thoughtcrime.securesms.util.ViewUtil; + +import java.util.Objects; + +public final class GroupFallbackPhoto80 implements FallbackContactPhoto { + @Override + public Drawable asDrawable(Context context, int color) { + return buildDrawable(context); + } + + @Override + public Drawable asDrawable(Context context, int color, boolean inverted) { + return buildDrawable(context); + } + + @Override + public Drawable asSmallDrawable(Context context, int color, boolean inverted) { + throw new UnsupportedOperationException(); + } + + @Override + public Drawable asCallCard(Context context) { + throw new UnsupportedOperationException(); + } + + private @NonNull Drawable buildDrawable(@NonNull Context context) { + Drawable background = DrawableCompat.wrap(Objects.requireNonNull(AppCompatResources.getDrawable(context, R.drawable.circle_tintable))); + Drawable foreground = AppCompatResources.getDrawable(context, R.drawable.ic_group_80); + Drawable gradient = ThemeUtil.getThemedDrawable(context, R.attr.resource_placeholder_gradient); + LayerDrawable drawable = new LayerDrawable(new Drawable[]{background, foreground, gradient}); + int foregroundInset = ViewUtil.dpToPx(24); + + DrawableCompat.setTint(background, MaterialColor.ULTRAMARINE.toAvatarColor(context)); + + drawable.setLayerInset(1, foregroundInset, foregroundInset, foregroundInset, foregroundInset); + + return drawable; + } +} 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 c5c7ff302b..ac5cba2d1d 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 @@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.ThreadPhotoRailView; import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; +import org.thoughtcrime.securesms.contacts.avatars.GroupFallbackPhoto80; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.ui.GroupMemberListView; import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog; @@ -96,27 +97,7 @@ public class ManageGroupFragment extends Fragment { private final Recipient.FallbackPhotoProvider fallbackPhotoProvider = new Recipient.FallbackPhotoProvider() { @Override public @NonNull FallbackContactPhoto getPhotoForGroup() { - return new FallbackContactPhoto() { - @Override - public Drawable asDrawable(Context context, int color) { - return ThemeUtil.getThemedDrawable(context, R.attr.group_resource_placeholder_80); - } - - @Override - public Drawable asDrawable(Context context, int color, boolean inverted) { - return asDrawable(context, color); - } - - @Override - public Drawable asSmallDrawable(Context context, int color, boolean inverted) { - throw new UnsupportedOperationException(); - } - - @Override - public Drawable asCallCard(Context context) { - throw new UnsupportedOperationException(); - } - }; + return new GroupFallbackPhoto80(); } }; diff --git a/app/src/main/res/drawable/group_resource_placeholder_80.xml b/app/src/main/res/drawable/group_resource_placeholder_80.xml deleted file mode 100644 index 5819d71f95..0000000000 --- a/app/src/main/res/drawable/group_resource_placeholder_80.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index fd3122dd95..bd0edc7767 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -31,9 +31,7 @@ - - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 345adca46e..54c2dd9d21 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -162,9 +162,7 @@ @color/core_grey_02 @color/core_grey_15 - @drawable/group_resource_placeholder_80 @drawable/avatar_gradient_light - @color/core_ultramarine @style/Signal.SearchView @style/Signal.SearchView.Dark @@ -456,9 +454,7 @@ @color/core_grey_60 @color/core_grey_80 - @drawable/group_resource_placeholder_80 @drawable/avatar_gradient_dark - @color/core_ultramarine @style/Signal.SearchView @style/Signal.SearchView.Dark