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

Commit 4a202c5a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Only fetching relevant widget info during first pass" into sc-dev

parents dee11674 ca6a539f
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(