From 68665286e88abdd369bbf48ac77fc2422f9f3b9b Mon Sep 17 00:00:00 2001 From: Danesh M Date: Wed, 11 May 2016 18:59:00 -0700 Subject: [PATCH] CMSettings : Move force_show_navbar to global Keep feature inline with 12.1, only allow owner to control the feature and mirror across users. Also add additional checks for moved settings. Change-Id: Ida11b71bc5ce9463628f8c5d76e59902d47d59bb --- .../cmsettings/CMDatabaseHelper.java | 46 ++++++++++++++++++- .../cyanogenmod/providers/CMSettings.java | 29 ++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMDatabaseHelper.java b/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMDatabaseHelper.java index 5a1e50d..5a3bb9b 100644 --- a/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMDatabaseHelper.java +++ b/packages/CMSettingsProvider/src/org/cyanogenmod/cmsettings/CMDatabaseHelper.java @@ -46,7 +46,7 @@ public class CMDatabaseHelper extends SQLiteOpenHelper{ private static final boolean LOCAL_LOGV = false; private static final String DATABASE_NAME = "cmsettings.db"; - private static final int DATABASE_VERSION = 5; + private static final int DATABASE_VERSION = 6; public static class CMTableNames { public static final String TABLE_SYSTEM = "system"; @@ -219,6 +219,16 @@ public class CMDatabaseHelper extends SQLiteOpenHelper{ upgradeVersion = 5; } + if (upgradeVersion < 6) { + // Move force_show_navbar to global + if (mUserHandle == UserHandle.USER_OWNER) { + moveSettingsToNewTable(db, CMTableNames.TABLE_SECURE, + CMTableNames.TABLE_GLOBAL, new String[] { + CMSettings.Secure.DEV_FORCE_SHOW_NAVBAR + }, true); + } + upgradeVersion = 6; + } // *** Remember to update DATABASE_VERSION above! if (upgradeVersion < newVersion) { @@ -237,6 +247,40 @@ public class CMDatabaseHelper extends SQLiteOpenHelper{ } } + private void moveSettingsToNewTable(SQLiteDatabase db, + String sourceTable, String destTable, + String[] settingsToMove, boolean doIgnore) { + // Copy settings values from the source table to the dest, and remove from the source + SQLiteStatement insertStmt = null; + SQLiteStatement deleteStmt = null; + + db.beginTransaction(); + try { + insertStmt = db.compileStatement("INSERT " + + (doIgnore ? " OR IGNORE " : "") + + " INTO " + destTable + " (name,value) SELECT name,value FROM " + + sourceTable + " WHERE name=?"); + deleteStmt = db.compileStatement("DELETE FROM " + sourceTable + " WHERE name=?"); + + for (String setting : settingsToMove) { + insertStmt.bindString(1, setting); + insertStmt.execute(); + + deleteStmt.bindString(1, setting); + deleteStmt.execute(); + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + if (insertStmt != null) { + insertStmt.close(); + } + if (deleteStmt != null) { + deleteStmt.close(); + } + } + } + /** * Drops the table and index for the specified database and table name * @param db The {@link SQLiteDatabase} to drop the table and index in. diff --git a/sdk/src/java/cyanogenmod/providers/CMSettings.java b/sdk/src/java/cyanogenmod/providers/CMSettings.java index 6e8b234..80dc2b3 100644 --- a/sdk/src/java/cyanogenmod/providers/CMSettings.java +++ b/sdk/src/java/cyanogenmod/providers/CMSettings.java @@ -530,6 +530,11 @@ public final class CMSettings { /** @hide */ public static boolean putStringForUser(ContentResolver resolver, String name, String value, int userId) { + if (MOVED_TO_SECURE.contains(name)) { + Log.w(TAG, "Setting " + name + " has moved from CMSettings.System" + + " to CMSettings.Secure, value is unchanged."); + return false; + } return sNameValueCache.putStringForUser(resolver, name, value, userId); } @@ -2093,6 +2098,13 @@ public final class CMSettings { CALL_METHOD_GET_SECURE, CALL_METHOD_PUT_SECURE); + /** @hide */ + protected static final ArraySet MOVED_TO_GLOBAL; + static { + MOVED_TO_GLOBAL = new ArraySet<>(1); + MOVED_TO_GLOBAL.add(Global.DEV_FORCE_SHOW_NAVBAR); + } + // region Methods /** @@ -2156,6 +2168,11 @@ public final class CMSettings { /** @hide */ public static String getStringForUser(ContentResolver resolver, String name, int userId) { + if (MOVED_TO_GLOBAL.contains(name)) { + Log.w(TAG, "Setting " + name + " has moved from CMSettings.Secure" + + " to CMSettings.Global, value is unchanged."); + return CMSettings.Global.getStringForUser(resolver, name, userId); + } return sNameValueCache.getStringForUser(resolver, name, userId); } @@ -2173,6 +2190,11 @@ public final class CMSettings { /** @hide */ public static boolean putStringForUser(ContentResolver resolver, String name, String value, int userId) { + if (MOVED_TO_GLOBAL.contains(name)) { + Log.w(TAG, "Setting " + name + " has moved from CMSettings.Secure" + + " to CMSettings.Global, value is unchanged."); + return false; + } return sNameValueCache.putStringForUser(resolver, name, value, userId); } @@ -2483,6 +2505,7 @@ public final class CMSettings { /** * Developer options - Navigation Bar show switch + * @deprecated * @hide */ public static final String DEV_FORCE_SHOW_NAVBAR = "dev_force_show_navbar"; @@ -3298,6 +3321,12 @@ public final class CMSettings { *

{@link cyanogenmod.providers.WeatherContract.WeatherColumns.TempUnit#FAHRENHEIT}

*/ public static final String WEATHER_TEMPERATURE_UNIT = "weather_temperature_unit"; + + /** + * Developer options - Navigation Bar show switch + * @hide + */ + public static final String DEV_FORCE_SHOW_NAVBAR = "dev_force_show_navbar"; // endregion /**