summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author Sunny Goyal <sunnygoyal@google.com> 2025-03-11 15:47:31 -0700
committer Sunny Goyal <sunnygoyal@google.com> 2025-03-13 11:23:23 -0700
commit25f5c7e761e7243cb7cfc866075453d6dddd3bd5 (patch)
tree41ba8b2e584894ab444e2377fbc810c31273fe3a /src
parent1db86b7c1b29a93cfbd838871c73f23760329261 (diff)
Making ModelDbController injectable
Bug: 361850561 Test: Updated tests Flag: EXEMPT dagger Change-Id: Ie600469476ce5eb60813a3c8b57b9445fcf82c24
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/LauncherModel.kt3
-rw-r--r--src/com/android/launcher3/LauncherProvider.java72
-rw-r--r--src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java3
-rw-r--r--src/com/android/launcher3/model/LoaderCursor.java5
-rw-r--r--src/com/android/launcher3/model/LoaderTask.java3
-rw-r--r--src/com/android/launcher3/model/ModelDbController.java99
-rw-r--r--src/com/android/launcher3/model/ModelWriter.java13
-rw-r--r--src/com/android/launcher3/provider/RestoreDbTask.java9
-rw-r--r--src/com/android/launcher3/util/ContentWriter.java3
9 files changed, 96 insertions, 114 deletions
diff --git a/src/com/android/launcher3/LauncherModel.kt b/src/com/android/launcher3/LauncherModel.kt
index 02d70ae386..557ad67386 100644
--- a/src/com/android/launcher3/LauncherModel.kt
+++ b/src/com/android/launcher3/LauncherModel.kt
@@ -86,12 +86,11 @@ constructor(
private val loaderFactory: LoaderTaskFactory,
private val binderFactory: BaseLauncherBinderFactory,
private val spaceFinderFactory: Provider<WorkspaceItemSpaceFinder>,
+ val modelDbController: ModelDbController,
) {
private val mCallbacksList = ArrayList<BgDataModel.Callbacks>(1)
- val modelDbController = ModelDbController(context)
-
private val mLock = Any()
private var mLoaderTask: LoaderTask? = null
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 03ecf14ef6..acb2b48aeb 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -26,13 +26,13 @@ import android.content.ContentUris;
import android.content.ContentValues;
import android.content.pm.PackageManager;
import android.database.Cursor;
-import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.Process;
import android.text.TextUtils;
import android.util.Log;
+import android.util.Pair;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.model.ModelDbController;
@@ -74,24 +74,20 @@ public class LauncherProvider extends ContentProvider {
@Override
public String getType(Uri uri) {
- SqlArguments args = new SqlArguments(uri, null, null);
- if (TextUtils.isEmpty(args.where)) {
- return "vnd.android.cursor.dir/" + args.table;
+ if (TextUtils.isEmpty(parseUri(uri, null, null).first)) {
+ return "vnd.android.cursor.dir/" + Favorites.TABLE_NAME;
} else {
- return "vnd.android.cursor.item/" + args.table;
+ return "vnd.android.cursor.item/" + Favorites.TABLE_NAME;
}
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
- SqlArguments args = new SqlArguments(uri, selection, selectionArgs);
- SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
- qb.setTables(args.table);
-
+ Pair<String, String[]> args = parseUri(uri, selection, selectionArgs);
Cursor[] result = new Cursor[1];
executeControllerTask(controller -> {
- result[0] = controller.query(args.table, projection, args.where, args.args, sortOrder);
+ result[0] = controller.query(projection, args.first, args.second, sortOrder);
return 0;
});
return result[0];
@@ -108,7 +104,7 @@ public class LauncherProvider extends ContentProvider {
// attempt allocate and bind the widget.
Integer itemType = values.getAsInteger(Favorites.ITEM_TYPE);
if (itemType != null
- && itemType.intValue() == Favorites.ITEM_TYPE_APPWIDGET
+ && itemType == Favorites.ITEM_TYPE_APPWIDGET
&& !values.containsKey(Favorites.APPWIDGET_ID)) {
ComponentName cn = ComponentName.unflattenFromString(
@@ -135,8 +131,7 @@ public class LauncherProvider extends ContentProvider {
}
}
- SqlArguments args = new SqlArguments(uri);
- return controller.insert(args.table, values);
+ return controller.insert(values);
});
return rowId < 0 ? null : ContentUris.withAppendedId(uri, rowId);
@@ -144,14 +139,14 @@ public class LauncherProvider extends ContentProvider {
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
- SqlArguments args = new SqlArguments(uri, selection, selectionArgs);
- return executeControllerTask(c -> c.delete(args.table, args.where, args.args));
+ Pair<String, String[]> args = parseUri(uri, selection, selectionArgs);
+ return executeControllerTask(c -> c.delete(args.first, args.second));
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- SqlArguments args = new SqlArguments(uri, selection, selectionArgs);
- return executeControllerTask(c -> c.update(args.table, values, args.where, args.args));
+ Pair<String, String[]> args = parseUri(uri, selection, selectionArgs);
+ return executeControllerTask(c -> c.update(values, args.first, args.second));
}
@Override
@@ -209,35 +204,24 @@ public class LauncherProvider extends ContentProvider {
}
}
- static class SqlArguments {
- public final String table;
- public final String where;
- public final String[] args;
-
- SqlArguments(Uri url, String where, String[] args) {
- if (url.getPathSegments().size() == 1) {
- this.table = url.getPathSegments().get(0);
- this.where = where;
- this.args = args;
- } else if (url.getPathSegments().size() != 2) {
- throw new IllegalArgumentException("Invalid URI: " + url);
- } else if (!TextUtils.isEmpty(where)) {
- throw new UnsupportedOperationException("WHERE clause not supported: " + url);
- } else {
- this.table = url.getPathSegments().get(0);
- this.where = "_id=" + ContentUris.parseId(url);
- this.args = null;
+ /**
+ * Parses the uri and returns the where and arg clause.
+ *
+ * Note: This should be called on the binder thread (before posting on any executor) so that
+ * any parsing error gets propagated to the caller.
+ */
+ private static Pair<String, String[]> parseUri(Uri url, String where, String[] args) {
+ switch (url.getPathSegments().size()) {
+ case 1 -> {
+ return Pair.create(where, args);
}
- }
-
- SqlArguments(Uri url) {
- if (url.getPathSegments().size() == 1) {
- table = url.getPathSegments().get(0);
- where = null;
- args = null;
- } else {
- throw new IllegalArgumentException("Invalid URI: " + url);
+ case 2 -> {
+ if (!TextUtils.isEmpty(where)) {
+ throw new UnsupportedOperationException("WHERE clause not supported: " + url);
+ }
+ return Pair.create("_id=" + ContentUris.parseId(url), null);
}
+ default -> throw new IllegalArgumentException("Invalid URI: " + url);
}
}
}
diff --git a/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java b/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java
index 5a9b9c20f9..457d12e8ca 100644
--- a/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java
+++ b/src/com/android/launcher3/graphics/PreviewSurfaceRenderer.java
@@ -21,7 +21,6 @@ import static android.content.res.Configuration.UI_MODE_NIGHT_YES;
import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.launcher3.LauncherPrefs.GRID_NAME;
-import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
import static com.android.launcher3.graphics.ThemeManager.PREF_ICON_SHAPE;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -179,7 +178,7 @@ public class PreviewSurfaceRenderer {
ModelDbController mainController =
LauncherAppState.getInstance(mContext).getModel().getModelDbController();
- try (Cursor c = mainController.query(TABLE_NAME,
+ try (Cursor c = mainController.query(
new String[] {
LauncherSettings.Favorites.APPWIDGET_ID,
LauncherSettings.Favorites.SPANX,
diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java
index 77d0d7656b..efe61572fe 100644
--- a/src/com/android/launcher3/model/LoaderCursor.java
+++ b/src/com/android/launcher3/model/LoaderCursor.java
@@ -21,7 +21,6 @@ import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APP_PAIR;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT;
-import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
import static com.android.launcher3.Utilities.SHOULD_SHOW_FIRST_PAGE_WIDGET;
import static com.android.launcher3.icons.cache.CacheLookupFlag.DEFAULT_LOOKUP_FLAG;
import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ARCHIVED;
@@ -466,7 +465,7 @@ public class LoaderCursor extends CursorWrapper {
public boolean commitDeleted() {
if (mItemsToRemove.size() > 0) {
// Remove dead items
- mModel.getModelDbController().delete(TABLE_NAME,
+ mModel.getModelDbController().delete(
Utilities.createDbSelectionQuery(Favorites._ID, mItemsToRemove), null);
return true;
}
@@ -492,7 +491,7 @@ public class LoaderCursor extends CursorWrapper {
// Update restored items that no longer require special handling
ContentValues values = new ContentValues();
values.put(Favorites.RESTORED, 0);
- mModel.getModelDbController().update(TABLE_NAME, values,
+ mModel.getModelDbController().update(values,
Utilities.createDbSelectionQuery(Favorites._ID, mRestoredRows), null);
}
if (mRestoreEventLogger != null) {
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index 73af6a221a..78e5d898cd 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -23,7 +23,6 @@ import static com.android.launcher3.Flags.enableSmartspaceRemovalToggle;
import static com.android.launcher3.LauncherPrefs.IS_FIRST_LOAD_AFTER_RESTORE;
import static com.android.launcher3.LauncherPrefs.SHOULD_SHOW_SMARTSPACE;
import static com.android.launcher3.LauncherSettings.Favorites.DESKTOP_ICON_FLAG;
-import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
import static com.android.launcher3.icons.CacheableShortcutInfo.convertShortcutsToCacheableShortcuts;
import static com.android.launcher3.icons.cache.CacheLookupFlag.DEFAULT_LOOKUP_FLAG;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCUT_PERMISSION;
@@ -485,7 +484,7 @@ public class LoaderTask implements Runnable {
mShortcutKeyToPinnedShortcuts = new HashMap<>();
final LoaderCursor c = mLoaderCursorFactory.createLoaderCursor(
- dbController.query(TABLE_NAME, null, selection, null, null),
+ dbController.query(null, selection, null, null),
mUserManagerState,
mIsRestoreFromBackup ? restoreEventLogger : null);
final Bundle extras = c.getExtras();
diff --git a/src/com/android/launcher3/model/ModelDbController.java b/src/com/android/launcher3/model/ModelDbController.java
index feae632bc5..64b9c1c9cd 100644
--- a/src/com/android/launcher3/model/ModelDbController.java
+++ b/src/com/android/launcher3/model/ModelDbController.java
@@ -73,6 +73,8 @@ import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.Utilities;
import com.android.launcher3.backuprestore.LauncherRestoreEventLogger;
import com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RestoreError;
+import com.android.launcher3.dagger.ApplicationContext;
+import com.android.launcher3.dagger.LauncherAppSingleton;
import com.android.launcher3.logging.FileLog;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.provider.LauncherDbUtils;
@@ -91,10 +93,13 @@ import java.io.StringReader;
import java.util.List;
import java.util.stream.Collectors;
+import javax.inject.Inject;
+
/**
* Utility class which maintains an instance of Launcher database and provides utility methods
* around it.
*/
+@LauncherAppSingleton
public class ModelDbController {
private static final String TAG = "ModelDbController";
@@ -105,17 +110,25 @@ public class ModelDbController {
protected DatabaseHelper mOpenHelper;
private final Context mContext;
-
- public ModelDbController(Context context) {
+ private final InvariantDeviceProfile mIdp;
+ private final LauncherPrefs mPrefs;
+ private final UserCache mUserCache;
+
+ @Inject
+ ModelDbController(
+ @ApplicationContext Context context,
+ InvariantDeviceProfile idp,
+ LauncherPrefs prefs,
+ UserCache userCache) {
mContext = context;
+ mIdp = idp;
+ mPrefs = prefs;
+ mUserCache = userCache;
}
private void printDBs(String prefix) {
try {
- File directory = new File(
- mContext.getDatabasePath(InvariantDeviceProfile.INSTANCE.get(mContext).dbFile)
- .getParent()
- );
+ File directory = new File(mContext.getDatabasePath(mIdp.dbFile).getParent());
if (directory.exists()) {
for (File file : directory.listFiles()) {
Log.d("b/353505773", prefix + "Database file: " + file.getName());
@@ -130,9 +143,9 @@ public class ModelDbController {
private synchronized void createDbIfNotExists() {
if (mOpenHelper == null) {
- String dbFile = LauncherPrefs.get(mContext).get(DB_FILE);
+ String dbFile = mPrefs.get(DB_FILE);
if (dbFile.isEmpty()) {
- dbFile = InvariantDeviceProfile.INSTANCE.get(mContext).dbFile;
+ dbFile = mIdp.dbFile;
}
mOpenHelper = createDatabaseHelper(false /* forMigration */, dbFile);
printDBs("before: ");
@@ -144,7 +157,7 @@ public class ModelDbController {
protected DatabaseHelper createDatabaseHelper(boolean forMigration, String dbFile) {
// Set the flag for empty DB
Runnable onEmptyDbCreateCallback = forMigration ? () -> { }
- : () -> LauncherPrefs.get(mContext).putSync(getEmptyDbCreatedKey(dbFile).to(true));
+ : () -> mPrefs.putSync(getEmptyDbCreatedKey(dbFile).to(true));
DatabaseHelper databaseHelper = new DatabaseHelper(mContext, dbFile,
this::getSerialNumberForUser, onEmptyDbCreateCallback);
@@ -169,12 +182,12 @@ public class ModelDbController {
* Refer {@link SQLiteDatabase#query}
*/
@WorkerThread
- public Cursor query(String table, String[] projection, String selection,
+ public Cursor query(String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
createDbIfNotExists();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
Cursor result = db.query(
- table, projection, selection, selectionArgs, null, null, sortOrder);
+ TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
final Bundle extra = new Bundle();
extra.putString(EXTRA_DB_NAME, mOpenHelper.getDatabaseName());
@@ -186,12 +199,12 @@ public class ModelDbController {
* Refer {@link SQLiteDatabase#insert(String, String, ContentValues)}
*/
@WorkerThread
- public int insert(String table, ContentValues initialValues) {
+ public int insert(ContentValues initialValues) {
createDbIfNotExists();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
addModifiedTime(initialValues);
- int rowId = mOpenHelper.dbInsertAndCheck(db, table, initialValues);
+ int rowId = mOpenHelper.dbInsertAndCheck(db, TABLE_NAME, initialValues);
if (rowId >= 0) {
onAddOrDeleteOp(db);
}
@@ -202,11 +215,11 @@ public class ModelDbController {
* Refer {@link SQLiteDatabase#delete(String, String, String[])}
*/
@WorkerThread
- public int delete(String table, String selection, String[] selectionArgs) {
+ public int delete(String selection, String[] selectionArgs) {
createDbIfNotExists();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- int count = db.delete(table, selection, selectionArgs);
+ int count = db.delete(TABLE_NAME, selection, selectionArgs);
if (count > 0) {
onAddOrDeleteOp(db);
}
@@ -217,14 +230,12 @@ public class ModelDbController {
* Refer {@link SQLiteDatabase#update(String, ContentValues, String, String[])}
*/
@WorkerThread
- public int update(String table, ContentValues values,
- String selection, String[] selectionArgs) {
+ public int update(ContentValues values, String selection, String[] selectionArgs) {
createDbIfNotExists();
addModifiedTime(values);
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- int count = db.update(table, values, selection, selectionArgs);
- return count;
+ return db.update(TABLE_NAME, values, selection, selectionArgs);
}
/**
@@ -261,7 +272,7 @@ public class ModelDbController {
public void createEmptyDB() {
createDbIfNotExists();
mOpenHelper.createEmptyDB(mOpenHelper.getWritableDatabase());
- LauncherPrefs.get(mContext).putSync(getEmptyDbCreatedKey().to(true));
+ mPrefs.putSync(getEmptyDbCreatedKey().to(true));
}
/**
@@ -292,7 +303,6 @@ public class ModelDbController {
mOpenHelper.getReadableDatabase(), Favorites.HYBRID_HOTSEAT_BACKUP_TABLE);
}
-
/**
* Resets the launcher DB if we should reset it.
*/
@@ -302,11 +312,10 @@ public class ModelDbController {
}
FileLog.d(TAG, "resetLauncherDb: Migration failed: resetting launcher database");
createEmptyDB();
- LauncherPrefs.get(mContext).putSync(
- getEmptyDbCreatedKey(mOpenHelper.getDatabaseName()).to(true));
+ mPrefs.putSync(getEmptyDbCreatedKey(mOpenHelper.getDatabaseName()).to(true));
// Write the grid state to avoid another migration
- new DeviceGridState(LauncherAppState.getIDP(mContext)).writeToPrefs(mContext);
+ new DeviceGridState(mIdp).writeToPrefs(mContext);
}
/**
@@ -326,7 +335,7 @@ public class ModelDbController {
}
private boolean isThereExistingDb() {
- if (LauncherPrefs.get(mContext).get(getEmptyDbCreatedKey())) {
+ if (mPrefs.get(getEmptyDbCreatedKey())) {
// If we already have a new DB, ignore migration
FileLog.d(TAG, "isThereExistingDb: new DB already created, skipping migration");
return true;
@@ -335,8 +344,7 @@ public class ModelDbController {
}
private boolean isGridMigrationNecessary() {
- InvariantDeviceProfile idp = LauncherAppState.getIDP(mContext);
- if (GridSizeMigrationDBController.needsToMigrate(mContext, idp)) {
+ if (GridSizeMigrationDBController.needsToMigrate(mContext, mIdp)) {
return true;
}
FileLog.d(TAG, "isGridMigrationNecessary: no grid migration needed");
@@ -344,8 +352,7 @@ public class ModelDbController {
}
private boolean isCurrentDbSameAsTarget() {
- InvariantDeviceProfile idp = LauncherAppState.getIDP(mContext);
- String targetDbName = new DeviceGridState(idp).getDbFile();
+ String targetDbName = new DeviceGridState(mIdp).getDbFile();
if (TextUtils.equals(targetDbName, mOpenHelper.getDatabaseName())) {
FileLog.e(TAG, "isCurrentDbSameAsTarget: target db is same as current"
+ " current db: " + mOpenHelper.getDatabaseName()
@@ -367,7 +374,6 @@ public class ModelDbController {
return;
}
- InvariantDeviceProfile idp = LauncherAppState.getIDP(mContext);
DatabaseHelper oldHelper = mOpenHelper;
// We save the existing db's before creating the destination db helper so we know what logic
@@ -376,12 +382,12 @@ public class ModelDbController {
.filter(dbName -> mContext.getDatabasePath(dbName).exists())
.collect(Collectors.toList());
- mOpenHelper = createDatabaseHelper(true, new DeviceGridState(idp).getDbFile());
+ mOpenHelper = createDatabaseHelper(true, new DeviceGridState(mIdp).getDbFile());
try {
// This is the current grid we have, given by the mContext
DeviceGridState srcDeviceState = new DeviceGridState(mContext);
// This is the state we want to migrate to that is given by the idp
- DeviceGridState destDeviceState = new DeviceGridState(idp);
+ DeviceGridState destDeviceState = new DeviceGridState(mIdp);
boolean isDestNewDb = !existingDBs.contains(destDeviceState.getDbFile());
GridSizeMigrationLogic gridSizeMigrationLogic = new GridSizeMigrationLogic();
@@ -404,10 +410,10 @@ public class ModelDbController {
ModelDelegate modelDelegate) {
if (!migrateGridIfNeeded(modelDelegate)) {
if (restoreEventLogger != null) {
- if (LauncherPrefs.get(mContext).get(NO_DB_FILES_RESTORED)) {
+ if (mPrefs.get(NO_DB_FILES_RESTORED)) {
restoreEventLogger.logLauncherItemsRestoreFailed(DATA_TYPE_DB_FILE, 1,
RestoreError.DATABASE_FILE_NOT_RESTORED);
- LauncherPrefs.get(mContext).put(NO_DB_FILES_RESTORED, false);
+ mPrefs.put(NO_DB_FILES_RESTORED, false);
FileLog.d(TAG, "There is no data to migrate: resetting launcher database");
} else {
restoreEventLogger.logLauncherItemsRestored(DATA_TYPE_DB_FILE, 1);
@@ -416,11 +422,10 @@ public class ModelDbController {
}
FileLog.d(TAG, "tryMigrateDB: Migration failed: resetting launcher database");
createEmptyDB();
- LauncherPrefs.get(mContext).putSync(
- getEmptyDbCreatedKey(mOpenHelper.getDatabaseName()).to(true));
+ mPrefs.putSync(getEmptyDbCreatedKey(mOpenHelper.getDatabaseName()).to(true));
// Write the grid state to avoid another migration
- new DeviceGridState(LauncherAppState.getIDP(mContext)).writeToPrefs(mContext);
+ new DeviceGridState(mIdp).writeToPrefs(mContext);
} else if (restoreEventLogger != null) {
restoreEventLogger.logLauncherItemsRestored(DATA_TYPE_DB_FILE, 1);
}
@@ -434,17 +439,16 @@ public class ModelDbController {
*/
private boolean migrateGridIfNeeded(ModelDelegate modelDelegate) {
createDbIfNotExists();
- if (LauncherPrefs.get(mContext).get(getEmptyDbCreatedKey())) {
+ if (mPrefs.get(getEmptyDbCreatedKey())) {
// If we have already create a new DB, ignore migration
FileLog.d(TAG, "migrateGridIfNeeded: new DB already created, skipping migration");
return false;
}
- InvariantDeviceProfile idp = LauncherAppState.getIDP(mContext);
- if (!GridSizeMigrationDBController.needsToMigrate(mContext, idp)) {
+ if (!GridSizeMigrationDBController.needsToMigrate(mContext, mIdp)) {
FileLog.d(TAG, "migrateGridIfNeeded: no grid migration needed");
return true;
}
- String targetDbName = new DeviceGridState(idp).getDbFile();
+ String targetDbName = new DeviceGridState(mIdp).getDbFile();
if (TextUtils.equals(targetDbName, mOpenHelper.getDatabaseName())) {
FileLog.e(TAG, "migrateGridIfNeeded: target db is same as current"
+ " current db: " + mOpenHelper.getDatabaseName()
@@ -462,7 +466,7 @@ public class ModelDbController {
// This is the current grid we have, given by the mContext
DeviceGridState srcDeviceState = new DeviceGridState(mContext);
// This is the state we want to migrate to that is given by the idp
- DeviceGridState destDeviceState = new DeviceGridState(idp);
+ DeviceGridState destDeviceState = new DeviceGridState(mIdp);
boolean isDestNewDb = !existingDBs.contains(destDeviceState.getDbFile());
return GridSizeMigrationDBController.migrateGridIfNeeded(mContext, srcDeviceState,
destDeviceState, mOpenHelper, oldHelper.getWritableDatabase(), isDestNewDb,
@@ -611,7 +615,7 @@ public class ModelDbController {
}
private void clearFlagEmptyDbCreated() {
- LauncherPrefs.get(mContext).removeSync(getEmptyDbCreatedKey());
+ mPrefs.removeSync(getEmptyDbCreatedKey());
}
/**
@@ -625,7 +629,7 @@ public class ModelDbController {
public synchronized void loadDefaultFavoritesIfNecessary() {
createDbIfNotExists();
- if (LauncherPrefs.get(mContext).get(getEmptyDbCreatedKey())) {
+ if (mPrefs.get(getEmptyDbCreatedKey())) {
Log.d(TAG, "loading default workspace");
LauncherWidgetHolder widgetHolder = mOpenHelper.newLauncherWidgetHolder();
@@ -737,10 +741,9 @@ public class ModelDbController {
}
private DefaultLayoutParser getDefaultLayoutParser(LauncherWidgetHolder widgetHolder) {
- InvariantDeviceProfile idp = LauncherAppState.getIDP(mContext);
- int defaultLayout = idp.demoModeLayoutId != 0
+ int defaultLayout = mIdp.demoModeLayoutId != 0
&& mContext.getSystemService(UserManager.class).isDemoUser()
- ? idp.demoModeLayoutId : idp.defaultLayoutId;
+ ? mIdp.demoModeLayoutId : mIdp.defaultLayoutId;
return new DefaultLayoutParser(mContext, widgetHolder,
mOpenHelper, mContext.getResources(), defaultLayout);
@@ -766,6 +769,6 @@ public class ModelDbController {
* Returns the serial number for the provided user
*/
public long getSerialNumberForUser(UserHandle user) {
- return UserCache.INSTANCE.get(mContext).getSerialNumberForUser(user);
+ return mUserCache.getSerialNumberForUser(user);
}
}
diff --git a/src/com/android/launcher3/model/ModelWriter.java b/src/com/android/launcher3/model/ModelWriter.java
index 0332775224..659bacd784 100644
--- a/src/com/android/launcher3/model/ModelWriter.java
+++ b/src/com/android/launcher3/model/ModelWriter.java
@@ -16,7 +16,6 @@
package com.android.launcher3.model;
-import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
import static com.android.launcher3.provider.LauncherDbUtils.itemIdMatch;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -253,7 +252,7 @@ public class ModelWriter {
item.onAddToDatabase(writer);
writer.put(Favorites._ID, item.id);
- mModel.getModelDbController().insert(Favorites.TABLE_NAME, writer.getValues(mContext));
+ mModel.getModelDbController().insert(writer.getValues(mContext));
synchronized (mBgDataModel) {
checkItemInfoLocked(item.id, item, stackTrace);
mBgDataModel.addItem(mContext, item, true);
@@ -292,7 +291,7 @@ public class ModelWriter {
notifyDelete(items);
enqueueDeleteRunnable(newModelTask(() -> {
for (ItemInfo item : items) {
- mModel.getModelDbController().delete(TABLE_NAME, itemIdMatch(item.id), null);
+ mModel.getModelDbController().delete(itemIdMatch(item.id), null);
mBgDataModel.removeItem(mContext, item);
verifier.verifyModel();
}
@@ -307,12 +306,12 @@ public class ModelWriter {
notifyDelete(Collections.singleton(info));
enqueueDeleteRunnable(newModelTask(() -> {
- mModel.getModelDbController().delete(Favorites.TABLE_NAME,
+ mModel.getModelDbController().delete(
Favorites.CONTAINER + "=" + info.id, null);
mBgDataModel.removeItem(mContext, info.getContents());
info.getContents().clear();
- mModel.getModelDbController().delete(Favorites.TABLE_NAME,
+ mModel.getModelDbController().delete(
Favorites._ID + "=" + info.id, null);
mBgDataModel.removeItem(mContext, info);
verifier.verifyModel();
@@ -411,7 +410,7 @@ public class ModelWriter {
@Override
public void runImpl() {
mModel.getModelDbController().update(
- TABLE_NAME, mWriter.get().getValues(mContext), itemIdMatch(mItemId), null);
+ mWriter.get().getValues(mContext), itemIdMatch(mItemId), null);
updateItemArrays(mItem, mItemId);
}
}
@@ -433,7 +432,7 @@ public class ModelWriter {
ItemInfo item = mItems.get(i);
final int itemId = item.id;
mModel.getModelDbController().update(
- TABLE_NAME, mValues.get(i), itemIdMatch(itemId), null);
+ mValues.get(i), itemIdMatch(itemId), null);
updateItemArrays(item, itemId);
}
t.commit();
diff --git a/src/com/android/launcher3/provider/RestoreDbTask.java b/src/com/android/launcher3/provider/RestoreDbTask.java
index 23941bb1e6..f6ee26baa6 100644
--- a/src/com/android/launcher3/provider/RestoreDbTask.java
+++ b/src/com/android/launcher3/provider/RestoreDbTask.java
@@ -80,6 +80,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
/**
@@ -206,7 +207,8 @@ public class RestoreDbTask {
LauncherRestoreEventLogger restoreEventLogger =
LauncherRestoreEventLogger.Companion.newInstance(context);
task.sanitizeDB(context, controller, db, backupManager, restoreEventLogger);
- task.restoreAppWidgetIdsIfExists(context, controller, restoreEventLogger);
+ task.restoreAppWidgetIdsIfExists(context, controller, restoreEventLogger,
+ () -> new AppWidgetHost(context, APPWIDGET_HOST_ID));
t.commit();
return true;
} catch (Exception e) {
@@ -438,14 +440,13 @@ public class RestoreDbTask {
@WorkerThread
@VisibleForTesting
void restoreAppWidgetIdsIfExists(Context context, ModelDbController controller,
- LauncherRestoreEventLogger restoreEventLogger) {
+ LauncherRestoreEventLogger restoreEventLogger, Supplier<AppWidgetHost> hostSupplier) {
LauncherPrefs lp = LauncherPrefs.get(context);
if (lp.has(APP_WIDGET_IDS, OLD_APP_WIDGET_IDS)) {
- AppWidgetHost host = new AppWidgetHost(context, APPWIDGET_HOST_ID);
restoreAppWidgetIds(context, controller, restoreEventLogger,
IntArray.fromConcatString(lp.get(OLD_APP_WIDGET_IDS)).toArray(),
IntArray.fromConcatString(lp.get(APP_WIDGET_IDS)).toArray(),
- host);
+ hostSupplier.get());
} else {
FileLog.d(TAG, "Did not receive new app widget id map during Launcher restore");
}
diff --git a/src/com/android/launcher3/util/ContentWriter.java b/src/com/android/launcher3/util/ContentWriter.java
index 9910dc2e70..c2c1fee561 100644
--- a/src/com/android/launcher3/util/ContentWriter.java
+++ b/src/com/android/launcher3/util/ContentWriter.java
@@ -23,7 +23,6 @@ import android.os.UserHandle;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
-import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.icons.GraphicsUtils;
import com.android.launcher3.model.ModelDbController;
@@ -107,7 +106,7 @@ public class ContentWriter {
public int commit() {
if (mCommitParams != null) {
return mCommitParams.mDbController.update(
- Favorites.TABLE_NAME, getValues(mContext),
+ getValues(mContext),
mCommitParams.mWhere, mCommitParams.mSelectionArgs);
}
return 0;