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

Commit b41d4b4e authored by Sebastian Franco's avatar Sebastian Franco
Browse files

Make getWidgetProviderInfoByProviderName return the correct WidgetItem

for Pixel own widgets.

The pixel own widgets can have categories and getWidgetProviderInfoByProviderName
might not find the right widget if the widget has a category.

Flag: NA
Test: Manaul testing =(
Test: Make sure the placement in the widget picker is correct.
Test: All widgets in widget_section.xml with alsoKeepInApp set to false will previously dissapear on the preview.
Fix: 331628371
Change-Id: I1e4c8ae3dd21f8aef3e4aac99ce6ce6701e94760
parent c0a1fbe8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -419,7 +419,7 @@ public class LauncherPreviewRenderer extends ContextWrapper

    private void inflateAndAddWidgets(LauncherAppWidgetInfo info, WidgetsModel widgetsModel) {
        WidgetItem widgetItem = widgetsModel.getWidgetProviderInfoByProviderName(
                info.providerName, info.user);
                info.providerName, info.user, mContext);
        if (widgetItem == null) {
            return;
        }
+37 −12
Original line number Diff line number Diff line
@@ -239,20 +239,45 @@ public class WidgetsModel {
        }
    }

    private PackageItemInfo createPackageItemInfo(
            ComponentName providerName,
            UserHandle user,
            int category
    ) {
        if (category == NO_CATEGORY) {
            return new PackageItemInfo(providerName.getPackageName(), user);
        } else {
            return new PackageItemInfo("" , category, user);
        }
    }

    private IntSet getCategories(ComponentName providerName, Context context) {
        IntSet categories = WidgetSections.getWidgetsToCategory(context).get(providerName);
        if (categories != null) {
            return categories;
        }
        categories = new IntSet();
        categories.add(NO_CATEGORY);
        return categories;
    }

    public WidgetItem getWidgetProviderInfoByProviderName(
            ComponentName providerName, UserHandle user) {
            ComponentName providerName, UserHandle user, Context context) {
        if (!WIDGETS_ENABLED) {
            return null;
        }
        List<WidgetItem> widgetsList = mWidgetsList.get(
                new PackageItemInfo(providerName.getPackageName(), user));
        if (widgetsList == null) {
            return null;
        }

        for (WidgetItem item : widgetsList) {
            if (item.componentName.equals(providerName)) {
                return item;
        IntSet categories = getCategories(providerName, context);

        // Checking if we have a provider in any of the categories.
        for (Integer category: categories) {
            PackageItemInfo key = createPackageItemInfo(providerName, user, category);
            List<WidgetItem> widgets = mWidgetsList.get(key);
            if (widgets != null) {
                return widgets.stream().filter(
                                item -> item.componentName.equals(providerName)
                        )
                        .findFirst()
                        .orElse(null);
            }
        }
        return null;