summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/assisteddialing/ui
diff options
context:
space:
mode:
authorerfanian <erfanian@google.com>2017-12-04 15:50:59 -0800
committerCopybara-Service <copybara-piper@google.com>2017-12-04 15:52:03 -0800
commit7658f34ae01715d496573bf7e29e748cb5459f69 (patch)
treeda3e26b8b0f06771ddd3a36b61716d12a2dbb8b6 /java/com/android/dialer/assisteddialing/ui
parent9ffe71da47f4623e227102ca5fe231f280c6d32e (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')
-rw-r--r--java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml2
-rw-r--r--java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java76
-rw-r--r--java/com/android/dialer/assisteddialing/ui/res/values/strings.xml6
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>