diff options
Diffstat (limited to 'packages/SettingsProvider/src')
-rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index b6e31d26a088..d023d98f2b73 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -48,6 +48,8 @@ import java.util.Locale; public class SettingsHelper { private static final String TAG = "SettingsHelper"; private static final String SILENT_RINGTONE = "_silent"; + private static final String SETTINGS_REPLACED_KEY = "backup_skip_user_facing_data"; + private static final String SETTING_ORIGINAL_KEY_SUFFIX = "_original"; private static final float FLOAT_TOLERANCE = 0.01f; private Context mContext; @@ -121,6 +123,10 @@ public class SettingsHelper { */ public void restoreValue(Context context, ContentResolver cr, ContentValues contentValues, Uri destination, String name, String value, int restoredFromSdkInt) { + if (isReplacedSystemSetting(name)) { + return; + } + // Will we need a post-restore broadcast for this element? String oldValue = null; boolean sendBroadcast = false; @@ -203,7 +209,32 @@ public class SettingsHelper { } } // Return the original value - return value; + return isReplacedSystemSetting(name) ? getRealValueForSystemSetting(name) : value; + } + + /** + * The setting value might have been replaced temporarily. If that's the case, return the real + * value instead of the temporary one. + */ + @VisibleForTesting + public String getRealValueForSystemSetting(String setting) { + return Settings.System.getString(mContext.getContentResolver(), + setting + SETTING_ORIGINAL_KEY_SUFFIX); + } + + @VisibleForTesting + public boolean isReplacedSystemSetting(String setting) { + // This list should not be modified. + if (!Settings.System.MASTER_MONO.equals(setting) + && !Settings.System.SCREEN_OFF_TIMEOUT.equals(setting)) { + return false; + } + // If this flag is set, values for the system settings from the list above have been + // temporarily replaced. We don't want to back up the temporary value or run restore for + // such settings. + // TODO(154822946): Remove this logic in the next release. + return Settings.Secure.getInt(mContext.getContentResolver(), SETTINGS_REPLACED_KEY, + /* def */ 0) != 0; } /** |