diff --git a/quickstep/src/com/android/quickstep/TaskIconCache.java b/quickstep/src/com/android/quickstep/TaskIconCache.java index dc60875db8..7c05a1092c 100644 --- a/quickstep/src/com/android/quickstep/TaskIconCache.java +++ b/quickstep/src/com/android/quickstep/TaskIconCache.java @@ -249,12 +249,13 @@ public class TaskIconCache implements DisplayInfoChangeListener { private BitmapInfo getBitmapInfo(Drawable drawable, int userId, int primaryColor, boolean isInstantApp) { try (BaseIconFactory bif = getIconFactory()) { - bif.disableColorExtraction(); bif.setWrapperBackgroundColor(primaryColor); // User version code O, so that the icon is always wrapped in an adaptive icon container return bif.createBadgedIconBitmap(drawable, - new IconOptions().setUser(UserHandle.of(userId)).setInstantApp(isInstantApp)); + new IconOptions().setUser(UserHandle.of(userId)) + .setInstantApp(isInstantApp) + .setExtractedColor(0)); } } diff --git a/src/com/android/launcher3/icons/ShortcutCachingLogic.java b/src/com/android/launcher3/icons/ShortcutCachingLogic.java index 9a86ede6f2..bb7248fea7 100644 --- a/src/com/android/launcher3/icons/ShortcutCachingLogic.java +++ b/src/com/android/launcher3/icons/ShortcutCachingLogic.java @@ -32,6 +32,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.LauncherAppState; +import com.android.launcher3.icons.BaseIconFactory.IconOptions; import com.android.launcher3.icons.cache.CachingLogic; import com.android.launcher3.shortcuts.ShortcutKey; import com.android.launcher3.util.Themes; @@ -76,9 +77,8 @@ public class ShortcutCachingLogic implements CachingLogic { Drawable unbadgedDrawable = ShortcutCachingLogic.getIcon( context, info, LauncherAppState.getIDP(context).fillResIconDpi); if (unbadgedDrawable == null) return BitmapInfo.LOW_RES_INFO; - return new BitmapInfo( - li.createScaledBitmap(unbadgedDrawable, BaseIconFactory.MODE_WITH_SHADOW), - Themes.getColorAccent(context)); + return li.createBadgedIconBitmap(unbadgedDrawable, + new IconOptions().setExtractedColor(Themes.getColorAccent(context))); } } diff --git a/tests/res/xml/shortcuts.xml b/tests/res/xml/shortcuts.xml index bdc22f98cb..fde0dbb2b1 100644 --- a/tests/res/xml/shortcuts.xml +++ b/tests/res/xml/shortcuts.xml @@ -2,6 +2,7 @@ diff --git a/tests/src/com/android/launcher3/ui/workspace/ThemeIconsTest.java b/tests/src/com/android/launcher3/ui/workspace/ThemeIconsTest.java index e66810cc3d..57731d0af9 100644 --- a/tests/src/com/android/launcher3/ui/workspace/ThemeIconsTest.java +++ b/tests/src/com/android/launcher3/ui/workspace/ThemeIconsTest.java @@ -32,6 +32,7 @@ import com.android.launcher3.BubbleTextView; import com.android.launcher3.icons.ThemedIconDrawable; import com.android.launcher3.tapl.HomeAllApps; import com.android.launcher3.tapl.HomeAppIcon; +import com.android.launcher3.tapl.HomeAppIconMenuItem; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.ui.TaplTestsLauncher3; @@ -49,6 +50,8 @@ import java.util.Queue; public class ThemeIconsTest extends AbstractLauncherUiTest { private static final String APP_NAME = "ThemeIconTestActivity"; + private static final String SHORTCUT_APP_NAME = "LauncherTestApp"; + private static final String SHORTCUT_NAME = "Shortcut 1"; @Test public void testIconWithoutTheme() throws Exception { @@ -60,9 +63,28 @@ public class ThemeIconsTest extends AbstractLauncherUiTest { try { HomeAppIcon icon = allApps.getAppIcon(APP_NAME); - executeOnLauncher(l -> verifyIconTheme(l.getAppsView(), false)); + executeOnLauncher(l -> verifyIconTheme(APP_NAME, l.getAppsView(), false)); icon.dragToWorkspace(false, false); - executeOnLauncher(l -> verifyIconTheme(l.getWorkspace(), false)); + executeOnLauncher(l -> verifyIconTheme(APP_NAME, l.getWorkspace(), false)); + } finally { + allApps.unfreeze(); + } + } + + @Test + public void testShortcutIconWithoutTheme() throws Exception { + setThemeEnabled(false); + TaplTestsLauncher3.initialize(this); + + HomeAllApps allApps = mLauncher.getWorkspace().switchToAllApps(); + allApps.freeze(); + + try { + HomeAppIcon icon = allApps.getAppIcon(SHORTCUT_APP_NAME); + HomeAppIconMenuItem shortcutItem = + (HomeAppIconMenuItem) icon.openDeepShortcutMenu().getMenuItem(SHORTCUT_NAME); + shortcutItem.dragToWorkspace(false, false); + executeOnLauncher(l -> verifyIconTheme(SHORTCUT_NAME, l.getWorkspace(), false)); } finally { allApps.unfreeze(); } @@ -78,15 +100,34 @@ public class ThemeIconsTest extends AbstractLauncherUiTest { try { HomeAppIcon icon = allApps.getAppIcon(APP_NAME); - executeOnLauncher(l -> verifyIconTheme(l.getAppsView(), false)); + executeOnLauncher(l -> verifyIconTheme(APP_NAME, l.getAppsView(), false)); icon.dragToWorkspace(false, false); - executeOnLauncher(l -> verifyIconTheme(l.getWorkspace(), true)); + executeOnLauncher(l -> verifyIconTheme(APP_NAME, l.getWorkspace(), true)); } finally { allApps.unfreeze(); } } - private void verifyIconTheme(ViewGroup parent, boolean isThemed) { + @Test + public void testShortcutIconWithTheme() throws Exception { + setThemeEnabled(true); + TaplTestsLauncher3.initialize(this); + + HomeAllApps allApps = mLauncher.getWorkspace().switchToAllApps(); + allApps.freeze(); + + try { + HomeAppIcon icon = allApps.getAppIcon(SHORTCUT_APP_NAME); + HomeAppIconMenuItem shortcutItem = + (HomeAppIconMenuItem) icon.openDeepShortcutMenu().getMenuItem(SHORTCUT_NAME); + shortcutItem.dragToWorkspace(false, false); + executeOnLauncher(l -> verifyIconTheme(SHORTCUT_NAME, l.getWorkspace(), true)); + } finally { + allApps.unfreeze(); + } + } + + private void verifyIconTheme(String title, ViewGroup parent, boolean isThemed) { // Find the app icon Queue viewQueue = new ArrayDeque<>(); viewQueue.add(parent); @@ -100,7 +141,7 @@ public class ThemeIconsTest extends AbstractLauncherUiTest { } } else if (view instanceof BubbleTextView) { BubbleTextView btv = (BubbleTextView) view; - if (APP_NAME.equals(btv.getText())) { + if (title.equals(btv.getText())) { icon = btv; break; }