diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2017-12-05 01:23:30 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-12-05 01:23:30 +0000 |
commit | 7370d93ade1d2b96020b6bc5cb31ba1b48fce70b (patch) | |
tree | da3e26b8b0f06771ddd3a36b61716d12a2dbb8b6 /java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java | |
parent | 9ffe71da47f4623e227102ca5fe231f280c6d32e (diff) | |
parent | 7658f34ae01715d496573bf7e29e748cb5459f69 (diff) |
Merge "Add filtration logic to Assisted Dialing Settings."
Diffstat (limited to 'java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java')
-rw-r--r-- | java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java | 76 |
1 files changed, 76 insertions, 0 deletions
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(); |