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

Commit 76773cd2 authored by Tracy Zhou's avatar Tracy Zhou
Browse files

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
parent c0c09912
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -248,10 +248,10 @@ public class GridSizeMigrationTaskV2 {
    /** Return what's in the src but not in the dest */
    private static List<DbEntry> calcDiff(List<DbEntry> src, List<DbEntry> dest) {
        Set<String> destIntentSet = new HashSet<>();
        Set<Set<String>> destFolderIntentSet = new HashSet<>();
        Set<Map<String, Integer>> 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<DbEntry> 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,16 +271,26 @@ public class GridSizeMigrationTaskV2 {
        return diff;
    }

    private static Map<String, Integer> getFolderIntents(DbEntry entry) {
        Map<String, Integer> 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()) {
            for (Set<Integer> itemIds : entry.mFolderItems.values()) {
                for (int itemId : itemIds) {
                    copyEntryAndUpdate(db, context, itemId, id, srcTableName, destTableName);
                }
            }
        }
    }

    private static int copyEntryAndUpdate(SQLiteDatabase db, Context context,
            DbEntry entry, String srcTableName, String 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<String, Integer> mFolderItems = new HashMap<>();
        private Map<String, Set<Integer>> 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;
        }
    }
}