diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 8438622dca..2cc1439664 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -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 mWidgetProvidersMap; + protected final Map 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); diff --git a/src/com/android/launcher3/widget/WidgetManagerHelper.java b/src/com/android/launcher3/widget/WidgetManagerHelper.java index c0c5c48077..7248971bce 100644 --- a/src/com/android/launcher3/widget/WidgetManagerHelper.java +++ b/src/com/android/launcher3/widget/WidgetManagerHelper.java @@ -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 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 allWidgetsSteam(Context context) { AppWidgetManager awm = context.getSystemService(AppWidgetManager.class); return Stream.concat(