Change launcher and shortcut icons to MaskableIconDrawable
Test: manual test on Launcher3 Bug: 33034275 Bug: 35431198 Change-Id: Ief9f49ec38ec95daa738799398fc4b458d634acc
@@ -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"
|
||||
|
5
res/drawable/ic_launcher_settings.xml
Normal file
@@ -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>
|
@@ -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>
|
||||
<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>
|
@@ -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>
|
||||
<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>
|
@@ -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>
|
||||
<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>
|
36
res/layout/shortcut_badge_maskable.xml
Normal file
@@ -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>
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 28 KiB |
@@ -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>
|
||||
|
@@ -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. -->
|
||||
|
@@ -29,6 +29,7 @@ import android.graphics.Bitmap;
|
||||
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 @@ public class CreateShortcut extends LauncherActivity {
|
||||
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 @@ public class CreateShortcut extends LauncherActivity {
|
||||
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 @@ public class CreateShortcut extends LauncherActivity {
|
||||
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);
|
||||
|