aboutsummaryrefslogtreecommitdiffstats
path: root/packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java')
-rw-r--r--packages/LineageSettingsProvider/src/org/lineageos/lineagesettings/LineageDatabaseHelper.java55
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;