diff --git a/aconfig/launcher.aconfig b/aconfig/launcher.aconfig index 3166d82d29..75b3f70ce7 100644 --- a/aconfig/launcher.aconfig +++ b/aconfig/launcher.aconfig @@ -84,6 +84,13 @@ flag { bug: "315055849" } +flag { + name: "enable_shortcut_dont_suggest_app" + namespace: "launcher" + description: "Enables don't suggest app shortcut for suggested apps" + bug: "319250810" +} + flag { name: "enable_support_for_archiving" namespace: "launcher" diff --git a/quickstep/src/com/android/launcher3/model/AppEventProducer.java b/quickstep/src/com/android/launcher3/model/AppEventProducer.java index 8dded8faf5..e17fc8879c 100644 --- a/quickstep/src/com/android/launcher3/model/AppEventProducer.java +++ b/quickstep/src/com/android/launcher3/model/AppEventProducer.java @@ -38,6 +38,7 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ONRESUME; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_QUICKSWITCH_LEFT; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_QUICKSWITCH_RIGHT; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_DONT_SUGGEST_APP_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASK_LAUNCH_SWIPE_DOWN; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASK_LAUNCH_TAP; import static com.android.launcher3.model.PredictionHelper.isTrackedForHotseatPrediction; @@ -137,7 +138,8 @@ public class AppEventProducer implements StatsLogConsumer { || event == LAUNCHER_QUICKSWITCH_LEFT || event == LAUNCHER_APP_LAUNCH_DRAGDROP) { sendEvent(atomInfo, ACTION_LAUNCH, CONTAINER_PREDICTION); - } else if (event == LAUNCHER_ITEM_DROPPED_ON_DONT_SUGGEST) { + } else if (event == LAUNCHER_ITEM_DROPPED_ON_DONT_SUGGEST + || event == LAUNCHER_SYSTEM_SHORTCUT_DONT_SUGGEST_APP_TAP) { sendEvent(atomInfo, ACTION_DISMISS, CONTAINER_PREDICTION); } else if (event == LAUNCHER_ITEM_DRAG_STARTED) { mLastDragItem = atomInfo; diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 0d4a7f0e50..f0ab08c921 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -39,6 +39,7 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH import static com.android.launcher3.model.data.ItemInfo.NO_MATCHING_ID; import static com.android.launcher3.popup.QuickstepSystemShortcut.getSplitSelectShortcutByPosition; import static com.android.launcher3.popup.SystemShortcut.APP_INFO; +import static com.android.launcher3.popup.SystemShortcut.DONT_SUGGEST_APP; import static com.android.launcher3.popup.SystemShortcut.INSTALL; import static com.android.launcher3.popup.SystemShortcut.PRIVATE_PROFILE_INSTALL; import static com.android.launcher3.popup.SystemShortcut.WIDGETS; @@ -417,10 +418,12 @@ public class QuickstepLauncher extends Launcher { shortcuts.addAll(getSplitShortcuts()); shortcuts.add(WIDGETS); shortcuts.add(INSTALL); - if (Flags.enablePrivateSpaceInstallShortcut()) { shortcuts.add(PRIVATE_PROFILE_INSTALL); } + if (Flags.enableShortcutDontSuggestApp()) { + shortcuts.add(DONT_SUGGEST_APP); + } return shortcuts.stream(); } diff --git a/res/values/strings.xml b/res/values/strings.xml index 34677f6ae7..fb55c75a5d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -175,7 +175,7 @@ Install in private Install - + Don\'t suggest app Pin Prediction diff --git a/src/com/android/launcher3/SecondaryDropTarget.java b/src/com/android/launcher3/SecondaryDropTarget.java index 2dd610cbf9..0b92c285fb 100644 --- a/src/com/android/launcher3/SecondaryDropTarget.java +++ b/src/com/android/launcher3/SecondaryDropTarget.java @@ -155,6 +155,9 @@ public class SecondaryDropTarget extends ButtonDropTarget implements OnAlarmList } return INVALID; } else if (info.isPredictedItem()) { + if (Flags.enableShortcutDontSuggestApp()) { + return INVALID; + } return DISMISS_PREDICTION; } diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java index d2c3d3a214..45ff33ba66 100644 --- a/src/com/android/launcher3/logging/StatsLogManager.java +++ b/src/com/android/launcher3/logging/StatsLogManager.java @@ -211,6 +211,9 @@ public class StatsLogManager implements ResourceBasedOverride { @UiEvent(doc = "User tapped on pin system shortcut.") LAUNCHER_SYSTEM_SHORTCUT_PIN_TAP(522), + @UiEvent(doc = "User tapped on don't suggest app system shortcut.") + LAUNCHER_SYSTEM_SHORTCUT_DONT_SUGGEST_APP_TAP(1603), + @UiEvent(doc = "User is shown All Apps education view.") LAUNCHER_ALL_APPS_EDU_SHOWN(523), diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java index d4ab4ab622..fa7700b144 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -2,6 +2,7 @@ package com.android.launcher3.popup; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_PRIVATE_SPACE_INSTALL_SYSTEM_SHORTCUT_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_APP_INFO_TAP; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_DONT_SUGGEST_APP_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_WIDGETS_TAP; import android.app.ActivityOptions; @@ -324,6 +325,34 @@ public abstract class SystemShortcut extend } } + public static final Factory DONT_SUGGEST_APP = new Factory() { + @Nullable + @Override + public SystemShortcut getShortcut(Launcher activity, ItemInfo itemInfo, + View originalView) { + if (!itemInfo.isPredictedItem()) { + return null; + } + return new DontSuggestApp(activity, itemInfo, originalView); + } + }; + + private static class DontSuggestApp extends SystemShortcut { + DontSuggestApp(Launcher target, ItemInfo itemInfo, + View originalView) { + super(R.drawable.ic_block_no_shadow, R.string.dismiss_prediction_label, target, + itemInfo, originalView); + } + + @Override + public void onClick(View view) { + dismissTaskMenuView(mTarget); + mTarget.getStatsLogManager().logger() + .withItemInfo(mItemInfo) + .log(LAUNCHER_SYSTEM_SHORTCUT_DONT_SUGGEST_APP_TAP); + } + } + public static void dismissTaskMenuView(T activity) { AbstractFloatingView.closeOpenViews(activity, true, AbstractFloatingView.TYPE_ALL & ~AbstractFloatingView.TYPE_REBIND_SAFE);