Reset invalid selected countries to the default value.
In some cases, we may revoke countries or make them
otherwise unavailable to assisted dialing.
In this case, we reset the preference back the the
default value, which is always the zeroth value.
Bug: 72322367
Test: new unit test
PiperOrigin-RevId: 183238476
Change-Id: Ib5cf200f6da04e332b6248b04057d5de0f64d01f
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index 932cc6d..f1ea4c9 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -140,6 +140,28 @@
countryChooserPref.setEntries(newKeys.toArray(new CharSequence[newKeys.size()]));
countryChooserPref.setEntryValues(newValues.toArray(new CharSequence[newValues.size()]));
+
+ if (!newValues.contains(countryChooserPref.getValue())) {
+ ameliorateInvalidSelectedValue(countryChooserPref);
+ }
+ }
+
+ /**
+ * Restore an invalid user selected value to the default value.
+ *
+ * <p>In the Assisted Dialing settings in Dialer, this state is possible when a user selected a
+ * country code, and then that country code was removed from our filtered list, typically via a
+ * change in the available countries provided by a server side flag.
+ *
+ * @param countryChooserPref The list preference to restore to default when an invalid value is
+ * detected.
+ */
+ private void ameliorateInvalidSelectedValue(ListPreference countryChooserPref) {
+ // Reset the preference value to the default value.
+ countryChooserPref.setValue(countryChooserPref.getEntryValues()[0].toString());
+ LogUtil.i(
+ "AssistedDialingSettingFragment.ameliorateInvalidSelectedValue",
+ "Reset the country chooser preference to the default value.");
}
private List<DisplayNameAndCountryCodeTuple> buildDefaultCountryChooserKeysAndValues(