diff options
author | erfanian <erfanian@google.com> | 2017-12-04 15:50:59 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-04 15:52:03 -0800 |
commit | 7658f34ae01715d496573bf7e29e748cb5459f69 (patch) | |
tree | da3e26b8b0f06771ddd3a36b61716d12a2dbb8b6 /java/com/android/dialer/assisteddialing/ui | |
parent | 9ffe71da47f4623e227102ca5fe231f280c6d32e (diff) |
Add filtration logic to Assisted Dialing Settings.
The filtration logic will only show countries
in the country picker if the feature is enabled
for those countries.
This will not cover the regressive case where
a user has already selected a default option,
but then the option is later removed. This
behavior is currently undefined.
Bug: 69274259
Test: unit tests
PiperOrigin-RevId: 177881199
Change-Id: I113f6d25249c42c1bd98383fd6ee0bc6a8c0e615
Diffstat (limited to 'java/com/android/dialer/assisteddialing/ui')
3 files changed, 77 insertions, 7 deletions
diff --git a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml index 6625dff07..724874750 100644 --- a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml +++ b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml @@ -13,7 +13,7 @@ limitations under the License. --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.dialer.assisteddialing"> + package="com.android.dialer.assisteddialing.ui"> <uses-sdk android:minSdkVersion="23" diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java index 05ca6d912..03418940a 100644 --- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java +++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java @@ -15,22 +15,53 @@ */ package com.android.dialer.assisteddialing.ui; +import android.annotation.TargetApi; +import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.SwitchPreference; import android.text.TextUtils; +import com.android.dialer.assisteddialing.ConcreteCreator; +import com.android.dialer.assisteddialing.CountryCodeProvider; +import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; +import com.google.auto.value.AutoValue; +import java.util.ArrayList; +import java.util.List; /** The setting for Assisted Dialing */ +@TargetApi(VERSION_CODES.N) +@SuppressWarnings("AndroidApiChecker") // Java 8 APIs public class AssistedDialingSettingFragment extends PreferenceFragment { + private CountryCodeProvider countryCodeProvider; + + @AutoValue + abstract static class DisplayNameAndCountryCodeTuple { + + static DisplayNameAndCountryCodeTuple create( + CharSequence countryDisplayName, CharSequence countryCode) { + return new AutoValue_AssistedDialingSettingFragment_DisplayNameAndCountryCodeTuple( + countryDisplayName, countryCode); + } + + // The user-readable name of the country. + abstract CharSequence countryDisplayname(); + + // The ISO 3166-2 country code of the country. + abstract CharSequence countryCode(); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + countryCodeProvider = + ConcreteCreator.getCountryCodeProvider(ConfigProviderBindings.get(getContext())); + // Load the preferences from an XML resource addPreferencesFromResource(R.xml.assisted_dialing_setting); SwitchPreference switchPref = @@ -41,6 +72,8 @@ public class AssistedDialingSettingFragment extends PreferenceFragment { (ListPreference) findPreference(getContext().getString(R.string.assisted_dialing_setting_cc_key)); + updateCountryChoices(countryChooserPref); + if (!TextUtils.isEmpty(countryChooserPref.getEntry())) { countryChooserPref.setSummary(countryChooserPref.getEntry()); } @@ -48,6 +81,49 @@ public class AssistedDialingSettingFragment extends PreferenceFragment { switchPref.setOnPreferenceChangeListener(this::logIfUserDisabledFeature); } + /** + * Filters the default entries in the country chooser by only showing those countries in which the + * feature in enabled. + */ + private void updateCountryChoices(ListPreference countryChooserPref) { + + List<DisplayNameAndCountryCodeTuple> defaultCountryChoices = + buildDefaultCountryChooserKeysAndValues(countryChooserPref); + + // Always include the default preference. + List<CharSequence> newKeys = new ArrayList<>(); + List<CharSequence> newValues = new ArrayList<>(); + newKeys.add(countryChooserPref.getEntries()[0]); + newValues.add(countryChooserPref.getEntryValues()[0]); + + for (DisplayNameAndCountryCodeTuple tuple : defaultCountryChoices) { + if (countryCodeProvider.isSupportedCountryCode(tuple.countryCode().toString())) { + newKeys.add(tuple.countryDisplayname()); + newValues.add(tuple.countryCode()); + } + } + + countryChooserPref.setEntries(newKeys.toArray(new CharSequence[newKeys.size()])); + countryChooserPref.setEntryValues(newValues.toArray(new CharSequence[newValues.size()])); + } + + private List<DisplayNameAndCountryCodeTuple> buildDefaultCountryChooserKeysAndValues( + ListPreference countryChooserPref) { + CharSequence[] keys = countryChooserPref.getEntries(); + CharSequence[] values = countryChooserPref.getEntryValues(); + + if (keys.length != values.length) { + throw new IllegalStateException("Unexpected mismatch in country chooser key/value size"); + } + + List<DisplayNameAndCountryCodeTuple> displayNamesandCountryCodes = new ArrayList<>(); + for (int i = 0; i < keys.length; i++) { + displayNamesandCountryCodes.add(DisplayNameAndCountryCodeTuple.create(keys[i], values[i])); + } + + return displayNamesandCountryCodes; + } + boolean updateListSummary(Preference pref, Object newValue) { ListPreference listPref = (ListPreference) pref; CharSequence[] entries = listPref.getEntries(); diff --git a/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml b/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml index 1dc778f59..3a81780a9 100644 --- a/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml +++ b/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml @@ -22,12 +22,6 @@ <!-- Label for a setting enabling assisted dialing switch preference--> <string name="assisted_dialing_setting_summary">Predict and add a country code when you call while traveling abroad</string> - <!-- Key for the assisted dialing setting toggle--> - <string name="assisted_dialing_setting_toggle_key" translatable="false">assisted_dialing_setting_toggle_key</string> - - <!-- Key for the assisted dialing home country setting--> - <string name="assisted_dialing_setting_cc_key" translatable="false">assisted_dialing_setting_cc_key</string> - <!-- Indicates the default state for the home country selector--> <string name="assisted_dialing_setting_cc_default_summary">Automatically detected</string> |