Always copy and mutate icon drawables.
Fixes: 130759380
Test: visual
Change-Id: Icdf2175ce8958420f16084bd8dc7ac52e885c54f
diff --git a/src/com/android/customization/model/theme/ThemeBundle.java b/src/com/android/customization/model/theme/ThemeBundle.java
index e13efb5..5b056cf 100644
--- a/src/com/android/customization/model/theme/ThemeBundle.java
+++ b/src/com/android/customization/model/theme/ThemeBundle.java
@@ -45,7 +45,6 @@
import com.android.customization.model.CustomizationManager;
import com.android.customization.model.CustomizationOption;
-import com.android.customization.model.theme.custom.CustomTheme;
import com.android.customization.widget.DynamicAdaptiveIconDrawable;
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
@@ -108,7 +107,7 @@
mPreviewInfo.shapeDrawable);
}
if (!mPreviewInfo.icons.isEmpty()) {
- Drawable icon = mPreviewInfo.icons.get(0).mutate();
+ Drawable icon = mPreviewInfo.icons.get(0).getConstantState().newDrawable().mutate();
icon.setTint(res.getColor(R.color.icon_thumbnail_color, null));
((ImageView) view.findViewById(R.id.theme_option_icon)).setImageDrawable(
icon);
diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java
index 7e1982a..7f6754f 100644
--- a/src/com/android/customization/picker/theme/ThemeFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFragment.java
@@ -384,7 +384,8 @@
ViewGroup iconsContainer = card.findViewById(R.id.theme_preview_top_bar_icons);
for (int i = 0; i < iconsContainer.getChildCount() && i < mIcons.size(); i++) {
- ((ImageView)iconsContainer.getChildAt(i)).setImageDrawable(mIcons.get(i));
+ ((ImageView) iconsContainer.getChildAt(i))
+ .setImageDrawable(mIcons.get(i).getConstantState().newDrawable().mutate());
}
ViewGroup body = card.findViewById(R.id.theme_preview_card_body_container);
@@ -503,7 +504,7 @@
}
for (int i = 0; i < 3 && i < previewInfo.icons.size(); i++) {
Drawable icon =
- previewInfo.icons.get(i).getConstantState().newDrawable();
+ previewInfo.icons.get(i).getConstantState().newDrawable().mutate();
Drawable bgShape =
previewInfo.shapeDrawable.getConstantState().newDrawable();
bgShape.setTint(accentColor);
@@ -548,8 +549,9 @@
@Override
protected void bindBody(boolean forceRebind) {
for (int i = 0; i < mIconIds.length && i < previewInfo.icons.size(); i++) {
- ((ImageView) card.findViewById(mIconIds[i])).setImageDrawable(
- previewInfo.icons.get(i));
+ ((ImageView) card.findViewById(mIconIds[i]))
+ .setImageDrawable(previewInfo.icons.get(i)
+ .getConstantState().newDrawable().mutate());
}
}
});
@@ -601,10 +603,10 @@
for (int i = 0; i < mColorTileIds.length && i < previewInfo.icons.size();
i++) {
- Drawable icon =
- previewInfo.icons.get(i).getConstantState().newDrawable();
+ Drawable icon = previewInfo.icons.get(i)
+ .getConstantState().newDrawable().mutate();
Drawable bgShape =
- previewInfo.shapeDrawable.getConstantState().newDrawable();
+ previewInfo.shapeDrawable.getConstantState().newDrawable();
bgShape.setTint(accentColor);
ImageView bg = card.findViewById(mColorTileIds[i]);