From 76773cd210ce52edfaa5c37b72fef188279ad265 Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Mon, 22 Jun 2020 15:30:22 -0700 Subject: [PATCH] Support having dup items in folder for migration Fixes: 159312066 Test: Have two dup items in a folder under one grid setting. Migrate. Make sure the folder is migrated correctly to the new grid setting. Change-Id: Ic5aeb30a1c8acb382bccf744d7553913d8a8a320 --- .../model/GridSizeMigrationTaskV2.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java b/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java index 25a2c695f1..ebdfa8c820 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java @@ -248,10 +248,10 @@ public class GridSizeMigrationTaskV2 { /** Return what's in the src but not in the dest */ private static List calcDiff(List src, List dest) { Set destIntentSet = new HashSet<>(); - Set> destFolderIntentSet = new HashSet<>(); + Set> destFolderIntentSet = new HashSet<>(); for (DbEntry entry : dest) { if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { - destFolderIntentSet.add(entry.mFolderItems.keySet()); + destFolderIntentSet.add(getFolderIntents(entry)); } else { destIntentSet.add(entry.mIntent); } @@ -259,7 +259,7 @@ public class GridSizeMigrationTaskV2 { List diff = new ArrayList<>(); for (DbEntry entry : src) { if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { - if (!destFolderIntentSet.contains(entry.mFolderItems.keySet())) { + if (!destFolderIntentSet.contains(getFolderIntents(entry))) { diff.add(entry); } } else { @@ -271,13 +271,23 @@ public class GridSizeMigrationTaskV2 { return diff; } + private static Map getFolderIntents(DbEntry entry) { + Map folder = new HashMap<>(); + for (String intent : entry.mFolderItems.keySet()) { + folder.put(intent, entry.mFolderItems.get(intent).size()); + } + return folder; + } + private static void insertEntryInDb(SQLiteDatabase db, Context context, DbEntry entry, String srcTableName, String destTableName) { int id = copyEntryAndUpdate(db, context, entry, srcTableName, destTableName); if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { - for (int itemId : entry.mFolderItems.values()) { - copyEntryAndUpdate(db, context, itemId, id, srcTableName, destTableName); + for (Set itemIds : entry.mFolderItems.values()) { + for (int itemId : itemIds) { + copyEntryAndUpdate(db, context, itemId, id, srcTableName, destTableName); + } } } } @@ -675,7 +685,10 @@ public class GridSizeMigrationTaskV2 { String intent = c.getString(1); verifyIntent(intent); total++; - entry.mFolderItems.put(intent, id); + if (!entry.mFolderItems.containsKey(intent)) { + entry.mFolderItems.put(intent, new HashSet<>()); + } + entry.mFolderItems.get(intent).add(id); } catch (Exception e) { removeEntryFromDb(mDb, mTableName, IntArray.wrap(c.getInt(0))); } @@ -714,7 +727,7 @@ public class GridSizeMigrationTaskV2 { private String mIntent; private String mProvider; - private Map mFolderItems = new HashMap<>(); + private Map> mFolderItems = new HashMap<>(); /** Comparator according to the reading order */ @Override @@ -748,9 +761,5 @@ public class GridSizeMigrationTaskV2 { values.put(LauncherSettings.Favorites.SPANX, spanX); values.put(LauncherSettings.Favorites.SPANY, spanY); } - - public String getIntentStr() { - return mIntent; - } } }