From d2f256f179d8aae9307018c17ed14656b11dcdee Mon Sep 17 00:00:00 2001 From: Jeremy Sim Date: Wed, 3 Apr 2024 18:30:52 -0700 Subject: [PATCH] Fix launch flow when one app in an app pair is paused This CL changes the error handling logic in ItemClickHandler to continue with app pair launch when only one app in an app pair is paused. It also changes AppPairIconGraphic so that the disabled state of the app pair is drawn modularly (if only one app is paused, only one app will appear visually paused). Bug: 330795643 Flag: ACONFIG com.android.wm.shell.enable_app_pairs TRUNKFOOD Test: Manual Change-Id: Ieaf0120cced07b6ac0f3eb07c75b66666a8dcc85 (cherry picked from commit 17db14b1070022b8c491b55c3968d95d7dc9999f) Merged-In: Ieaf0120cced07b6ac0f3eb07c75b66666a8dcc85 --- res/values/strings.xml | 2 ++ .../launcher3/apppairs/AppPairIconGraphic.kt | 12 ---------- .../launcher3/touch/ItemClickHandler.java | 23 ++++++++++++------- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index aaef15b2af..9f4d308877 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -50,6 +50,8 @@ This app pair isn\'t supported on this device Unfold device to use this app pair + + App pair isn\'t available diff --git a/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt b/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt index ed593ae16e..a974133755 100644 --- a/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt +++ b/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt @@ -26,7 +26,6 @@ import androidx.annotation.OpenForTesting import com.android.launcher3.DeviceProfile import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener import com.android.launcher3.icons.BitmapInfo -import com.android.launcher3.icons.FastBitmapDrawable.getDisabledColorFilter import com.android.launcher3.model.data.AppPairInfo import com.android.launcher3.util.Themes import com.android.launcher3.views.ActivityContext @@ -62,21 +61,10 @@ constructor(context: Context, attrs: AttributeSet? = null) : appIcon1.setBounds(0, 0, p.memberIconSize.toInt(), p.memberIconSize.toInt()) appIcon2.setBounds(0, 0, p.memberIconSize.toInt(), p.memberIconSize.toInt()) - val shouldDrawAsDisabled = - appPairInfo.isDisabled || !appPairInfo.isLaunchable(p.context) - - // Set disabled status on icons. - appIcon1.setIsDisabled(shouldDrawAsDisabled) - appIcon2.setIsDisabled(shouldDrawAsDisabled) - // Create icon drawable. val fullIconDrawable = AppPairIconDrawable(p, appIcon1, appIcon2) fullIconDrawable.setBounds(0, 0, p.iconSize, p.iconSize) - // Set disabled color filter on background paint. - fullIconDrawable.colorFilter = - if (shouldDrawAsDisabled) getDisabledColorFilter() else null - return fullIconDrawable } } diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java index de24be7b8a..816d5e9f44 100644 --- a/src/com/android/launcher3/touch/ItemClickHandler.java +++ b/src/com/android/launcher3/touch/ItemClickHandler.java @@ -158,20 +158,27 @@ public class ItemClickHandler { ? R.string.app_pair_needs_unfold : R.string.app_pair_unlaunchable_at_screen_size, Toast.LENGTH_SHORT).show(); + return; } else if (appPairIcon.getInfo().isDisabled()) { WorkspaceItemInfo app1 = appPairIcon.getInfo().getFirstApp(); WorkspaceItemInfo app2 = appPairIcon.getInfo().getSecondApp(); // 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); + if (app1.isDisabled() && app2.isDisabled()) { + // Both apps are disabled, show "app pair is not available" toast. + Toast.makeText(launcher, R.string.app_pair_not_available, Toast.LENGTH_SHORT) + .show(); + return; + } else if ((app1.isDisabled() && handleDisabledItemClicked(app1, launcher)) + || (app2.isDisabled() && handleDisabledItemClicked(app2, launcher))) { + // Only one is disabled, and handleDisabledItemClicked() will show a toast, so we + // are done. + return; } - } else { - launcher.launchAppPair(appPairIcon); } + + // Either the app pair is not disabled, or it is a disabled state that can be handled by + // framework directly (e.g. one app is paused), so go ahead and launch. + launcher.launchAppPair(appPairIcon); } /**