summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherModel.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/LauncherModel.java')
-rw-r--r--src/com/android/launcher3/LauncherModel.java35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 2ac9b1b6c..cd37a167c 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -1556,6 +1556,11 @@ public class LauncherModel extends BroadcastReceiver {
}
}
+ private boolean checkItemDimensions(ItemInfo info) {
+ return (info.cellX + info.spanX) > mCellCountX ||
+ (info.cellY + info.spanY) > mCellCountY;
+ }
+
// check & update map of what's occupied; used to discard overlapping/invalid items
private boolean checkItemPlacement(HashMap<Long, ItemInfo[][]> occupied, ItemInfo item) {
long containerIndex = item.screenId;
@@ -1743,6 +1748,16 @@ public class LauncherModel extends BroadcastReceiver {
info.screenId = c.getInt(screenIndex);
info.cellX = c.getInt(cellXIndex);
info.cellY = c.getInt(cellYIndex);
+ info.spanX = 1;
+ info.spanY = 1;
+ // Skip loading items that are out of bounds
+ if (container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+ if (checkItemDimensions(info)) {
+ Log.d(TAG, "Skipped loading out of bounds shortcut: "
+ + info.intent);
+ continue;
+ }
+ }
// check & update map of what's occupied
if (!checkItemPlacement(occupied, info)) {
break;
@@ -1781,11 +1796,22 @@ public class LauncherModel extends BroadcastReceiver {
folderInfo.screenId = c.getInt(screenIndex);
folderInfo.cellX = c.getInt(cellXIndex);
folderInfo.cellY = c.getInt(cellYIndex);
-
+ folderInfo.spanX = 1;
+ folderInfo.spanY = 1;
+
+ // Skip loading items that are out of bounds
+ if (container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+ int iconSpan = 1;
+ if (checkItemDimensions(folderInfo)) {
+ Log.d(TAG, "Skipped loading out of bounds folder");
+ continue;
+ }
+ }
// check & update map of what's occupied
if (!checkItemPlacement(occupied, folderInfo)) {
break;
}
+
switch (container) {
case LauncherSettings.Favorites.CONTAINER_DESKTOP:
case LauncherSettings.Favorites.CONTAINER_HOTSEAT:
@@ -1834,6 +1860,13 @@ public class LauncherModel extends BroadcastReceiver {
}
appWidgetInfo.container = c.getInt(containerIndex);
+ // Skip loading items that are out of bounds
+ if (container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+ if (checkItemDimensions(appWidgetInfo)) {
+ Log.d(TAG, "Skipped loading out of bounds app widget");
+ continue;
+ }
+ }
// check & update map of what's occupied
if (!checkItemPlacement(occupied, appWidgetInfo)) {
break;