From ef9596d4c19fed7d635c40d26bb0cb37e1003a46 Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Mon, 3 Aug 2020 12:07:50 -0700 Subject: [PATCH] Only load the first page in grid preview Bug: 160662425 Test: manual (verified correctness) Change-Id: I9dc3b7d7b84924ffb588470d4b6b20431a62b6cd --- .../graphics/LauncherPreviewRenderer.java | 5 +- .../android/launcher3/model/LoaderTask.java | 59 ++++++++++--------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java index 0f1432a9b6..cd84c96171 100644 --- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java @@ -599,7 +599,10 @@ public class LauncherPreviewRenderer extends ContextThemeWrapper @Override public WorkspaceResult call() { List allShortcuts = new ArrayList<>(); - loadWorkspace(allShortcuts, LauncherSettings.Favorites.PREVIEW_CONTENT_URI); + loadWorkspace(allShortcuts, LauncherSettings.Favorites.PREVIEW_CONTENT_URI, + LauncherSettings.Favorites.SCREEN + " = 0 or " + + LauncherSettings.Favorites.CONTAINER + " = " + + LauncherSettings.Favorites.CONTAINER_HOTSEAT); return new WorkspaceResult(mBgDataModel, null, mWidgetProvidersMap); } } diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index a9e385fcc2..2b4520b613 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -127,6 +127,7 @@ public class LoaderTask implements Runnable { private boolean mStopped; + private final Set mPendingPackages = new HashSet<>(); private boolean mItemsDeleted = false; public LoaderTask(LauncherAppState app, AllAppsList bgAllAppsList, BgDataModel dataModel, @@ -294,16 +295,17 @@ public class LoaderTask implements Runnable { } private void loadWorkspace(List allDeepShortcuts) { - loadWorkspace(allDeepShortcuts, LauncherSettings.Favorites.CONTENT_URI); + loadWorkspace(allDeepShortcuts, LauncherSettings.Favorites.CONTENT_URI, + null /* selection */); } - protected void loadWorkspace(List allDeepShortcuts, Uri contentUri) { + protected void loadWorkspace(List allDeepShortcuts, Uri contentUri, + String selection) { final Context context = mApp.getContext(); final ContentResolver contentResolver = context.getContentResolver(); final PackageManagerHelper pmHelper = new PackageManagerHelper(context); final boolean isSafeMode = pmHelper.isSafeMode(); final boolean isSdCardReady = Utilities.isBootCompleted(); - final Set pendingPackages = new HashSet<>(); boolean clearDb = false; try { @@ -332,6 +334,7 @@ public class LoaderTask implements Runnable { synchronized (mBgDataModel) { mBgDataModel.clear(); + mPendingPackages.clear(); final HashMap installingPkgs = mSessionHelper.getActiveSessions(); @@ -342,8 +345,8 @@ public class LoaderTask implements Runnable { Map shortcutKeyToPinnedShortcuts = new HashMap<>(); final LoaderCursor c = new LoaderCursor( - contentResolver.query(contentUri, null, null, null, null), contentUri, mApp, - mUserManagerState); + contentResolver.query(contentUri, null, selection, null, null), contentUri, + mApp, mUserManagerState); try { final int appWidgetIdIndex = c.getColumnIndexOrThrow( @@ -484,7 +487,7 @@ public class LoaderTask implements Runnable { // SdCard is not ready yet. Package might get available, // once it is ready. Log.d(TAG, "Missing pkg, will check later: " + targetPkg); - pendingPackages.add(new PackageUserKey(targetPkg, c.user)); + mPendingPackages.add(new PackageUserKey(targetPkg, c.user)); // Add the icon on the workspace anyway. allowMissingTarget = true; } else { @@ -768,20 +771,7 @@ public class LoaderTask implements Runnable { } // Remove dead items - if (c.commitDeleted()) { - // Remove any empty folder - int[] deletedFolderIds = LauncherSettings.Settings - .call(contentResolver, - LauncherSettings.Settings.METHOD_DELETE_EMPTY_FOLDERS) - .getIntArray(LauncherSettings.Settings.EXTRA_VALUE); - for (int folderId : deletedFolderIds) { - mBgDataModel.workspaceItems.remove(mBgDataModel.folders.get(folderId)); - mBgDataModel.folders.remove(folderId); - mBgDataModel.itemsIdMap.remove(folderId); - } - - mItemsDeleted = true; - } + mItemsDeleted = c.commitDeleted(); // Sort the folder items, update ranks, and make sure all preview items are high res. FolderGridOrganizer verifier = @@ -807,13 +797,6 @@ public class LoaderTask implements Runnable { } c.commitRestoredItems(); - if (!isSdCardReady && !pendingPackages.isEmpty()) { - context.registerReceiver( - new SdCardAvailableReceiver(mApp, pendingPackages), - new IntentFilter(Intent.ACTION_BOOT_COMPLETED), - null, - MODEL_EXECUTOR.getHandler()); - } } } @@ -840,14 +823,34 @@ public class LoaderTask implements Runnable { private void sanitizeData() { Context context = mApp.getContext(); + ContentResolver contentResolver = context.getContentResolver(); if (mItemsDeleted) { + // Remove any empty folder + int[] deletedFolderIds = LauncherSettings.Settings + .call(contentResolver, + LauncherSettings.Settings.METHOD_DELETE_EMPTY_FOLDERS) + .getIntArray(LauncherSettings.Settings.EXTRA_VALUE); + for (int folderId : deletedFolderIds) { + mBgDataModel.workspaceItems.remove(mBgDataModel.folders.get(folderId)); + mBgDataModel.folders.remove(folderId); + mBgDataModel.itemsIdMap.remove(folderId); + } + // Remove any ghost widgets - LauncherSettings.Settings.call(context.getContentResolver(), + LauncherSettings.Settings.call(contentResolver, LauncherSettings.Settings.METHOD_REMOVE_GHOST_WIDGETS); } // Update pinned state of model shortcuts mBgDataModel.updateShortcutPinnedState(context); + + if (!Utilities.isBootCompleted() && !mPendingPackages.isEmpty()) { + context.registerReceiver( + new SdCardAvailableReceiver(mApp, mPendingPackages), + new IntentFilter(Intent.ACTION_BOOT_COMPLETED), + null, + MODEL_EXECUTOR.getHandler()); + } } private List loadAllApps() {