diff --git a/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java b/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java index b0fba3d5ae..9c3daea7e1 100644 --- a/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java +++ b/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java @@ -34,7 +34,6 @@ import com.android.launcher3.model.QuickstepModelDelegate.PredictorState; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -60,13 +59,13 @@ public class PredictionUpdateTask extends BaseModelUpdateTask { Utilities.getDevicePrefs(context).edit() .putBoolean(LAST_PREDICTION_ENABLED_STATE, !mTargets.isEmpty()).apply(); - FixedContainerItems fci = mPredictorState.items; - Set usersForChangedShortcuts = new HashSet<>(fci.items.stream() - .filter(info -> info.itemType == ITEM_TYPE_DEEP_SHORTCUT) - .map(info -> info.user) - .collect(Collectors.toSet())); - fci.items.clear(); + Set usersForChangedShortcuts = + dataModel.extraItems.get(mPredictorState.containerId).items.stream() + .filter(info -> info.itemType == ITEM_TYPE_DEEP_SHORTCUT) + .map(info -> info.user) + .collect(Collectors.toSet()); + FixedContainerItems fci = new FixedContainerItems(mPredictorState.containerId); for (AppTarget target : mTargets) { WorkspaceItemInfo itemInfo; ShortcutInfo si = target.getShortcutInfo(); @@ -109,6 +108,7 @@ public class PredictionUpdateTask extends BaseModelUpdateTask { fci.items.add(itemInfo); } + dataModel.extraItems.put(fci.containerId, fci); bindExtraContainerItems(fci); usersForChangedShortcuts.forEach( u -> dataModel.updateShortcutPinnedState(app.getContext(), u)); diff --git a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java index da183574ff..0e534f4ea9 100644 --- a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java +++ b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java @@ -119,18 +119,19 @@ public class QuickstepModelDelegate extends ModelDelegate { WorkspaceItemFactory allAppsFactory = new WorkspaceItemFactory( mApp, ums, pinnedShortcuts, mIDP.numDatabaseAllAppsColumns); - mAllAppsState.items.setItems( + FixedContainerItems allAppsItems = new FixedContainerItems(mAllAppsState.containerId, mAllAppsState.storage.read(mApp.getContext(), allAppsFactory, ums.allUsers::get)); - mDataModel.extraItems.put(CONTAINER_PREDICTION, mAllAppsState.items); + mDataModel.extraItems.put(mAllAppsState.containerId, allAppsItems); WorkspaceItemFactory hotseatFactory = new WorkspaceItemFactory(mApp, ums, pinnedShortcuts, mIDP.numDatabaseHotseatIcons); - mHotseatState.items.setItems( + FixedContainerItems hotseatItems = new FixedContainerItems(mHotseatState.containerId, mHotseatState.storage.read(mApp.getContext(), hotseatFactory, ums.allUsers::get)); - mDataModel.extraItems.put(CONTAINER_HOTSEAT_PREDICTION, mHotseatState.items); + mDataModel.extraItems.put(mHotseatState.containerId, hotseatItems); // Widgets prediction isn't used frequently. And thus, it is not persisted on disk. - mDataModel.extraItems.put(CONTAINER_WIDGETS_PREDICTION, mWidgetsRecommendationState.items); + mDataModel.extraItems.put(mWidgetsRecommendationState.containerId, + new FixedContainerItems(mWidgetsRecommendationState.containerId)); mActive = true; } @@ -371,14 +372,14 @@ public class QuickstepModelDelegate extends ModelDelegate { static class PredictorState { - public final FixedContainerItems items; + public final int containerId; public final PersistedItemArray storage; public AppPredictor predictor; private List mLastTargets; - PredictorState(int container, String storageName) { - items = new FixedContainerItems(container); + PredictorState(int containerId, String storageName) { + this.containerId = containerId; storage = new PersistedItemArray<>(storageName); mLastTargets = Collections.emptyList(); } diff --git a/quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java b/quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java index 4be83dc0b0..9cd9d8597c 100644 --- a/quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java +++ b/quickstep/src/com/android/launcher3/model/WidgetsPredictionUpdateTask.java @@ -59,8 +59,8 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask { Map> allWidgets = dataModel.widgetsModel.getAllWidgetsWithoutShortcuts(); - FixedContainerItems fixedContainerItems = mPredictorState.items; - fixedContainerItems.items.clear(); + FixedContainerItems fixedContainerItems = + new FixedContainerItems(mPredictorState.containerId); if (FeatureFlags.ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER.get()) { for (AppTarget app : mTargets) { @@ -100,6 +100,7 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask { } } } + dataModel.extraItems.put(mPredictorState.containerId, fixedContainerItems); bindExtraContainerItems(fixedContainerItems); // Don't store widgets prediction to disk because it is not used frequently. diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java index abf002f792..f4d64df7d9 100644 --- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java @@ -456,10 +456,10 @@ public class LauncherPreviewRenderer extends ContextWrapper } IntArray ranks = getMissingHotseatRanks(currentWorkspaceItems, mDp.numShownHotseatIcons); - FixedContainerItems hotseatpredictions = + FixedContainerItems hotseatPredictions = dataModel.extraItems.get(CONTAINER_HOTSEAT_PREDICTION); - List predictions = hotseatpredictions == null - ? Collections.emptyList() : hotseatpredictions.items; + List predictions = hotseatPredictions == null + ? Collections.emptyList() : hotseatPredictions.items; int count = Math.min(ranks.size(), predictions.size()); for (int i = 0; i < count; i++) { int rank = ranks.get(i);