From 20c30c9cdc1eb35631171df3d8aed8dd6a3feb78 Mon Sep 17 00:00:00 2001 From: Holly Sun Date: Tue, 5 Mar 2024 17:07:56 -0800 Subject: [PATCH] [PS] Do not use AppInfo and use PrivateSpaceInstallAppButtonInfo instead. BaseAllAppsAdapter.AdapterItem's itemInfo needs to be an AppInfo. Create PrivateSpaceInstallAppButtonInfo extending from AppInfo and use different itemType (AppInfo has default itemType ITEM_TYPE_APPLICATION). In this case, shortcuts is disabled in ShortcutUtil#supportsShortcuts because `isApp` is false (https://source.corp.google.com/h/googleplex-android/platform/superproject/main/+/main:packages/apps/Launcher3/src/com/android/launcher3/util/ShortcutUtil.java;l=30?q=shortcututil&sq=repo:googleplex-android%2Fplatform%2Fsuperproject%2Fmain%20b:main). After the fix, long click on Install button quits Toast, which is the same with drag action on the button. Since we have a specific itemType for PS install button now, the previous `FLAG_PRIVATE_SPACE_INSTALL_APP` is no longer needed. Remove it. Bug: 324211283 Test: manual Flag: aconfig com.google.android.apps.nexuslauncher.private_space_app_installer_button trunkfood Change-Id: Ic5d4284afb93cef77f2ad8f0c1588523e0ed3ae3 --- .../android/launcher3/LauncherSettings.java | 7 +++++ .../allapps/PrivateProfileManager.java | 6 ++-- .../launcher3/model/data/ItemInfo.java | 4 +++ .../model/data/ItemInfoWithIcon.java | 5 ---- .../PrivateSpaceInstallAppButtonInfo.java | 29 +++++++++++++++++++ .../launcher3/touch/ItemClickHandler.java | 4 +-- 6 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 src/com/android/launcher3/model/data/PrivateSpaceInstallAppButtonInfo.java diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index 34ebaf2539..84b8ba1126 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -138,6 +138,11 @@ public class LauncherSettings { */ public static final int ITEM_TYPE_SEARCH_ACTION = 9; + /** + * Private space install app button. + */ + public static final int ITEM_TYPE_PRIVATE_SPACE_INSTALL_APP_BUTTON = 11; + /** * The custom icon bitmap. *

Type: BLOB

@@ -206,6 +211,8 @@ public class LauncherSettings { case ITEM_TYPE_TASK: return "TASK"; case ITEM_TYPE_QSB: return "QSB"; case ITEM_TYPE_APP_PAIR: return "APP_PAIR"; + case ITEM_TYPE_PRIVATE_SPACE_INSTALL_APP_BUTTON: + return "PRIVATE_SPACE_INSTALL_APP_BUTTON"; default: return String.valueOf(type); } } diff --git a/src/com/android/launcher3/allapps/PrivateProfileManager.java b/src/com/android/launcher3/allapps/PrivateProfileManager.java index 1ebd49e9dd..6b2b7e1024 100644 --- a/src/com/android/launcher3/allapps/PrivateProfileManager.java +++ b/src/com/android/launcher3/allapps/PrivateProfileManager.java @@ -23,7 +23,6 @@ import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_PRIVATE import static com.android.launcher3.allapps.SectionDecorationInfo.ROUND_NOTHING; import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED; import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_NOT_PINNABLE; -import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_PRIVATE_SPACE_INSTALL_APP; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.SettingsCache.PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI; @@ -43,6 +42,7 @@ import com.android.launcher3.icons.BitmapInfo; import com.android.launcher3.icons.LauncherIcons; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.AppInfo; +import com.android.launcher3.model.data.PrivateSpaceInstallAppButtonInfo; import com.android.launcher3.pm.UserCache; import com.android.launcher3.uioverrides.ApiWrapper; import com.android.launcher3.util.Preconditions; @@ -105,13 +105,13 @@ public class PrivateProfileManager extends UserProfileManager { context, com.android.launcher3.R.drawable.private_space_install_app_icon); BitmapInfo bitmapInfo = LauncherIcons.obtain(context).createIconBitmap(shortcut); - AppInfo itemInfo = new AppInfo(); + PrivateSpaceInstallAppButtonInfo itemInfo = new PrivateSpaceInstallAppButtonInfo(); itemInfo.title = context.getResources().getString(R.string.ps_add_button_label); itemInfo.intent = mAppInstallerIntent; itemInfo.bitmap = bitmapInfo; itemInfo.contentDescription = context.getResources().getString( com.android.launcher3.R.string.ps_add_button_content_description); - itemInfo.runtimeStatusFlags |= FLAG_PRIVATE_SPACE_INSTALL_APP | FLAG_NOT_PINNABLE; + itemInfo.runtimeStatusFlags |= FLAG_NOT_PINNABLE; BaseAllAppsAdapter.AdapterItem item = new BaseAllAppsAdapter.AdapterItem(VIEW_TYPE_ICON); item.itemInfo = itemInfo; diff --git a/src/com/android/launcher3/model/data/ItemInfo.java b/src/com/android/launcher3/model/data/ItemInfo.java index 55849c2149..f7cff78ba1 100644 --- a/src/com/android/launcher3/model/data/ItemInfo.java +++ b/src/com/android/launcher3/model/data/ItemInfo.java @@ -94,6 +94,10 @@ public class ItemInfo { * {@link Favorites#ITEM_TYPE_APP_PAIR}, * {@link Favorites#ITEM_TYPE_APPWIDGET} or * {@link Favorites#ITEM_TYPE_CUSTOM_APPWIDGET}. + * {@link Favorites#ITEM_TYPE_TASK}. + * {@link Favorites#ITEM_TYPE_QSB}. + * {@link Favorites#ITEM_TYPE_SEARCH_ACTION}. + * {@link Favorites#ITEM_TYPE_PRIVATE_SPACE_INSTALL_APP_BUTTON}. */ public int itemType; diff --git a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java index 352c3633ac..b2f7c10275 100644 --- a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java +++ b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java @@ -120,11 +120,6 @@ public abstract class ItemInfoWithIcon extends ItemInfo { */ public static final int FLAG_ARCHIVED = 1 << 14; - /** - * Flag indicating it's the Private Space Install App icon. - */ - public static final int FLAG_PRIVATE_SPACE_INSTALL_APP = 1 << 15; - /** * Status associated with the system state of the underlying item. This is calculated every * time a new info is created and not persisted on the disk. diff --git a/src/com/android/launcher3/model/data/PrivateSpaceInstallAppButtonInfo.java b/src/com/android/launcher3/model/data/PrivateSpaceInstallAppButtonInfo.java new file mode 100644 index 0000000000..1e7281dd1d --- /dev/null +++ b/src/com/android/launcher3/model/data/PrivateSpaceInstallAppButtonInfo.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2024 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. + */ + +package com.android.launcher3.model.data; + +import com.android.launcher3.LauncherSettings; + +/** + * Represents the Private Space Install App button in AllAppsView. + */ +public class PrivateSpaceInstallAppButtonInfo extends AppInfo { + + public PrivateSpaceInstallAppButtonInfo() { + itemType = LauncherSettings.Favorites.ITEM_TYPE_PRIVATE_SPACE_INSTALL_APP_BUTTON; + } +} diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java index 111931eeeb..911568c3b6 100644 --- a/src/com/android/launcher3/touch/ItemClickHandler.java +++ b/src/com/android/launcher3/touch/ItemClickHandler.java @@ -369,8 +369,8 @@ public class ItemClickHandler { intent = ApiWrapper.getAppMarketActivityIntent(launcher, itemInfoWithIcon.getTargetComponent().getPackageName(), Process.myUserHandle()); - } else if ((itemInfoWithIcon.runtimeStatusFlags - & ItemInfoWithIcon.FLAG_PRIVATE_SPACE_INSTALL_APP) != 0) { + } else if (itemInfoWithIcon.itemType + == LauncherSettings.Favorites.ITEM_TYPE_PRIVATE_SPACE_INSTALL_APP_BUTTON) { intent = ApiWrapper.getAppMarketActivityIntent(launcher, BuildConfig.APPLICATION_ID, launcher.getAppsView().getPrivateProfileManager().getProfileUser());