summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/launcher3/LauncherProvider.java40
-rw-r--r--src/com/android/launcher3/LauncherSettings.java8
2 files changed, 42 insertions, 6 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 8a5e420d2..3d085136b 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -51,6 +51,7 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.SparseArray;
import android.util.Xml;
import com.android.launcher3.LauncherSettings.Favorites;
@@ -1660,6 +1661,7 @@ public class LauncherProvider extends ContentProvider {
final ArrayList<ContentValues> shortcuts = new ArrayList<ContentValues>();
final ArrayList<ContentValues> folders = new ArrayList<ContentValues>();
+ final SparseArray<ContentValues> hotseat = new SparseArray<ContentValues>();
while (c.moveToNext()) {
final int itemType = c.getInt(itemTypeIndex);
@@ -1675,7 +1677,11 @@ public class LauncherProvider extends ContentProvider {
int container = c.getInt(containerIndex);
final String intentStr = c.getString(intentIndex);
Launcher.addDumpLog(TAG, "migrating \""
- + c.getString(titleIndex) + "\": " + intentStr, true);
+ + c.getString(titleIndex) + "\" ("
+ + cellX + "," + cellY + "@"
+ + LauncherSettings.Favorites.containerToString(container)
+ + "/" + screen
+ + "): " + intentStr, true);
if (itemType != Favorites.ITEM_TYPE_FOLDER) {
@@ -1736,11 +1742,8 @@ public class LauncherProvider extends ContentProvider {
values.put(LauncherSettings.Favorites.DISPLAY_MODE,
c.getInt(displayModeIndex));
- if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT
- && (screen >= hotseatWidth ||
- screen == grid.hotseatAllAppsRank)) {
- // no room for you in the hotseat? it's off to the desktop with you
- container = Favorites.CONTAINER_DESKTOP;
+ if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
+ hotseat.put(screen, values);
}
if (container != LauncherSettings.Favorites.CONTAINER_DESKTOP) {
@@ -1762,6 +1765,31 @@ public class LauncherProvider extends ContentProvider {
}
}
+ // Now that we have all the hotseat icons, let's go through them left-right
+ // and assign valid locations for them in the new hotseat
+ final int N = hotseat.size();
+ for (int idx=0; idx<N; idx++) {
+ int hotseatX = hotseat.keyAt(idx);
+ ContentValues values = hotseat.valueAt(idx);
+
+ if (hotseatX == grid.hotseatAllAppsRank) {
+ // let's drop this in the next available hole in the hotseat
+ while (++hotseatX < hotseatWidth) {
+ if (hotseat.get(hotseatX) == null) {
+ // found a spot! move it here
+ values.put(LauncherSettings.Favorites.SCREEN,
+ hotseatX);
+ break;
+ }
+ }
+ }
+ if (hotseatX >= hotseatWidth) {
+ // no room for you in the hotseat? it's off to the desktop with you
+ values.put(LauncherSettings.Favorites.CONTAINER,
+ Favorites.CONTAINER_DESKTOP);
+ }
+ }
+
final ArrayList<ContentValues> allItems = new ArrayList<ContentValues>();
// Folders first
allItems.addAll(folders);
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 1d161d097..9a5fd8a60 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -171,6 +171,14 @@ class LauncherSettings {
static final int CONTAINER_DESKTOP = -100;
static final int CONTAINER_HOTSEAT = -101;
+ static final String containerToString(int container) {
+ switch (container) {
+ case CONTAINER_DESKTOP: return "desktop";
+ case CONTAINER_HOTSEAT: return "hotseat";
+ default: return String.valueOf(container);
+ }
+ }
+
/**
* The screen holding the favorite (if container is CONTAINER_DESKTOP)
* <P>Type: INTEGER</P>