[DO NOT MERGE] Add shadow to Adaptive Icons
Bug: 35920618
Change-Id: Ib48a656f988d1f007c32ab15cb28d120fab1e94f
(cherry picked from commit da9ac1f01a16a2fe13e321d6fada5cb63f534bc2)
diff --git a/src/com/android/launcher3/graphics/LauncherIcons.java b/src/com/android/launcher3/graphics/LauncherIcons.java
index 1a50dfe..5db395b 100644
--- a/src/com/android/launcher3/graphics/LauncherIcons.java
+++ b/src/com/android/launcher3/graphics/LauncherIcons.java
@@ -201,7 +201,7 @@
int textureWidth = iconBitmapSize;
int textureHeight = iconBitmapSize;
- final Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight,
+ Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight,
Bitmap.Config.ARGB_8888);
final Canvas canvas = sCanvas;
canvas.setBitmap(bitmap);
@@ -218,6 +218,16 @@
icon.setBounds(sOldBounds);
canvas.setBitmap(null);
+ if (FeatureFlags.ADAPTIVE_ICON_SHADOW && Utilities.isAtLeastO()) {
+ try {
+ Class clazz = Class.forName("android.graphics.drawable.AdaptiveIconDrawable");
+ if (clazz.isAssignableFrom(icon.getClass())) {
+ bitmap = ShadowGenerator.getInstance(context).recreateIcon(bitmap);
+ }
+ } catch (Exception e) {
+ // do nothing
+ }
+ }
return bitmap;
}
}
@@ -233,7 +243,7 @@
}
try {
- Class clazz = Class.forName("android.graphics.drawable.MaskableIconDrawable");
+ Class clazz = Class.forName("android.graphics.drawable.AdaptiveIconDrawable");
if (!clazz.isAssignableFrom(drawable.getClass())) {
Drawable maskWrapper =
context.getDrawable(R.drawable.mask_drawable_wrapper).mutate();
diff --git a/src_config/com/android/launcher3/config/FeatureFlags.java b/src_config/com/android/launcher3/config/FeatureFlags.java
index 7459c0c..ab2e718 100644
--- a/src_config/com/android/launcher3/config/FeatureFlags.java
+++ b/src_config/com/android/launcher3/config/FeatureFlags.java
@@ -44,4 +44,6 @@
public static final boolean BADGE_ICONS = true;
// When enabled, icons not supporting {@link MaskableIconDrawable} will be wrapped in this class.
public static final boolean LEGACY_ICON_TREATMENT = false;
+ // When enabled, adaptive icons would have shadows baked when being stored to icon cache.
+ public static final boolean ADAPTIVE_ICON_SHADOW = true;
}