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 | |
parent | 9ffe71da47f4623e227102ca5fe231f280c6d32e (diff) | |
parent | 7658f34ae01715d496573bf7e29e748cb5459f69 (diff) |
Merge "Add filtration logic to Assisted Dialing Settings."
8 files changed, 123 insertions, 9 deletions
diff --git a/java/com/android/dialer/assisteddialing/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/AndroidManifest.xml new file mode 100644 index 000000000..6625dff07 --- /dev/null +++ b/java/com/android/dialer/assisteddialing/AndroidManifest.xml @@ -0,0 +1,22 @@ +<!-- Copyright (C) 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.dialer.assisteddialing"> + + <uses-sdk + android:minSdkVersion="23" + android:targetSdkVersion="24"/> + +</manifest>
\ No newline at end of file diff --git a/java/com/android/dialer/assisteddialing/ConcreteCreator.java b/java/com/android/dialer/assisteddialing/ConcreteCreator.java index 8a5661e03..73817d7fc 100644 --- a/java/com/android/dialer/assisteddialing/ConcreteCreator.java +++ b/java/com/android/dialer/assisteddialing/ConcreteCreator.java @@ -25,7 +25,6 @@ import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.support.v4.os.UserManagerCompat; import android.telephony.TelephonyManager; -import com.android.dialer.assisteddialing.ui.R; import com.android.dialer.common.LogUtil; import com.android.dialer.configprovider.ConfigProvider; import com.android.dialer.configprovider.ConfigProviderBindings; diff --git a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java index b12b3ddc0..118696e9b 100644 --- a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java +++ b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java @@ -34,7 +34,7 @@ import java.util.stream.Collectors; /** A class to provide the appropriate country codes related to assisted dialing. */ @TargetApi(VERSION_CODES.N) @SuppressWarnings("AndroidApiChecker") // Java 8 APIs -final class CountryCodeProvider { +public final class CountryCodeProvider { // TODO(erfanian): Ensure the below standard is consistent between libphonenumber and the // platform. diff --git a/java/com/android/dialer/assisteddialing/res/values/strings.xml b/java/com/android/dialer/assisteddialing/res/values/strings.xml new file mode 100644 index 000000000..f9cb123e0 --- /dev/null +++ b/java/com/android/dialer/assisteddialing/res/values/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + <!-- 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> +</resources>
\ No newline at end of file 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> diff --git a/packages.mk b/packages.mk index c86e276ef..ce425a90f 100644 --- a/packages.mk +++ b/packages.mk @@ -8,6 +8,7 @@ LOCAL_AAPT_FLAGS := \ com.android.dialer.app \ com.android.dialer.app.manifests.activities \ com.android.dialer.app.voicemail.error \ + com.android.dialer.assisteddialing \ com.android.dialer.assisteddialing.ui \ com.android.dialer.backup \ com.android.dialer.binary.aosp.testing \ |