Change launcher and shortcut icons to MaskableIconDrawable
Test: manual test on Launcher3
Bug: 33034275
Bug: 35431198

Change-Id: Ief9f49ec38ec95daa738799398fc4b458d634acc
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0501077..d436ba7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -83,7 +83,7 @@
     <uses-permission android:name="android.permission.DELETE_PACKAGES"/>
 
     <application android:label="@string/settings_label"
-            android:icon="@mipmap/ic_launcher_settings"
+            android:icon="@drawable/ic_launcher_settings"
             android:taskAffinity=""
             android:theme="@style/Theme.Settings"
             android:hardwareAccelerated="true"
diff --git a/res/drawable/ic_launcher_settings.xml b/res/drawable/ic_launcher_settings.xml
new file mode 100644
index 0000000..57d54e5
--- /dev/null
+++ b/res/drawable/ic_launcher_settings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="?android:attr/colorAccent"/>
+    <foreground android:drawable="@mipmap/ic_launcher_settings"/>
+</maskable-icon>
diff --git a/res/drawable/ic_shortcut_battery.xml b/res/drawable/ic_shortcut_battery.xml
index 97fdd11..a61b1a3 100644
--- a/res/drawable/ic_shortcut_battery.xml
+++ b/res/drawable/ic_shortcut_battery.xml
@@ -14,17 +14,20 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="80dp"
-    android:height="80dp"
-    android:viewportWidth="52.0"
-    android:viewportHeight="52.0" >
-    <path
-        android:fillColor="#FFF5F5F5"
-        android:pathData="M2,26a24,24 0 1,0 48,0a24,24 0 1,0 -48,0"/>
-    <path
-        android:fillColor="@*android:color/accent_device_default_light"
-        android:pathData="M29.67,18H28v-2h-4v2h-1.67C21.6,18,21,18.6,21,19.33v15.33C21,35.4,21.6,36,22.33,36h7.33
-                C30.4,36,31,35.4,31,34.67V19.33C31,18.6,30.4,18,29.67,18z"/>
-</vector>
\ No newline at end of file
+<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/shortcut_background"/>
+    <foreground>
+        <vector
+          android:width="120dp"
+          android:height="120dp"
+          android:viewportWidth="78.0"
+          android:viewportHeight="78.0">
+            <group android:translateX="13.0" android:translateY="13.0">
+                <path
+                    android:fillColor="@*android:color/accent_device_default_light"
+                    android:pathData="M29.67,18H28v-2h-4v2h-1.67C21.6,18,21,18.6,21,19.33v15.33C21,35.4,21.6,36,22.33,36h7.33
+                            C30.4,36,31,35.4,31,34.67V19.33C31,18.6,30.4,18,29.67,18z"/>
+            </group>
+        </vector>
+    </foreground>
+</maskable-icon>
\ No newline at end of file
diff --git a/res/drawable/ic_shortcut_data_usage.xml b/res/drawable/ic_shortcut_data_usage.xml
index dddd493..cc0c6bc 100644
--- a/res/drawable/ic_shortcut_data_usage.xml
+++ b/res/drawable/ic_shortcut_data_usage.xml
@@ -14,18 +14,21 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="80dp"
-    android:height="80dp"
-    android:viewportWidth="52.0"
-    android:viewportHeight="52.0" >
-    <path
-        android:fillColor="#FFF5F5F5"
-        android:pathData="M2,26a24,24 0 1,0 48,0a24,24 0 1,0 -48,0"/>
-    <path
-        android:fillColor="@*android:color/accent_device_default_light"
-        android:pathData="M27,16.05v3.03c3.39,0.49,6,3.39,6,6.92c0,0.9-0.18,1.75-0.48,2.54l2.6,1.53C35.68,28.83,36,27.45,36,26
-                C36,20.82,32.05,16.55,27,16.05z M26,33c-3.87,0-7-3.13-7-7c0-3.53,2.61-6.43,6-6.92v-3.03c-5.06,0.5-9,4.76-9,9.95
-                c0,5.52,4.47,10,9.99,10c3.31,0,6.24-1.61,8.06-4.09l-2.6-1.53C30.17,31.98,28.21,33,26,33z"/>
-</vector>
\ No newline at end of file
+<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/shortcut_background"/>
+    <foreground>
+        <vector
+          android:width="120dp"
+          android:height="120dp"
+          android:viewportWidth="78.0"
+          android:viewportHeight="78.0">
+            <group android:translateX="13.0" android:translateY="13.0">
+                <path
+                    android:fillColor="@*android:color/accent_device_default_light"
+                    android:pathData="M27,16.05v3.03c3.39,0.49,6,3.39,6,6.92c0,0.9-0.18,1.75-0.48,2.54l2.6,1.53C35.68,28.83,36,27.45,36,26
+                            C36,20.82,32.05,16.55,27,16.05z M26,33c-3.87,0-7-3.13-7-7c0-3.53,2.61-6.43,6-6.92v-3.03c-5.06,0.5-9,4.76-9,9.95
+                            c0,5.52,4.47,10,9.99,10c3.31,0,6.24-1.61,8.06-4.09l-2.6-1.53C30.17,31.98,28.21,33,26,33z"/>
+            </group>
+        </vector>
+    </foreground>
+</maskable-icon>
\ No newline at end of file
diff --git a/res/drawable/ic_shortcut_wireless.xml b/res/drawable/ic_shortcut_wireless.xml
index d5607e5..a5fc43a 100644
--- a/res/drawable/ic_shortcut_wireless.xml
+++ b/res/drawable/ic_shortcut_wireless.xml
@@ -14,16 +14,19 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="80dp"
-    android:height="80dp"
-    android:viewportWidth="52.0"
-    android:viewportHeight="52.0" >
-    <path
-        android:fillColor="#FFF5F5F5"
-        android:pathData="M2,26a24,24 0 1,0 48,0a24,24 0 1,0 -48,0"/>
-    <path
-        android:fillColor="@*android:color/accent_device_default_light"
-        android:pathData="M26.01,35.49L37.64,21c-0.45-0.34-4.93-4-11.64-4c-6.72,0-11.19,3.66-11.64,4l11.63,14.49L26,35.5L26.01,35.49z"/>
-</vector>
\ No newline at end of file
+<maskable-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/shortcut_background"/>
+    <foreground>
+        <vector
+            android:width="120dp"
+            android:height="120dp"
+            android:viewportWidth="78.0"
+            android:viewportHeight="78.0">
+            <group android:translateX="13.0" android:translateY="13.0">
+                <path
+                    android:fillColor="@*android:color/accent_device_default_light"
+                    android:pathData="M26.01,35.49L37.64,21c-0.45-0.34-4.93-4-11.64-4c-6.72,0-11.19,3.66-11.64,4l11.63,14.49L26,35.5L26.01,35.49z"/>
+            </group>
+        </vector>
+    </foreground>
+</maskable-icon>
\ No newline at end of file
diff --git a/res/layout/shortcut_badge_maskable.xml b/res/layout/shortcut_badge_maskable.xml
new file mode 100644
index 0000000..e1d555a
--- /dev/null
+++ b/res/layout/shortcut_badge_maskable.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="@dimen/shortcut_size_maskable"
+    android:layout_height="@dimen/shortcut_size_maskable"
+    android:background="@color/shortcut_background">
+    <Space
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+      android:layout_weight="22"/>
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:tint="@color/icon_accent"
+        android:scaleType="fitCenter"
+        android:layout_weight="16"/>
+    <Space
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="22"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/mipmap-hdpi/ic_launcher_settings.png b/res/mipmap-hdpi/ic_launcher_settings.png
index 252e6b4..ddce98e 100644
--- a/res/mipmap-hdpi/ic_launcher_settings.png
+++ b/res/mipmap-hdpi/ic_launcher_settings.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_settings.png b/res/mipmap-mdpi/ic_launcher_settings.png
index d2ecee9..86f3be8 100644
--- a/res/mipmap-mdpi/ic_launcher_settings.png
+++ b/res/mipmap-mdpi/ic_launcher_settings.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_settings.png b/res/mipmap-xhdpi/ic_launcher_settings.png
index fa8c813..360aa69 100644
--- a/res/mipmap-xhdpi/ic_launcher_settings.png
+++ b/res/mipmap-xhdpi/ic_launcher_settings.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_settings.png b/res/mipmap-xxhdpi/ic_launcher_settings.png
index 3fa69e9..7cb67a9 100644
--- a/res/mipmap-xxhdpi/ic_launcher_settings.png
+++ b/res/mipmap-xxhdpi/ic_launcher_settings.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_settings.png b/res/mipmap-xxxhdpi/ic_launcher_settings.png
index 72946b7..3fec9c4 100644
--- a/res/mipmap-xxxhdpi/ic_launcher_settings.png
+++ b/res/mipmap-xxxhdpi/ic_launcher_settings.png
Binary files differ
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 300d73a..fdb1265 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -114,4 +114,7 @@
     <!-- Color for the background of the donut graph.-->
     <color name="donut_background_grey">#ffd7d7d7</color>
 
+    <!-- Color for the background of the shortcut icons.-->
+    <color name="shortcut_background">#fff5f5f5</color>
+
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 2bc83c1..0ddc634 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -245,7 +245,9 @@
     <dimen name="mdm_app_name_padding_left">16dp</dimen>
     <dimen name="mdm_app_icon_width_height">56dp</dimen>
 
+    <dimen name="shortcut_size_maskable">120dp</dimen>
     <dimen name="shortcut_size">40dp</dimen>
+    <dimen name="shortcut_icon_size">16dp</dimen>
     <dimen name="badge_size">10dp</dimen>
 
     <!-- Admin support contact details dialog. -->
diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java
index 56ab34a..bd71377 100644
--- a/src/com/android/settings/CreateShortcut.java
+++ b/src/com/android/settings/CreateShortcut.java
@@ -29,6 +29,7 @@
 import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
 import android.graphics.drawable.Icon;
+import android.graphics.drawable.MaskableIconDrawable;
 import android.net.ConnectivityManager;
 import android.os.AsyncTask;
 import android.support.annotation.VisibleForTesting;
@@ -68,19 +69,22 @@
     protected Intent createResultIntent(Intent shortcutIntent, ResolveInfo resolveInfo,
             CharSequence label) {
         shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
+        ShortcutManager sm = getSystemService(ShortcutManager.class);
         ActivityInfo activityInfo = resolveInfo.activityInfo;
-        Bitmap icon = activityInfo.icon != 0 ? createIcon(activityInfo.icon) : null;
 
+        Icon maskableIcon = activityInfo.icon != 0 ? Icon.createWithMaskableBitmap(
+                createIcon(activityInfo.icon,
+                        R.layout.shortcut_badge_maskable,
+                        getResources().getDimensionPixelSize(R.dimen.shortcut_size_maskable))) :
+                Icon.createWithResource(this, R.drawable.ic_launcher_settings);
         String shortcutId = SHORTCUT_ID_PREFIX +
                 shortcutIntent.getComponent().flattenToShortString();
         ShortcutInfo info = new ShortcutInfo.Builder(this, shortcutId)
                 .setShortLabel(label)
                 .setIntent(shortcutIntent)
-                .setIcon(icon != null ? Icon.createWithBitmap(icon) :
-                        Icon.createWithResource(this, R.mipmap.ic_launcher_settings))
+                .setIcon(maskableIcon)
                 .build();
-        Intent intent = getSystemService(ShortcutManager.class).createShortcutResultIntent(info);
+        Intent intent = sm.createShortcutResultIntent(info);
         if (intent == null) {
             intent = new Intent();
         }
@@ -88,7 +92,12 @@
                 Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher_settings));
         intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
         intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, label);
-        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+
+        if (activityInfo.icon != 0) {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, createIcon(activityInfo.icon,
+                R.layout.shortcut_badge,
+                getResources().getDimensionPixelSize(R.dimen.shortcut_size)));
+        }
         return intent;
     }
 
@@ -101,12 +110,12 @@
                 info.activityInfo.name);
     }
 
-    private Bitmap createIcon(int resource) {
+    private Bitmap createIcon(int resource, int layoutRes, int size) {
         Context context = new ContextThemeWrapper(this, android.R.style.Theme_Material);
-        View view = LayoutInflater.from(context).inflate(R.layout.shortcut_badge, null);
+        View view = LayoutInflater.from(context).inflate(layoutRes, null);
         ((ImageView) view.findViewById(android.R.id.icon)).setImageResource(resource);
 
-        int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+        int spec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
         view.measure(spec, spec);
         Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
                 Config.ARGB_8888);