diff --git a/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt b/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt index b2497a3050..ce354b681a 100644 --- a/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt +++ b/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt @@ -112,7 +112,6 @@ class AppPairIconGraphic @JvmOverloads constructor(context: Context, attrs: Attr appIcon2?.setBounds(0, 0, memberIconSize.toInt(), memberIconSize.toInt()) } - /** Gets this icon graphic's bounds, with respect to the parent icon's coordinate system. */ fun getIconBounds(outBounds: Rect) { outBounds.set(0, 0, backgroundSize.toInt(), backgroundSize.toInt()) @@ -138,15 +137,8 @@ class AppPairIconGraphic @JvmOverloads constructor(context: Context, attrs: Attr // Draw background appPairBackground.draw(canvas) - // Make sure icons are loaded - if ( - appIcon1 == null || - appIcon2 == null || - appIcon1 is PlaceHolderIconDrawable || - appIcon2 is PlaceHolderIconDrawable - ) { - applyIcons(parentIcon.info.contents) - } + // Make sure icons are loaded and fresh + applyIcons(parentIcon.info.contents) // Draw first icon canvas.save() diff --git a/src/com/android/launcher3/model/data/FolderInfo.java b/src/com/android/launcher3/model/data/FolderInfo.java index 5b541d045b..83ba2b3a9f 100644 --- a/src/com/android/launcher3/model/data/FolderInfo.java +++ b/src/com/android/launcher3/model/data/FolderInfo.java @@ -371,4 +371,13 @@ public class FolderInfo extends ItemInfo { } return LauncherAtom.ToState.TO_STATE_UNSPECIFIED; } + + @Override + public boolean isDisabled() { + if (itemType == LauncherSettings.Favorites.ITEM_TYPE_APP_PAIR) { + return contents.stream().anyMatch((WorkspaceItemInfo::isDisabled)); + } + + return super.isDisabled(); + } } diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java index 9d50e6ac9c..f47ab90822 100644 --- a/src/com/android/launcher3/touch/ItemClickHandler.java +++ b/src/com/android/launcher3/touch/ItemClickHandler.java @@ -149,7 +149,20 @@ public class ItemClickHandler { private static void onClickAppPairIcon(View v) { Launcher launcher = Launcher.getLauncher(v.getContext()); AppPairIcon appPairIcon = (AppPairIcon) v; - launcher.launchAppPair(appPairIcon); + if (appPairIcon.getInfo().isDisabled()) { + WorkspaceItemInfo app1 = appPairIcon.getInfo().contents.get(0); + WorkspaceItemInfo app2 = appPairIcon.getInfo().contents.get(1); + // Show the user why the app pair is disabled. + if (app1.isDisabled() && !handleDisabledItemClicked(app1, launcher)) { + // If handleDisabledItemClicked() did not handle the error message, we initiate an + // app launch so Framework can tell the user why the app is suspended. + onClickAppShortcut(v, app1, launcher); + } else if (app2.isDisabled() && !handleDisabledItemClicked(app2, launcher)) { + onClickAppShortcut(v, app2, launcher); + } + } else { + launcher.launchAppPair(appPairIcon); + } } /**