From ddde81f4c03f33ee1f3da981cb3272a8839375ea Mon Sep 17 00:00:00 2001 From: Shamali P Date: Tue, 16 Jan 2024 19:22:39 +0000 Subject: [PATCH] Filter shortcuts in the widget picker activity. In its current state the WidgetPickerActivity only allows adding widget items, so to match the state, updated it to show only widgets. manual test - https://screen/cast/NDUxMjg1NjI0MTM0MDQxNnwxMzE4MzNhOS1mZg Bug: 320495335 Test: atest Launcher3Tests Flag: N/A Change-Id: Ifa75f457219efef49e104efc428d369187db2710 --- .../android/launcher3/model/WidgetsModel.java | 16 ++++++- .../launcher3/WidgetPickerActivity.java | 5 ++- .../android/launcher3/model/WidgetsModel.java | 42 +++++++++++++------ 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/go/src/com/android/launcher3/model/WidgetsModel.java b/go/src/com/android/launcher3/model/WidgetsModel.java index 1aa5d03f6d..3a28444142 100644 --- a/go/src/com/android/launcher3/model/WidgetsModel.java +++ b/go/src/com/android/launcher3/model/WidgetsModel.java @@ -33,6 +33,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; /** * Widgets data model that is used by the adapters of the widget views and controllers. @@ -47,6 +48,19 @@ public class WidgetsModel { private static final ArrayList EMPTY_WIDGET_LIST = new ArrayList<>(); + /** + * Returns a list of {@link WidgetsListBaseEntry} filtered using given widget item filter. All + * {@link WidgetItem}s in a single row are sorted (based on label and user), but the overall + * list of {@link WidgetsListBaseEntry}s is not sorted. + * + * @see com.android.launcher3.widget.picker.WidgetsListAdapter#setWidgets(List) + */ + public synchronized ArrayList getFilteredWidgetsListForPicker( + Context context, + Predicate widgetItemFilter) { + return EMPTY_WIDGET_LIST; + } + /** * Returns a list of {@link WidgetsListBaseEntry}. All {@link WidgetItem} in a single row are * sorted (based on label and user), but the overall list of {@link WidgetsListBaseEntry}s is @@ -88,4 +102,4 @@ public class WidgetsModel { Context context, ComponentName provider, UserHandle userHandle) { return new PackageItemInfo(provider.getPackageName(), userHandle); } -} \ No newline at end of file +} diff --git a/quickstep/src/com/android/launcher3/WidgetPickerActivity.java b/quickstep/src/com/android/launcher3/WidgetPickerActivity.java index 575ad9ee6a..b9b4461f2e 100644 --- a/quickstep/src/com/android/launcher3/WidgetPickerActivity.java +++ b/quickstep/src/com/android/launcher3/WidgetPickerActivity.java @@ -158,7 +158,10 @@ public class WidgetPickerActivity extends BaseActivity { LauncherAppState app = LauncherAppState.getInstance(this); mModel.update(app, null); final ArrayList widgets = - mModel.getWidgetsListForPicker(app.getContext()); + mModel.getFilteredWidgetsListForPicker( + app.getContext(), + /*widgetItemFilter=*/ item -> item.widgetInfo != null + ); MAIN_EXECUTOR.execute(() -> mPopupDataProvider.setAllWidgets(widgets)); }); } diff --git a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java index 2f16065f37..4c5bfd8913 100644 --- a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java +++ b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java @@ -69,6 +69,34 @@ public class WidgetsModel { /* Map of widgets and shortcuts that are tracked per package. */ private final Map> mWidgetsList = new HashMap<>(); + /** + * Returns a list of {@link WidgetsListBaseEntry} filtered using given widget item filter. All + * {@link WidgetItem}s in a single row are sorted (based on label and user), but the overall + * list of {@link WidgetsListBaseEntry}s is not sorted. + * + * @see com.android.launcher3.widget.picker.WidgetsListAdapter#setWidgets(List) + */ + public synchronized ArrayList getFilteredWidgetsListForPicker( + Context context, + Predicate widgetItemFilter) { + ArrayList result = new ArrayList<>(); + AlphabeticIndexCompat indexer = new AlphabeticIndexCompat(context); + + for (Map.Entry> entry : mWidgetsList.entrySet()) { + PackageItemInfo pkgItem = entry.getKey(); + List widgetItems = entry.getValue() + .stream() + .filter(widgetItemFilter).toList(); + if (!widgetItems.isEmpty()) { + String sectionName = (pkgItem.title == null) ? "" : + indexer.computeSectionName(pkgItem.title); + result.add(WidgetsListHeaderEntry.create(pkgItem, sectionName, widgetItems)); + result.add(new WidgetsListContentEntry(pkgItem, sectionName, widgetItems)); + } + } + return result; + } + /** * Returns a list of {@link WidgetsListBaseEntry}. All {@link WidgetItem} in a single row * are sorted (based on label and user), but the overall list of @@ -77,18 +105,8 @@ public class WidgetsModel { * @see com.android.launcher3.widget.picker.WidgetsListAdapter#setWidgets(List) */ public synchronized ArrayList getWidgetsListForPicker(Context context) { - ArrayList result = new ArrayList<>(); - AlphabeticIndexCompat indexer = new AlphabeticIndexCompat(context); - - for (Map.Entry> entry : mWidgetsList.entrySet()) { - PackageItemInfo pkgItem = entry.getKey(); - List widgetItems = entry.getValue(); - String sectionName = (pkgItem.title == null) ? "" : - indexer.computeSectionName(pkgItem.title); - result.add(WidgetsListHeaderEntry.create(pkgItem, sectionName, widgetItems)); - result.add(new WidgetsListContentEntry(pkgItem, sectionName, widgetItems)); - } - return result; + // return all items + return getFilteredWidgetsListForPicker(context, /*widgetItemFilter=*/ item -> true); } /** Returns a mapping of packages to their widgets without static shortcuts. */