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

Commit ca6a539f authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Only fetching relevant widget info during first pass

This avoids loading resources for allwidget providers when they
are not added to homescreen.

Test: Verified on device
Bug: 180867488
Change-Id: If9adde8eb035ecac75dc4e3e37cd3f0f526865e5
parent d6844dcb
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.util.LongSparseArray;
import android.util.TimingLogger;
@@ -126,7 +127,7 @@ public class LoaderTask implements Runnable {

    private final UserManagerState mUserManagerState = new UserManagerState();

    protected Map<ComponentKey, AppWidgetProviderInfo> mWidgetProvidersMap;
    protected final Map<ComponentKey, AppWidgetProviderInfo> mWidgetProvidersMap = new ArrayMap<>();

    private boolean mStopped;

@@ -664,12 +665,13 @@ public class LoaderTask implements Runnable {
                            final boolean wasProviderReady = !c.hasRestoreFlag(
                                    LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY);

                            if (mWidgetProvidersMap == null) {
                                mWidgetProvidersMap = WidgetManagerHelper.getAllProvidersMap(
                                        context);
                            ComponentKey providerKey = new ComponentKey(component, c.user);
                            if (!mWidgetProvidersMap.containsKey(providerKey)) {
                                mWidgetProvidersMap.put(providerKey,
                                        widgetHelper.findProvider(component, c.user));
                            }
                            final AppWidgetProviderInfo provider = mWidgetProvidersMap.get(
                                    new ComponentKey(component, c.user));
                            final AppWidgetProviderInfo provider =
                                    mWidgetProvidersMap.get(providerKey);

                            final boolean isProviderReady = isValidProvider(provider);
                            if (!isSafeMode && !customWidget &&
@@ -873,7 +875,6 @@ public class LoaderTask implements Runnable {
                    mBgDataModel.itemsIdMap.remove(folderId);
                }
            }

            // Remove any ghost widgets
            LauncherSettings.Settings.call(contentResolver,
                    LauncherSettings.Settings.METHOD_REMOVE_GHOST_WIDGETS);
+0 −12
Original line number Diff line number Diff line
@@ -31,14 +31,11 @@ import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.widget.custom.CustomWidgetManager;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@@ -122,15 +119,6 @@ public class WidgetManagerHelper {
                appWidgetId).getBoolean(WIDGET_OPTION_RESTORE_COMPLETED);
    }

    public static Map<ComponentKey, AppWidgetProviderInfo> getAllProvidersMap(Context context) {
        if (WidgetsModel.GO_DISABLE_WIDGETS) {
            return Collections.emptyMap();
        }
        return allWidgetsSteam(context).collect(
                        Collectors.toMap(info -> new ComponentKey(info.provider, info.getProfile()),
                        Function.identity()));
    }

    private static Stream<AppWidgetProviderInfo> allWidgetsSteam(Context context) {
        AppWidgetManager awm = context.getSystemService(AppWidgetManager.class);
        return Stream.concat(