Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eac828e0 authored by Dan Sandler's avatar Dan Sandler Committed by Android (Google) Code Review
Browse files

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

parents ac8180ac ab5fa3a0
Loading
Loading
Loading
Loading
+34 −6
Original line number Diff line number Diff line
@@ -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);
+8 −0
Original line number Diff line number Diff line
@@ -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>