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

Commit b1e003c1 authored by Tracy Zhou's avatar Tracy Zhou Committed by Android (Google) Code Review
Browse files

Merge "Support having dup items in folder for migration" into ub-launcher3-rvc-dev

parents 7cb6d738 76773cd2
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;
        }
    }
}