diff options
Diffstat (limited to 'packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java')
-rw-r--r-- | packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java | 55 |
1 files changed, 50 insertions, 5 deletions
diff --git a/packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java b/packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java index 1d75b217..e9afe723 100644 --- a/packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java +++ b/packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java @@ -1,5 +1,6 @@ /** * Copyright (c) 2015, The CyanogenMod Project + * Copyright (c) 2017, The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,8 +35,11 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; + import lineageos.providers.LineageSettings; +import org.lineageos.internal.util.FileUtils; + import java.io.File; /** @@ -49,6 +53,8 @@ public class LineageDatabaseHelper extends SQLiteOpenHelper{ private static final String DATABASE_NAME = "lineagesettings.db"; private static final int DATABASE_VERSION = 8; + private static final String DATABASE_NAME_OLD = "cmsettings.db"; + public static class LineageTableNames { public static final String TABLE_SYSTEM = "system"; public static final String TABLE_SECURE = "secure"; @@ -78,26 +84,65 @@ public class LineageDatabaseHelper extends SQLiteOpenHelper{ * @param userId The database path for this user * @return The database path string */ - static String dbNameForUser(final int userId) { - // The owner gets the unadorned db name; + private static String dbNameForUser(Context context, int userId, String baseName) { if (userId == UserHandle.USER_OWNER) { - return DATABASE_NAME; + return context.getDatabasePath(baseName).getPath(); } else { // Place the database in the user-specific data tree so that it's // cleaned up automatically when the user is deleted. File databaseFile = new File( - Environment.getUserSystemDirectory(userId), DATABASE_NAME); + Environment.getUserSystemDirectory(userId), baseName); return databaseFile.getPath(); } } /** + * Migrate db files (if needed). + */ + public static void migrateDbFiles(Context context, int userId) { + final String dbPath = dbNameForUser(context, userId, DATABASE_NAME); + final String dbPathOld = dbNameForUser(context, userId, DATABASE_NAME_OLD); + + // Only rename databases that we know we can write to later. + if (!FileUtils.isFileWritable(dbPathOld)) { + return; + } + if (FileUtils.fileExists(dbPath) && !FileUtils.delete(dbPath)) { + Log.e(TAG, "Unable to delete existing settings db file " + dbPath); + return; + } + if (!FileUtils.rename(dbPathOld, dbPath)) { + Log.e(TAG, "Found old settings db " + dbPathOld + " but could not rename it to " + + dbPath); + return; + } + // Move any additional sqlite files that might exist. + // The list of suffixes is taken from fw/b SQLiteDatabase.java deleteDatabase(). + final String[] suffixes = { "-journal", "-shm", "-wal" }; + for (String s: suffixes) { + final String oldFile = dbPathOld + s; + final String newFile = dbPath + s; + if (!FileUtils.fileExists(oldFile)) { + continue; + } + if (FileUtils.fileExists(newFile) && !FileUtils.delete(newFile)) { + Log.e(TAG, "Unable to delete existing settings db file " + newFile); + continue; + } + if (!FileUtils.rename(oldFile, newFile)) { + Log.e(TAG, "Unable to rename existing settings db file " + oldFile + " to " + + newFile); + } + } + } + + /** * Creates an instance of {@link LineageDatabaseHelper} * @param context * @param userId */ public LineageDatabaseHelper(Context context, int userId) { - super(context, dbNameForUser(userId), null, DATABASE_VERSION); + super(context, dbNameForUser(context, userId, DATABASE_NAME), null, DATABASE_VERSION); mContext = context; mUserHandle = userId; |