Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8291c08c authored by Adam Cohen's avatar Adam Cohen
Browse files

Adding ability to filter for certain types of widgets in picker activity

Change-Id: I92d8748b62ef017b6cd36ff377958c09c9f097c9
parent 6be075d6
Loading
Loading
Loading
Loading
+39 −11
Original line number Diff line number Diff line
@@ -129,7 +129,12 @@ public class AppWidgetPickActivity extends ActivityPicker {
        }

        if (LOGD) Log.d(TAG, "Using " + customInfo.size() + " custom items");
        putAppWidgetItems(customInfo, customExtras, items);
        // We don't filter out any widgets.
        int categoryFilter = AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN |
                AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD;
        // We don't require any features.
        int featuresFilter = AppWidgetProviderInfo.WIDGET_FEATURES_NONE;
        putAppWidgetItems(customInfo, customExtras, items, categoryFilter, featuresFilter);
    }
    
    /**
@@ -166,7 +171,8 @@ public class AppWidgetPickActivity extends ActivityPicker {
     * inserting extras if provided.
     */
    void putAppWidgetItems(List<AppWidgetProviderInfo> appWidgets,
            List<Bundle> customExtras, List<PickAdapter.Item> items) {
            List<Bundle> customExtras, List<PickAdapter.Item> items, int categoryFilter,
            int featuresFilter) {
        if (appWidgets == null) return;
        final int size = appWidgets.size();
        for (int i = 0; i < size; i++) {
@@ -192,6 +198,16 @@ public class AppWidgetPickActivity extends ActivityPicker {
                item.extras = customExtras.get(i);
            }

            // We remove any widgets whose category isn't included in the filter
            if ((info.widgetCategory & categoryFilter) == 0) {
                continue;
            }

            // We remove any widgets who don't have all the features in the features filter
            if ((info.widgetFeatures & featuresFilter) != featuresFilter) {
                continue;
            }

            items.add(item);
        }
    }
@@ -205,7 +221,19 @@ public class AppWidgetPickActivity extends ActivityPicker {
    protected List<PickAdapter.Item> getItems() {
        List<PickAdapter.Item> items = new ArrayList<PickAdapter.Item>();

        putInstalledAppWidgets(items);
        final Intent intent = getIntent();
        int categoryFilter = AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN;
        if (intent.getExtras().containsKey(AppWidgetManager.EXTRA_CATEGORY_FILTER)) {
            categoryFilter = intent.getExtras().getInt(AppWidgetManager.EXTRA_CATEGORY_FILTER);
        }

        // If not specified, we don't filter on any specific
        int featuresFilter = AppWidgetProviderInfo.WIDGET_FEATURES_NONE;
        if (intent.getExtras().containsKey(AppWidgetManager.EXTRA_FEATURES_FILTER)) {
            featuresFilter = intent.getExtras().getInt(AppWidgetManager.EXTRA_CATEGORY_FILTER);
        }

        putInstalledAppWidgets(items, categoryFilter, featuresFilter);
        putCustomAppWidgets(items);
        
        // Sort all items together by label
@@ -222,9 +250,9 @@ public class AppWidgetPickActivity extends ActivityPicker {
    /**
     * Create list entries for installed {@link AppWidgetProviderInfo} widgets.
     */
    void putInstalledAppWidgets(List<PickAdapter.Item> items) {
    void putInstalledAppWidgets(List<PickAdapter.Item> items, int categoryFilter, int featuresFilter) {
        List<AppWidgetProviderInfo> installed = mAppWidgetManager.getInstalledProviders();
        putAppWidgetItems(installed, null, items);
        putAppWidgetItems(installed, null, items, categoryFilter, featuresFilter);
    }

    /**