diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java index 5fc555172f..0d55301111 100644 --- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java +++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java @@ -62,7 +62,7 @@ public class AddWorkspaceItemsTask extends BaseModelUpdateTask { final IntArray addedWorkspaceScreensFinal = new IntArray(); synchronized(dataModel) { - IntArray workspaceScreens = dataModel.workspaceScreens.clone(); + IntArray workspaceScreens = dataModel.collectWorkspaceScreens(); List filteredItems = new ArrayList<>(); for (Pair entry : mItemList) { diff --git a/src/com/android/launcher3/model/BaseLoaderResults.java b/src/com/android/launcher3/model/BaseLoaderResults.java index f6e220f94f..23c6faf548 100644 --- a/src/com/android/launcher3/model/BaseLoaderResults.java +++ b/src/com/android/launcher3/model/BaseLoaderResults.java @@ -92,7 +92,7 @@ public abstract class BaseLoaderResults { synchronized (mBgDataModel) { workspaceItems.addAll(mBgDataModel.workspaceItems); appWidgets.addAll(mBgDataModel.appWidgets); - orderedScreenIds.addAll(mBgDataModel.workspaceScreens); + orderedScreenIds.addAll(mBgDataModel.collectWorkspaceScreens()); mBgDataModel.lastBindId++; } diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java index 151d6f4b6f..b338fff55d 100644 --- a/src/com/android/launcher3/model/BgDataModel.java +++ b/src/com/android/launcher3/model/BgDataModel.java @@ -27,6 +27,7 @@ import com.android.launcher3.ItemInfo; import com.android.launcher3.LauncherAppWidgetInfo; import com.android.launcher3.LauncherSettings; import com.android.launcher3.ShortcutInfo; +import com.android.launcher3.Workspace; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.logging.DumpTargetWrapper; import com.android.launcher3.model.nano.LauncherDumpProto; @@ -37,6 +38,7 @@ import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.shortcuts.ShortcutKey; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.IntArray; +import com.android.launcher3.util.IntSet; import com.android.launcher3.util.IntSparseArrayMap; import com.google.protobuf.nano.MessageNano; @@ -80,11 +82,6 @@ public class BgDataModel { */ public final IntSparseArrayMap folders = new IntSparseArrayMap<>(); - /** - * Ordered list of workspace screens ids. - */ - public final IntArray workspaceScreens = new IntArray(); - /** * Map of ShortcutKey to the number of times it is pinned. */ @@ -118,11 +115,26 @@ public class BgDataModel { appWidgets.clear(); folders.clear(); itemsIdMap.clear(); - workspaceScreens.clear(); pinnedShortcutCounts.clear(); deepShortcutMap.clear(); } + /** + * Creates an array of valid workspace screens based on current items in the model. + */ + public synchronized IntArray collectWorkspaceScreens() { + IntSet screenSet = new IntSet(); + for (ItemInfo item: itemsIdMap) { + if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { + screenSet.add(item.screenId); + } + } + if (FeatureFlags.QSB_ON_FIRST_SCREEN.get() || screenSet.isEmpty()) { + screenSet.add(Workspace.FIRST_SCREEN_ID); + } + return screenSet.getArray(); + } + public synchronized void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { if (Arrays.asList(args).contains("--proto")) { @@ -130,11 +142,6 @@ public class BgDataModel { return; } writer.println(prefix + "Data Model:"); - writer.print(prefix + " ---- workspace screens: "); - for (int i = 0; i < workspaceScreens.size(); i++) { - writer.print(" " + workspaceScreens.get(i)); - } - writer.println(); writer.println(prefix + " ---- workspace items "); for (int i = 0; i < workspaceItems.size(); i++) { writer.println(prefix + '\t' + workspaceItems.get(i).toString()); @@ -167,6 +174,7 @@ public class BgDataModel { // Add top parent nodes. (L1) DumpTargetWrapper hotseat = new DumpTargetWrapper(ContainerType.HOTSEAT, 0); IntSparseArrayMap workspaces = new IntSparseArrayMap<>(); + IntArray workspaceScreens = collectWorkspaceScreens(); for (int i = 0; i < workspaceScreens.size(); i++) { workspaces.put(workspaceScreens.get(i), new DumpTargetWrapper(ContainerType.WORKSPACE, i)); diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 8a6aa1af29..cfabc10994 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -31,7 +31,6 @@ import android.content.IntentFilter; import android.content.pm.LauncherActivityInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionInfo; -import android.graphics.Bitmap; import android.os.Handler; import android.os.Process; import android.os.UserHandle; @@ -43,19 +42,17 @@ import android.util.MutableInt; import com.android.launcher3.AllAppsList; import com.android.launcher3.AppInfo; import com.android.launcher3.FolderInfo; -import com.android.launcher3.ItemInfoWithIcon; -import com.android.launcher3.icons.ComponentWithLabel; -import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic; -import com.android.launcher3.icons.cache.IconCacheUpdateHandler; -import com.android.launcher3.icons.IconCache; import com.android.launcher3.InstallShortcutReceiver; import com.android.launcher3.ItemInfo; +import com.android.launcher3.ItemInfoWithIcon; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetInfo; import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherSettings; +import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.ShortcutInfo; import com.android.launcher3.Utilities; +import com.android.launcher3.Workspace; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.PackageInstallerCompat; @@ -63,16 +60,18 @@ import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIconPreviewVerifier; +import com.android.launcher3.icons.ComponentWithLabel; +import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic; +import com.android.launcher3.icons.IconCache; import com.android.launcher3.icons.LauncherActivtiyCachingLogic; import com.android.launcher3.icons.LauncherIcons; +import com.android.launcher3.icons.cache.IconCacheUpdateHandler; import com.android.launcher3.logging.FileLog; import com.android.launcher3.provider.ImportDataTask; import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.shortcuts.ShortcutKey; import com.android.launcher3.util.ComponentKey; -import com.android.launcher3.util.IntArray; -import com.android.launcher3.util.IntSet; import com.android.launcher3.util.LooperIdleLock; import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.PackageManagerHelper; @@ -158,9 +157,9 @@ public class LoaderTask implements Runnable { allItems.addAll(mBgDataModel.workspaceItems); allItems.addAll(mBgDataModel.appWidgets); } - int firstScreen = mBgDataModel.workspaceScreens.isEmpty() - ? -1 // In this case, we can still look at the items in the hotseat. - : mBgDataModel.workspaceScreens.get(0); + // Screen set is never empty + final int firstScreen = mBgDataModel.collectWorkspaceScreens().get(0); + filterCurrentWorkspaceItems(firstScreen, allItems, firstScreenItems, new ArrayList<>() /* otherScreenItems are ignored */); mFirstScreenBroadcast.sendBroadcasts(mApp.getContext(), firstScreenItems); @@ -784,16 +783,6 @@ public class LoaderTask implements Runnable { null, new Handler(LauncherModel.getWorkerLooper())); } - - // Initialize the screens array. Using an InstSet ensures that the screen ids - // are sorted. - IntSet screenSet = new IntSet(); - for (ItemInfo item: mBgDataModel.itemsIdMap) { - if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { - screenSet.add(item.screenId); - } - } - mBgDataModel.workspaceScreens.addAll(screenSet.getArray()); } }