diff options
| author | 2023-08-14 19:54:22 +0800 | |
|---|---|---|
| committer | 2023-08-15 11:17:25 +0000 | |
| commit | 918a57109c926328a717e90418ae5ac5dbb5f683 (patch) | |
| tree | 09c067b9b74aa0d534b35eadb5c2b029ed1fec6a | |
| parent | 8d008336ea9e8b54041a4256f475b8d0bbd18c3d (diff) | |
Add Settings.Secure.NAVIGATION_MODE_RESTORE
During restore get NAVIGATION_MODE value and write it to NAVIGATION_MODE_RESTORE.
This value is used for improving setup experience.
Bug: 244532342
Test: manual
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:b33d1bde6c86a1d079916997452632d4810dab5b)
Merged-In: I12b182184e1d381e14c7b290fd5f357026990c78
Change-Id: I12b182184e1d381e14c7b290fd5f357026990c78
4 files changed, 39 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 2e62e03cb230..3f2be5146187 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -11265,6 +11265,19 @@ public final class Settings { "navigation_mode"; /** + * The value is from another(source) device's {@link #NAVIGATION_MODE} during restore. + * It's supposed to be written only by + * {@link com.android.providers.settings.SettingsHelper}. + * This setting should not be added into backup array. + * <p>Value: -1 = Can't get value from restore(default), + * 0 = 3 button, + * 1 = 2 button, + * 2 = fully gestural. + * @hide + */ + public static final String NAVIGATION_MODE_RESTORE = "navigation_mode_restore"; + + /** * Scale factor for the back gesture inset size on the left side of the screen. * @hide */ diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java index bbfdc384bd60..6c9da97f4c92 100644 --- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java @@ -261,6 +261,8 @@ public class SecureSettingsValidators { VALIDATORS.put(Secure.NAV_BAR_KIDS_MODE, BOOLEAN_VALIDATOR); VALIDATORS.put( Secure.NAVIGATION_MODE, new DiscreteValueValidator(new String[] {"0", "1", "2"})); + VALIDATORS.put(Secure.NAVIGATION_MODE_RESTORE, + new DiscreteValueValidator(new String[] {"-1", "0", "1", "2"})); VALIDATORS.put(Secure.BACK_GESTURE_INSET_SCALE_LEFT, new InclusiveFloatRangeValidator(0.0f, Float.MAX_VALUE)); VALIDATORS.put(Secure.BACK_GESTURE_INSET_SCALE_RIGHT, diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java index 99a00e401bb0..c830d6b2b611 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java @@ -835,7 +835,11 @@ public class SettingsBackupAgent extends BackupAgentHelper { continue; } - if (settingsToPreserve.contains(getQualifiedKeyForSetting(key, contentUri))) { + // Filter out Settings.Secure.NAVIGATION_MODE from modified preserve settings. + // Let it take part in restore process. See also b/244532342. + boolean isSettingPreserved = settingsToPreserve.contains( + getQualifiedKeyForSetting(key, contentUri)); + if (isSettingPreserved && !Settings.Secure.NAVIGATION_MODE.equals(key)) { Log.i(TAG, "Skipping restore for setting " + key + " as it is marked as " + "preserved"); continue; @@ -896,6 +900,23 @@ public class SettingsBackupAgent extends BackupAgentHelper { } else { destination = contentUri; } + + // Value is written to NAVIGATION_MODE_RESTORE to mark navigation mode + // has been set before on source device. + // See also: b/244532342. + if (Settings.Secure.NAVIGATION_MODE.equals(key)) { + contentValues.clear(); + contentValues.put(Settings.NameValueTable.NAME, + Settings.Secure.NAVIGATION_MODE_RESTORE); + contentValues.put(Settings.NameValueTable.VALUE, value); + cr.insert(destination, contentValues); + // Avoid restore original setting if it has been preserved. + if (isSettingPreserved) { + Log.i(TAG, "Skipping restore for setting navigation_mode " + + "as it is marked as preserved"); + continue; + } + } settingsHelper.restoreValue(this, cr, contentValues, destination, key, value, mRestoredFromSdkInt); diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java index 5475faded431..aed6e034f417 100644 --- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java @@ -859,7 +859,8 @@ public class SettingsBackupTest { Settings.Secure.CREDENTIAL_SERVICE, Settings.Secure.CREDENTIAL_SERVICE_PRIMARY, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_EDGE_HAPTIC_ENABLED, - Settings.Secure.DND_CONFIGS_MIGRATED); + Settings.Secure.DND_CONFIGS_MIGRATED, + Settings.Secure.NAVIGATION_MODE_RESTORE); @Test public void systemSettingsBackedUpOrDenied() { |