diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 85ee8bc184..5aa8a46695 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -162,6 +162,7 @@ public class LauncherProvider extends ContentProvider { private synchronized boolean prepForMigration(String dbFile, String targetTableName, Supplier src, Supplier dst) { if (TextUtils.equals(dbFile, mOpenHelper.getDatabaseName())) { + Log.e("b/198965093", "prepForMigration - target db is same as current: " + dbFile); return false; } @@ -439,7 +440,7 @@ public class LauncherProvider extends ContentProvider { Bundle result = new Bundle(); result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, prepForMigration( - InvariantDeviceProfile.INSTANCE.get(getContext()).dbFile, + arg /* dbFile */, Favorites.TMP_TABLE, () -> mOpenHelper, () -> DatabaseHelper.createDatabaseHelper( diff --git a/src/com/android/launcher3/model/DeviceGridState.java b/src/com/android/launcher3/model/DeviceGridState.java index 3e49d79138..35fcb789e7 100644 --- a/src/com/android/launcher3/model/DeviceGridState.java +++ b/src/com/android/launcher3/model/DeviceGridState.java @@ -43,15 +43,18 @@ public class DeviceGridState implements Comparable { public static final String KEY_WORKSPACE_SIZE = "migration_src_workspace_size"; public static final String KEY_HOTSEAT_COUNT = "migration_src_hotseat_count"; public static final String KEY_DEVICE_TYPE = "migration_src_device_type"; + public static final String KEY_DB_FILE = "migration_src_db_file"; private final String mGridSizeString; private final int mNumHotseat; private final @DeviceType int mDeviceType; + private final String mDbFile; public DeviceGridState(InvariantDeviceProfile idp) { mGridSizeString = String.format(Locale.ENGLISH, "%d,%d", idp.numColumns, idp.numRows); mNumHotseat = idp.numDatabaseHotseatIcons; mDeviceType = idp.deviceType; + mDbFile = idp.dbFile; } public DeviceGridState(Context context) { @@ -59,6 +62,7 @@ public class DeviceGridState implements Comparable { mGridSizeString = prefs.getString(KEY_WORKSPACE_SIZE, ""); mNumHotseat = prefs.getInt(KEY_HOTSEAT_COUNT, -1); mDeviceType = prefs.getInt(KEY_DEVICE_TYPE, TYPE_PHONE); + mDbFile = prefs.getString(KEY_DB_FILE, ""); } /** @@ -68,6 +72,20 @@ public class DeviceGridState implements Comparable { return mDeviceType; } + /** + * Returns the databaseFile for the grid. + */ + public String getDbFile() { + return mDbFile; + } + + /** + * Returns the number of hotseat icons. + */ + public int getNumHotseat() { + return mNumHotseat; + } + /** * Stores the device state to shared preferences */ @@ -76,6 +94,7 @@ public class DeviceGridState implements Comparable { .putString(KEY_WORKSPACE_SIZE, mGridSizeString) .putInt(KEY_HOTSEAT_COUNT, mNumHotseat) .putInt(KEY_DEVICE_TYPE, mDeviceType) + .putString(KEY_DB_FILE, mDbFile) .apply(); } @@ -106,6 +125,7 @@ public class DeviceGridState implements Comparable { + "mGridSizeString='" + mGridSizeString + '\'' + ", mNumHotseat=" + mNumHotseat + ", mDeviceType=" + mDeviceType + + ", mDbFile=" + mDbFile + '}'; } diff --git a/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java b/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java index 74b0a6fd40..0369b217cc 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTaskV2.java @@ -22,7 +22,6 @@ import android.content.ComponentName; import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.database.Cursor; @@ -104,13 +103,16 @@ public class GridSizeMigrationTaskV2 { * Check given a new IDP, if migration is necessary. */ public static boolean needsToMigrate(Context context, InvariantDeviceProfile idp) { - DeviceGridState idpGridState = new DeviceGridState(idp); - DeviceGridState contextGridState = new DeviceGridState(context); - boolean needsToMigrate = !idpGridState.isCompatible(contextGridState); + return needsToMigrate(new DeviceGridState(context), new DeviceGridState(idp)); + } + + private static boolean needsToMigrate( + DeviceGridState srcDeviceState, DeviceGridState destDeviceState) { + boolean needsToMigrate = !destDeviceState.isCompatible(srcDeviceState); // TODO(b/198965093): Revert this change after bug is fixed if (needsToMigrate) { - Log.d("b/198965093", "Migration is needed. idpGridState: " + idpGridState - + ", contextGridState: " + contextGridState); + Log.d("b/198965093", "Migration is needed. destDeviceState: " + destDeviceState + + ", srcDeviceState: " + srcDeviceState); } return needsToMigrate; } @@ -143,23 +145,26 @@ public class GridSizeMigrationTaskV2 { idp = LauncherAppState.getIDP(context); } - if (!needsToMigrate(context, idp)) { + DeviceGridState srcDeviceState = new DeviceGridState(context); + DeviceGridState destDeviceState = new DeviceGridState(idp); + if (!needsToMigrate(srcDeviceState, destDeviceState)) { return true; } - SharedPreferences prefs = Utilities.getPrefs(context); HashSet validPackages = getValidPackages(context); if (migrateForPreview) { if (!LauncherSettings.Settings.call( context.getContentResolver(), - LauncherSettings.Settings.METHOD_PREP_FOR_PREVIEW, idp.dbFile).getBoolean( + LauncherSettings.Settings.METHOD_PREP_FOR_PREVIEW, + destDeviceState.getDbFile()).getBoolean( LauncherSettings.Settings.EXTRA_VALUE)) { return false; } } else if (!LauncherSettings.Settings.call( context.getContentResolver(), - LauncherSettings.Settings.METHOD_UPDATE_CURRENT_OPEN_HELPER).getBoolean( + LauncherSettings.Settings.METHOD_UPDATE_CURRENT_OPEN_HELPER, + destDeviceState.getDbFile()).getBoolean( LauncherSettings.Settings.EXTRA_VALUE)) { return false; } @@ -179,10 +184,10 @@ public class GridSizeMigrationTaskV2 { : LauncherSettings.Favorites.TABLE_NAME, context, validPackages); - Point targetSize = new Point(idp.numColumns, idp.numRows); + Point targetSize = new Point(destDeviceState.getColumns(), destDeviceState.getRows()); GridSizeMigrationTaskV2 task = new GridSizeMigrationTaskV2(context, t.getDb(), - srcReader, destReader, idp.numDatabaseHotseatIcons, targetSize); - task.migrate(idp); + srcReader, destReader, destDeviceState.getNumHotseat(), targetSize); + task.migrate(srcDeviceState, destDeviceState); if (!migrateForPreview) { dropTable(t.getDb(), LauncherSettings.Favorites.TMP_TABLE); @@ -200,13 +205,13 @@ public class GridSizeMigrationTaskV2 { if (!migrateForPreview) { // Save current configuration, so that the migration does not run again. - new DeviceGridState(idp).writeToPrefs(context); + destDeviceState.writeToPrefs(context); } } } @VisibleForTesting - protected boolean migrate(InvariantDeviceProfile idp) { + protected boolean migrate(DeviceGridState srcDeviceState, DeviceGridState destDeviceState) { if (mHotseatDiff.isEmpty() && mWorkspaceDiff.isEmpty()) { return false; } @@ -228,8 +233,6 @@ public class GridSizeMigrationTaskV2 { boolean preservePages = false; if (screens.isEmpty() && FeatureFlags.ENABLE_NEW_MIGRATION_LOGIC.get()) { - DeviceGridState srcDeviceState = new DeviceGridState(mContext); - DeviceGridState destDeviceState = new DeviceGridState(idp); preservePages = destDeviceState.compareTo(srcDeviceState) >= 0 && destDeviceState.getColumns() - srcDeviceState.getColumns() <= 2; } diff --git a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt index 239e092a01..345016bd9f 100644 --- a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt +++ b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt @@ -125,7 +125,7 @@ class GridSizeMigrationTaskV2Test { idp.numDatabaseHotseatIcons, Point(idp.numColumns, idp.numRows) ) - task.migrate(idp) + task.migrate(DeviceGridState(context), DeviceGridState(idp)) // Check hotseat items var c = context.contentResolver.query( @@ -205,7 +205,7 @@ class GridSizeMigrationTaskV2Test { idp.numDatabaseHotseatIcons, Point(idp.numColumns, idp.numRows) ) - task.migrate(idp) + task.migrate(DeviceGridState(context), DeviceGridState(idp)) // Check hotseat items val c = context.contentResolver.query( @@ -260,7 +260,7 @@ class GridSizeMigrationTaskV2Test { idp.numDatabaseHotseatIcons, Point(idp.numColumns, idp.numRows) ) - task.migrate(idp) + task.migrate(DeviceGridState(context), DeviceGridState(idp)) // Check hotseat items val c = context.contentResolver.query( @@ -325,7 +325,7 @@ class GridSizeMigrationTaskV2Test { idp.numDatabaseHotseatIcons, Point(idp.numColumns, idp.numRows) ) - task.migrate(idp) + task.migrate(DeviceGridState(context), DeviceGridState(idp)) // Get workspace items val c = context.contentResolver.query( @@ -385,7 +385,7 @@ class GridSizeMigrationTaskV2Test { idp.numDatabaseHotseatIcons, Point(idp.numColumns, idp.numRows) ) - task.migrate(idp) + task.migrate(DeviceGridState(context), DeviceGridState(idp)) // Get workspace items val c = context.contentResolver.query( @@ -446,7 +446,7 @@ class GridSizeMigrationTaskV2Test { idp.numDatabaseHotseatIcons, Point(idp.numColumns, idp.numRows) ) - task.migrate(idp) + task.migrate(DeviceGridState(context), DeviceGridState(idp)) // Get workspace items val c = context.contentResolver.query(