From 9ca2d92f8ef457ba0a7d2da37ae0dc8b655d5643 Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Mon, 7 Jun 2021 22:29:42 +0700 Subject: [PATCH] Fix duplicate items after grid migration --- .../android/launcher3/LauncherProvider.java | 5 ++++- .../model/GridSizeMigrationTaskV2.java | 20 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 41cca1b235..8537d15c81 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -171,8 +171,11 @@ public class LauncherProvider extends ContentProvider { final DatabaseHelper helper = src.get(); mOpenHelper = dst.get(); + SQLiteDatabase toDb = mOpenHelper.getWritableDatabase(); copyTable(helper.getReadableDatabase(), Favorites.TABLE_NAME, - mOpenHelper.getWritableDatabase(), targetTableName, getContext()); + toDb, targetTableName, getContext()); + // remove old items in the db + copyTable(toDb, targetTableName, toDb, Favorites.TABLE_NAME, getContext()); helper.close(); return true; } diff --git a/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java b/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java index fc7ce2aba7..3f1a197d2c 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java @@ -91,8 +91,24 @@ public class GridSizeMigrationTaskV2 { mSrcReader = srcReader; mDestReader = destReader; - mHotseatItems = destReader.loadHotseatEntries(); - mWorkspaceItems = destReader.loadAllWorkspaceEntries(); + List hotseatItems = destReader.loadHotseatEntries(); + List workspaceItems = destReader.loadAllWorkspaceEntries(); + + // only add items in the target size. other items are considered lost + mHotseatItems = new ArrayList<>(); + for (int i = 0; i < hotseatItems.size(); i++) { + DbEntry item = hotseatItems.get(i); + if (item.cellX < destHotseatSize) { + mHotseatItems.add(item); + } + } + mWorkspaceItems = new ArrayList<>(); + for (int i = 0; i < workspaceItems.size(); i++) { + DbEntry item = workspaceItems.get(i); + if (item.cellX < targetSize.x && item.cellY < targetSize.y) { + mWorkspaceItems.add(item); + } + } mHotseatDiff = calcDiff(mSrcReader.loadHotseatEntries(), mHotseatItems); mWorkspaceDiff = calcDiff(mSrcReader.loadAllWorkspaceEntries(), mWorkspaceItems);