Shifting hotseat icons to aling with all-apps icon, if the hotseat
size is different from the source device

Bug: 19074056
Change-Id: I8d8517971a3cde0dc38f653d151daeba90fa38a0
diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java
index 8c6fedb..8ac09d3 100644
--- a/src/com/android/launcher3/LauncherBackupHelper.java
+++ b/src/com/android/launcher3/LauncherBackupHelper.java
@@ -153,6 +153,10 @@
     boolean restoreSuccessful;
     int restoredBackupVersion = 1;
 
+    // When migrating from a device which different hotseat configuration, the icons are shifted
+    // to center along the new all-apps icon.
+    private int mHotseatShift = 0;
+
     public LauncherBackupHelper(Context context) {
         mContext = context;
         mExistingKeys = new HashSet<String>();
@@ -285,10 +289,15 @@
         boolean isHotsetCompatible = false;
         if (currentProfile.allappsRank >= oldProfile.hotseatCount) {
             isHotsetCompatible = true;
+            mHotseatShift = 0;
         }
-        if ((currentProfile.hotseatCount >= oldProfile.hotseatCount) &&
-                (currentProfile.allappsRank == oldProfile.allappsRank)) {
+
+        if ((currentProfile.allappsRank >= oldProfile.allappsRank)
+                && ((currentProfile.hotseatCount - currentProfile.allappsRank) >=
+                        (oldProfile.hotseatCount - oldProfile.allappsRank))) {
+            // There is enough space on both sides of the hotseat.
             isHotsetCompatible = true;
+            mHotseatShift = currentProfile.allappsRank - oldProfile.allappsRank;
         }
 
         return isHotsetCompatible && (currentProfile.desktopCols >= oldProfile.desktopCols)
@@ -847,6 +856,11 @@
             throws IOException {
         Favorite favorite = unpackProto(new Favorite(), buffer, dataSize);
 
+        // If it is a hotseat item, move it accordingly.
+        if (favorite.container == Favorites.CONTAINER_HOTSEAT) {
+            favorite.screen += mHotseatShift;
+        }
+
         ContentValues values = new ContentValues();
         values.put(Favorites._ID, favorite.id);
         values.put(Favorites.SCREEN, favorite.screen);