Skip to content
Snippets Groups Projects
Commit 44511794 authored by Annie Meng's avatar Annie Meng
Browse files

Allow restore of settings with nullable components

Creates a new settings validator that allows for null components, which
have semantic meaning for certain settings (in this case, that no
service is selected).

Bug: 79925290
Test: 1) atest SettingsValidatorsTest
2) Manual:
- In Settings UI, select "None" for autofill service and accessibility
shortcut target
- "adb backup -keyvalue -f nullsettings.ab com.android.providers.settings"
- "adb restore nullsettings.ab"
- Verify no crashes and that autofill service and accessibility shortcut
target both have "None" in Settings UI

Change-Id: I159b3f4706c6b981a30437c31724b106eb4e3f2a
parent 3a95d0bb
No related branches found
No related tags found
No related merge requests found
......@@ -23,6 +23,7 @@ import static android.provider.SettingsValidators.COMPONENT_NAME_VALIDATOR;
import static android.provider.SettingsValidators.LENIENT_IP_ADDRESS_VALIDATOR;
import static android.provider.SettingsValidators.LOCALE_VALIDATOR;
import static android.provider.SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR;
import static android.provider.SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR;
import static android.provider.SettingsValidators.PACKAGE_NAME_VALIDATOR;
import static android.provider.SettingsValidators.URI_VALIDATOR;
 
......@@ -5452,7 +5453,8 @@ public final class Settings {
@TestApi
public static final String AUTOFILL_SERVICE = "autofill_service";
 
private static final Validator AUTOFILL_SERVICE_VALIDATOR = COMPONENT_NAME_VALIDATOR;
private static final Validator AUTOFILL_SERVICE_VALIDATOR =
NULLABLE_COMPONENT_NAME_VALIDATOR;
 
/**
* Boolean indicating if Autofill supports field classification.
......@@ -5950,7 +5952,7 @@ public final class Settings {
"accessibility_shortcut_target_service";
 
private static final Validator ACCESSIBILITY_SHORTCUT_TARGET_SERVICE_VALIDATOR =
COMPONENT_NAME_VALIDATOR;
NULLABLE_COMPONENT_NAME_VALIDATOR;
 
/**
* Setting specifying the accessibility service or feature to be toggled via the
......
......@@ -77,6 +77,11 @@ public class SettingsValidators {
}
};
/**
* Does not allow a setting to have a null {@link ComponentName}. Use {@link
* SettingsValidators#NULLABLE_COMPONENT_NAME_VALIDATOR} instead if a setting can have a
* nullable {@link ComponentName}.
*/
public static final Validator COMPONENT_NAME_VALIDATOR = new Validator() {
@Override
public boolean validate(@Nullable String value) {
......@@ -84,6 +89,16 @@ public class SettingsValidators {
}
};
/**
* Allows a setting to have a null {@link ComponentName}.
*/
public static final Validator NULLABLE_COMPONENT_NAME_VALIDATOR = new Validator() {
@Override
public boolean validate(@Nullable String value) {
return value == null || COMPONENT_NAME_VALIDATOR.validate(value);
}
};
public static final Validator PACKAGE_NAME_VALIDATOR = new Validator() {
@Override
public boolean validate(@Nullable String value) {
......
......@@ -87,6 +87,23 @@ public class SettingsValidatorsTest {
assertFalse(SettingsValidators.LENIENT_IP_ADDRESS_VALIDATOR.validate(null));
}
@Test
public void testNullableComponentNameValidator_onValidComponentName_returnsTrue() {
assertTrue(SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR.validate(
"android/com.android.internal.backup.LocalTransport"));
}
@Test
public void testNullableComponentNameValidator_onInvalidComponentName_returnsFalse() {
assertFalse(SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR.validate(
"rectangle"));
}
@Test
public void testNullableComponentNameValidator_onNullValue_returnsTrue() {
assertTrue(SettingsValidators.NULLABLE_COMPONENT_NAME_VALIDATOR.validate(null));
}
@Test
public void testLocaleValidator() {
assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate("en_US"));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment