Merge "Don't lose icons when migrating from different-sized hotseats." into ub-now-lunchbox

This commit is contained in:
Dan Sandler
2014-03-07 20:15:17 +00:00
committed by Android (Google) Code Review
2 changed files with 42 additions and 6 deletions

View File

@@ -50,6 +50,7 @@ import android.provider.Settings;
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;
@@ -1578,6 +1579,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);
@@ -1593,7 +1595,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) {
@@ -1654,11 +1660,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) {
@@ -1680,6 +1683,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);

View File

@@ -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>