diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2015-09-04 12:53:04 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2015-09-04 15:26:17 -0700 |
commit | 41cdc8d20a9ffc35eb5cde29a187a09d62cca8a1 (patch) | |
tree | 6bb7edcecab831e0388018f92aaccb65503ae3a1 /src/com/android/launcher3/LauncherModel.java | |
parent | 7412c3cb005c3b3315ddb276386e2115f742d2e0 (diff) | |
download | android_packages_apps_Trebuchet-41cdc8d20a9ffc35eb5cde29a187a09d62cca8a1.tar.gz android_packages_apps_Trebuchet-41cdc8d20a9ffc35eb5cde29a187a09d62cca8a1.tar.bz2 android_packages_apps_Trebuchet-41cdc8d20a9ffc35eb5cde29a187a09d62cca8a1.zip |
Removing items which are on invalid screen
Bug: 23804751
Change-Id: If26a6b201aa6127cfd2a08fc4b408a27d6329bad
Diffstat (limited to 'src/com/android/launcher3/LauncherModel.java')
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index e5ca77867..b5922c6a3 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1611,11 +1611,12 @@ public class LauncherModel extends BroadcastReceiver } // check & update map of what's occupied; used to discard overlapping/invalid items - private boolean checkItemPlacement(LongArrayMap<ItemInfo[][]> occupied, ItemInfo item) { + private boolean checkItemPlacement(LongArrayMap<ItemInfo[][]> occupied, ItemInfo item, + ArrayList<Long> workspaceScreens) { LauncherAppState app = LauncherAppState.getInstance(); InvariantDeviceProfile profile = app.getInvariantDeviceProfile(); - final int countX = (int) profile.numColumns; - final int countY = (int) profile.numRows; + final int countX = profile.numColumns; + final int countY = profile.numRows; long containerIndex = item.screenId; if (item.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) { @@ -1657,7 +1658,12 @@ public class LauncherModel extends BroadcastReceiver occupied.put((long) LauncherSettings.Favorites.CONTAINER_HOTSEAT, items); return true; } - } else if (item.container != LauncherSettings.Favorites.CONTAINER_DESKTOP) { + } else if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { + if (!workspaceScreens.contains((Long) item.screenId)) { + // The item has an invalid screen id. + return false; + } + } else { // Skip further checking if it is not the hotseat or workspace container return true; } @@ -1724,8 +1730,8 @@ public class LauncherModel extends BroadcastReceiver LauncherAppState app = LauncherAppState.getInstance(); InvariantDeviceProfile profile = app.getInvariantDeviceProfile(); - int countX = (int) profile.numColumns; - int countY = (int) profile.numRows; + int countX = profile.numColumns; + int countY = profile.numRows; if (MigrateFromRestoreTask.ENABLED && MigrateFromRestoreTask.shouldRunTask(mContext)) { long migrationStartTime = System.currentTimeMillis(); @@ -1765,6 +1771,7 @@ public class LauncherModel extends BroadcastReceiver clearSBgDataStructures(); final HashMap<String, Integer> installingPkgs = PackageInstallerCompat .getInstance(mContext).updateAndGetActiveSessionCache(); + sBgWorkspaceScreens.addAll(loadWorkspaceScreensDb(mContext)); final ArrayList<Long> itemsToRemove = new ArrayList<Long>(); final ArrayList<Long> restoredRows = new ArrayList<Long>(); @@ -1966,6 +1973,7 @@ public class LauncherModel extends BroadcastReceiver } catch (URISyntaxException e) { Launcher.addDumpLog(TAG, "Invalid uri: " + intentDescription, true); + itemsToRemove.add(id); continue; } @@ -2036,7 +2044,7 @@ public class LauncherModel extends BroadcastReceiver } // check & update map of what's occupied - if (!checkItemPlacement(occupied, info)) { + if (!checkItemPlacement(occupied, info, sBgWorkspaceScreens)) { itemsToRemove.add(id); break; } @@ -2087,7 +2095,7 @@ public class LauncherModel extends BroadcastReceiver folderInfo.options = c.getInt(optionsIndex); // check & update map of what's occupied - if (!checkItemPlacement(occupied, folderInfo)) { + if (!checkItemPlacement(occupied, folderInfo, sBgWorkspaceScreens)) { itemsToRemove.add(id); break; } @@ -2207,13 +2215,14 @@ public class LauncherModel extends BroadcastReceiver if (container != LauncherSettings.Favorites.CONTAINER_DESKTOP && container != LauncherSettings.Favorites.CONTAINER_HOTSEAT) { Log.e(TAG, "Widget found where container != " + - "CONTAINER_DESKTOP nor CONTAINER_HOTSEAT - ignoring!"); + "CONTAINER_DESKTOP nor CONTAINER_HOTSEAT - ignoring!"); + itemsToRemove.add(id); continue; } appWidgetInfo.container = container; // check & update map of what's occupied - if (!checkItemPlacement(occupied, appWidgetInfo)) { + if (!checkItemPlacement(occupied, appWidgetInfo, sBgWorkspaceScreens)) { itemsToRemove.add(id); break; } @@ -2302,8 +2311,6 @@ public class LauncherModel extends BroadcastReceiver null, sWorker); } - sBgWorkspaceScreens.addAll(loadWorkspaceScreensDb(mContext)); - // Remove any empty screens ArrayList<Long> unusedScreens = new ArrayList<Long>(sBgWorkspaceScreens); for (ItemInfo item: sBgItemsIdMap) { |