summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java15
-rw-r--r--packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java30
2 files changed, 43 insertions, 2 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 30c4ee55842e..9ab853ff4964 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -690,7 +690,7 @@ public class SettingsBackupAgent extends BackupAgentHelper {
Cursor cursor = getContentResolver().query(Settings.Global.CONTENT_URI, PROJECTION, null,
null, null);
try {
- return extractRelevantValues(cursor, GlobalSettings.SETTINGS_TO_BACKUP);
+ return extractRelevantValues(cursor, getGlobalSettingsToBackup());
} finally {
cursor.close();
}
@@ -1011,7 +1011,7 @@ public class SettingsBackupAgent extends BackupAgentHelper {
Settings.System.LEGACY_RESTORE_SETTINGS);
validators = SystemSettingsValidators.VALIDATORS;
} else if (contentUri.equals(Settings.Global.CONTENT_URI)) {
- whitelist = ArrayUtils.concat(String.class, GlobalSettings.SETTINGS_TO_BACKUP,
+ whitelist = ArrayUtils.concat(String.class, getGlobalSettingsToBackup(),
Settings.Global.LEGACY_RESTORE_SETTINGS);
validators = GlobalSettingsValidators.VALIDATORS;
} else {
@@ -1021,6 +1021,17 @@ public class SettingsBackupAgent extends BackupAgentHelper {
return new SettingsBackupWhitelist(whitelist, validators);
}
+ private String[] getGlobalSettingsToBackup() {
+ // On watches, we don't want to backup or restore 'bluetooth_on' setting, as setting it to
+ // false during restore would cause watch OOBE to fail due to bluetooth connection loss.
+ if (isWatch()) {
+ return ArrayUtils.removeElement(
+ String.class, GlobalSettings.SETTINGS_TO_BACKUP, Settings.Global.BLUETOOTH_ON);
+ }
+
+ return GlobalSettings.SETTINGS_TO_BACKUP;
+ }
+
private boolean isBlockedByDynamicList(Set<String> dynamicBlockList, Uri areaUri, String key) {
String contentKey = Uri.withAppendedPath(areaUri, key).toString();
return dynamicBlockList.contains(contentKey);
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java
index d4ca4a35ed26..3a39150523ac 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsBackupAgentTest.java
@@ -26,6 +26,7 @@ import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.ContextWrapper;
+import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
@@ -221,6 +222,21 @@ public class SettingsBackupAgentTest extends BaseSettingsProviderTest {
}
@Test
+ public void testOnRestore_bluetoothOnRestoredOnNonWearablesOnly() {
+ TestSettingsHelper settingsHelper = new TestSettingsHelper(mContext);
+ mAgentUnderTest.mSettingsHelper = settingsHelper;
+
+ restoreGlobalSettings(generateBackupData(Map.of(Settings.Global.BLUETOOTH_ON, "0")));
+
+ var isWatch = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
+ if (isWatch) {
+ assertFalse(settingsHelper.mWrittenValues.containsKey(Settings.Global.BLUETOOTH_ON));
+ } else {
+ assertEquals("0", settingsHelper.mWrittenValues.get(Settings.Global.BLUETOOTH_ON));
+ }
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_CONFIGURABLE_FONT_SCALE_DEFAULT)
public void testFindClosestAllowedFontScale() {
final String[] availableFontScales = new String[]{"0.5", "0.9", "1.0", "1.1", "1.5"};
@@ -266,6 +282,20 @@ public class SettingsBackupAgentTest extends BaseSettingsProviderTest {
return buffer.array();
}
+ private void restoreGlobalSettings(byte[] backupData) {
+ mAgentUnderTest.restoreSettings(
+ backupData,
+ /* pos= */ 0,
+ backupData.length,
+ Settings.Global.CONTENT_URI,
+ null,
+ null,
+ null,
+ R.array.restore_blocked_global_settings,
+ /* dynamicBlockList= */ Collections.emptySet(),
+ /* settingsToPreserve= */ Collections.emptySet());
+ }
+
private byte[] generateUncorruptedHeader() throws IOException {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
mAgentUnderTest.writeHeader(os);