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. */