Fix API 19 drawable crash in ManageGroupFragment.

This commit is contained in:
Alex Hart 2020-06-08 11:34:39 -03:00 committed by GitHub
parent b4b63b5860
commit cbc3cce66f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 57 additions and 43 deletions

View File

@ -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;
}
}

View File

@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.ThreadPhotoRailView; import org.thoughtcrime.securesms.components.ThreadPhotoRailView;
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; 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.GroupId;
import org.thoughtcrime.securesms.groups.ui.GroupMemberListView; import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog; import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog;
@ -96,27 +97,7 @@ public class ManageGroupFragment extends Fragment {
private final Recipient.FallbackPhotoProvider fallbackPhotoProvider = new Recipient.FallbackPhotoProvider() { private final Recipient.FallbackPhotoProvider fallbackPhotoProvider = new Recipient.FallbackPhotoProvider() {
@Override @Override
public @NonNull FallbackContactPhoto getPhotoForGroup() { public @NonNull FallbackContactPhoto getPhotoForGroup() {
return new FallbackContactPhoto() { return new GroupFallbackPhoto80();
@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();
}
};
} }
}; };

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="?attr/resource_placeholder_background" />
</shape>
</item>
<item
android:bottom="24dp"
android:drawable="@drawable/ic_group_80"
android:left="24dp"
android:right="24dp"
android:top="24dp" />
<item android:drawable="?attr/resource_placeholder_gradient" />
</layer-list>

View File

@ -31,9 +31,7 @@
<attr name="conversation_list_compose_icon_tint" format="color" /> <attr name="conversation_list_compose_icon_tint" format="color" />
<attr name="conversation_list_camera_button_background" format="color"/> <attr name="conversation_list_camera_button_background" format="color"/>
<attr name="group_resource_placeholder_80" format="reference" />
<attr name="resource_placeholder_gradient" format="reference" /> <attr name="resource_placeholder_gradient" format="reference" />
<attr name="resource_placeholder_background" format="color" />
<attr name="avatar_selection_take_photo" format="reference" /> <attr name="avatar_selection_take_photo" format="reference" />
<attr name="avatar_selection_pick_photo" format="reference" /> <attr name="avatar_selection_pick_photo" format="reference" />

View File

@ -162,9 +162,7 @@
<item name="insight_dashboard_bottom_bar_background">@color/core_grey_02</item> <item name="insight_dashboard_bottom_bar_background">@color/core_grey_02</item>
<item name="insight_progress_background">@color/core_grey_15</item> <item name="insight_progress_background">@color/core_grey_15</item>
<item name="group_resource_placeholder_80">@drawable/group_resource_placeholder_80</item>
<item name="resource_placeholder_gradient">@drawable/avatar_gradient_light</item> <item name="resource_placeholder_gradient">@drawable/avatar_gradient_light</item>
<item name="resource_placeholder_background">@color/core_ultramarine</item>
<item name="search_view_style">@style/Signal.SearchView</item> <item name="search_view_style">@style/Signal.SearchView</item>
<item name="search_view_style_dark">@style/Signal.SearchView.Dark</item> <item name="search_view_style_dark">@style/Signal.SearchView.Dark</item>
@ -456,9 +454,7 @@
<item name="insight_progress_background">@color/core_grey_60</item> <item name="insight_progress_background">@color/core_grey_60</item>
<item name="insight_dashboard_bottom_bar_background">@color/core_grey_80</item> <item name="insight_dashboard_bottom_bar_background">@color/core_grey_80</item>
<item name="group_resource_placeholder_80">@drawable/group_resource_placeholder_80</item>
<item name="resource_placeholder_gradient">@drawable/avatar_gradient_dark</item> <item name="resource_placeholder_gradient">@drawable/avatar_gradient_dark</item>
<item name="resource_placeholder_background">@color/core_ultramarine</item>
<item name="search_view_style">@style/Signal.SearchView</item> <item name="search_view_style">@style/Signal.SearchView</item>
<item name="search_view_style_dark">@style/Signal.SearchView.Dark</item> <item name="search_view_style_dark">@style/Signal.SearchView.Dark</item>