Change application launcher icons to adaptive icons
b/35429795

Change-Id: I4fa2fb167040c2470c403a293d1a172c276b2f81
diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index 86ae73e..da1679f 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -49,7 +49,7 @@
         android:fullBackupOnly="true"
         android:fullBackupContent="@xml/backupscheme"
         android:hardwareAccelerated="true"
-        android:icon="@mipmap/ic_launcher_home"
+        android:icon="@drawable/ic_launcher_home"
         android:label="@string/derived_app_name"
         android:largeHeap="@bool/config_largeHeap"
         android:restoreAnyVersion="true"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3b721ab..bcb522b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -54,7 +54,7 @@
         android:fullBackupOnly="true"
         android:fullBackupContent="@xml/backupscheme"
         android:hardwareAccelerated="true"
-        android:icon="@mipmap/ic_launcher_home"
+        android:icon="@drawable/ic_launcher_home"
         android:label="@string/derived_app_name"
         android:theme="@style/LauncherTheme"
         android:largeHeap="@bool/config_largeHeap"
@@ -135,7 +135,7 @@
             android:theme="@android:style/Theme.NoDisplay"
             android:label="* HPROF"
             android:excludeFromRecents="true"
-            android:icon="@mipmap/ic_launcher_home"
+            android:icon="@drawable/ic_launcher_home"
             >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -147,7 +147,7 @@
         <activity
             android:name="com.android.launcher3.testing.ToggleWeightWatcher"
             android:label="Show Mem"
-            android:icon="@mipmap/ic_launcher_home">
+            android:icon="@drawable/ic_launcher_home">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/drawable-v26/mask_drawable_wrapper.xml b/res/drawable-v26/adaptive_icon_drawable_wrapper.xml
similarity index 90%
rename from res/drawable-v26/mask_drawable_wrapper.xml
rename to res/drawable-v26/adaptive_icon_drawable_wrapper.xml
index 36efd0f..7ad8e2c 100644
--- a/res/drawable-v26/mask_drawable_wrapper.xml
+++ b/res/drawable-v26/adaptive_icon_drawable_wrapper.xml
@@ -14,9 +14,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
     <background android:color="#FFE0E0E0"/>
     <foreground>
         <com.android.launcher3.graphics.FixedScaleDrawable />
     </foreground>
-</maskable-icon>
+</adaptive-icon>
diff --git a/res/drawable-v26/mask_drawable_wrapper.xml b/res/drawable-v26/ic_launcher_home.xml
similarity index 65%
copy from res/drawable-v26/mask_drawable_wrapper.xml
copy to res/drawable-v26/ic_launcher_home.xml
index 36efd0f..7038775 100644
--- a/res/drawable-v26/mask_drawable_wrapper.xml
+++ b/res/drawable-v26/ic_launcher_home.xml
@@ -1,12 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2017 The Android Open Source Project
+<!-- Copyright (C) 2017 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
 
-          http://www.apache.org/licenses/LICENSE-2.0
+        http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:color="#FFE0E0E0"/>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/icon_background" />
     <foreground>
-        <com.android.launcher3.graphics.FixedScaleDrawable />
+        <bitmap android:src="@mipmap/ic_launcher_home_foreground"/>
     </foreground>
-</maskable-icon>
+</adaptive-icon>
diff --git a/res/drawable-v26/mask_drawable_wrapper.xml b/res/drawable/ic_launcher_home.xml
similarity index 61%
copy from res/drawable-v26/mask_drawable_wrapper.xml
copy to res/drawable/ic_launcher_home.xml
index 36efd0f..a6f2519 100644
--- a/res/drawable-v26/mask_drawable_wrapper.xml
+++ b/res/drawable/ic_launcher_home.xml
@@ -1,12 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2017 The Android Open Source Project
+<!-- Copyright (C) 2017 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
 
-          http://www.apache.org/licenses/LICENSE-2.0
+        http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,9 +13,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:color="#FFE0E0E0"/>
-    <foreground>
-        <com.android.launcher3.graphics.FixedScaleDrawable />
-    </foreground>
-</maskable-icon>
+<bitmap
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@mipmap/ic_launcher_home" />
diff --git a/res/mipmap-hdpi/ic_launcher_home_foreground.png b/res/mipmap-hdpi/ic_launcher_home_foreground.png
new file mode 100644
index 0000000..d068d92
--- /dev/null
+++ b/res/mipmap-hdpi/ic_launcher_home_foreground.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_home_foreground.png b/res/mipmap-mdpi/ic_launcher_home_foreground.png
new file mode 100644
index 0000000..0ed9f4d
--- /dev/null
+++ b/res/mipmap-mdpi/ic_launcher_home_foreground.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_home_foreground.png b/res/mipmap-xhdpi/ic_launcher_home_foreground.png
new file mode 100644
index 0000000..7a9daf5
--- /dev/null
+++ b/res/mipmap-xhdpi/ic_launcher_home_foreground.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_home_foreground.png b/res/mipmap-xxhdpi/ic_launcher_home_foreground.png
new file mode 100644
index 0000000..03b493e
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_launcher_home_foreground.png
Binary files differ
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 68f0092..83a44d7 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -40,4 +40,5 @@
     <color name="notification_background_color">#FFF</color>
     <color name="notification_color_beneath">#E0E0E0</color> <!-- Gray 300 -->
     <color name="divider_color">@color/notification_color_beneath</color>
+    <color name="icon_background">#E0E0E0</color> <!-- Gray 300 -->
 </resources>
diff --git a/src/com/android/launcher3/graphics/DrawableFactory.java b/src/com/android/launcher3/graphics/DrawableFactory.java
index 8b207bb..60bbce4 100644
--- a/src/com/android/launcher3/graphics/DrawableFactory.java
+++ b/src/com/android/launcher3/graphics/DrawableFactory.java
@@ -85,10 +85,10 @@
         if (Utilities.isAtLeastO()) {
             try {
                 // Try to load the path from Mask Icon
-                Drawable maskIcon = context.getDrawable(R.drawable.mask_drawable_wrapper);
-                maskIcon.setBounds(0, 0,
+                Drawable icon = context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper);
+                icon.setBounds(0, 0,
                         PreloadIconDrawable.PATH_SIZE, PreloadIconDrawable.PATH_SIZE);
-                return (Path) maskIcon.getClass().getMethod("getIconMask").invoke(maskIcon);
+                return (Path) icon.getClass().getMethod("getIconMask").invoke(icon);
             } catch (Exception e) {
                 Log.e(TAG, "Error loading mask icon", e);
             }
diff --git a/src/com/android/launcher3/graphics/LauncherIcons.java b/src/com/android/launcher3/graphics/LauncherIcons.java
index 1a50dfe..439205b 100644
--- a/src/com/android/launcher3/graphics/LauncherIcons.java
+++ b/src/com/android/launcher3/graphics/LauncherIcons.java
@@ -40,7 +40,6 @@
 import com.android.launcher3.R;
 import com.android.launcher3.Utilities;
 import com.android.launcher3.config.FeatureFlags;
-import com.android.launcher3.config.ProviderConfig;
 import com.android.launcher3.model.PackageItemInfo;
 import com.android.launcher3.shortcuts.DeepShortcutManager;
 import com.android.launcher3.shortcuts.ShortcutInfoCompat;
@@ -166,7 +165,7 @@
      * @param scale the scale to apply before drawing {@param icon} on the canvas
      */
     public static Bitmap createIconBitmap(Drawable icon, Context context, float scale) {
-        icon = wrapToMaskableIconDrawable(context, icon);
+        icon = wrapToAdaptiveIconDrawable(context, icon);
         synchronized (sCanvas) {
             final int iconBitmapSize = LauncherAppState.getIDP(context).iconBitmapSize;
 
@@ -223,24 +222,24 @@
     }
 
     /**
-     * If the platform is running O but the app is not providing MaskableIconDrawable, then
+     * If the platform is running O but the app is not providing AdaptiveIconDrawable, then
      * shrink the legacy icon and set it as foreground. Use color drawable as background to
-     * create MaskableIconDrawable.
+     * create AdaptiveIconDrawable.
      */
-    static Drawable wrapToMaskableIconDrawable(Context context, Drawable drawable) {
+    static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable) {
         if (!(FeatureFlags.LEGACY_ICON_TREATMENT && Utilities.isAtLeastO())) {
             return drawable;
         }
 
         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();
-                ((FixedScaleDrawable) clazz.getMethod("getForeground").invoke(maskWrapper))
+                Drawable iconWrapper =
+                        context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
+                ((FixedScaleDrawable) clazz.getMethod("getForeground").invoke(iconWrapper))
                         .setDrawable(drawable);
 
-                return maskWrapper;
+                return iconWrapper;
             }
         } catch (Exception e) {
             return drawable;