diff options
author | zachh <zachh@google.com> | 2017-10-15 03:12:11 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-10-15 03:12:11 +0000 |
commit | c65e72a5209b4704acf4e31d8fdd51fb9912fedc (patch) | |
tree | abe92880449fd62a812cbbef4fae354aa065dc18 /java/com/android/dialer/assisteddialing/Constraints.java | |
parent | df9439576695bb8e9aeb647849d4b0461af4b8b5 (diff) | |
parent | 4114f539e72fa7b3be26949a2b33aa8ce25a68ea (diff) |
Merge changes If86250b1,Ib2a01013
am: 4114f539e7
Change-Id: I7db988c15ae33c9335a534ed103f11aa437f3bfc
Diffstat (limited to 'java/com/android/dialer/assisteddialing/Constraints.java')
-rw-r--r-- | java/com/android/dialer/assisteddialing/Constraints.java | 89 |
1 files changed, 72 insertions, 17 deletions
diff --git a/java/com/android/dialer/assisteddialing/Constraints.java b/java/com/android/dialer/assisteddialing/Constraints.java index 023be1c4c..c4b5278cb 100644 --- a/java/com/android/dialer/assisteddialing/Constraints.java +++ b/java/com/android/dialer/assisteddialing/Constraints.java @@ -20,6 +20,7 @@ import android.annotation.TargetApi; import android.content.Context; import android.os.Build.VERSION_CODES; import android.support.annotation.NonNull; +import android.support.annotation.VisibleForTesting; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.util.ArraySet; @@ -28,10 +29,13 @@ import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.Set; +import java.util.StringTokenizer; import java.util.stream.Collectors; /** Ensures that a number is eligible for Assisted Dialing */ @@ -41,34 +45,85 @@ final class Constraints { private final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); private final Context context; + // TODO(erfanian): Ensure the below standard is consistent between libphonenumber and the + // platform. + // ISO 3166-1 alpha-2 Country Codes that are eligible for assisted dialing. + private static final List<String> DEFAULT_COUNTRY_CODES = + Arrays.asList( + "CA" /* Canada */, + "GB" /* United Kingdom */, + "JP" /* Japan */, + "MX" /* Mexico */, + "US" /* United States */); + + @VisibleForTesting final Set<String> supportedCountryCodes; + /** * Create a new instance of Constraints. * * @param context The context used to determine whether or not a number is an emergency number. + * @param configProviderCountryCodes A csv of supported country codes, e.g. "US,CA" */ - public Constraints(@NonNull Context context) { + public Constraints(@NonNull Context context, @NonNull String configProviderCountryCodes) { if (context == null) { throw new NullPointerException("Provided context cannot be null"); } this.context = context; + + if (configProviderCountryCodes == null) { + throw new NullPointerException("Provided configProviderCountryCodes cannot be null"); + } + + // We allow dynamic country support only in Dialer; this should be removed in the framework + // implementation. + // TODO(erfanian): Remove in the framework implementation, or add a service to provide these + // values to the framework. + supportedCountryCodes = + parseConfigProviderCountryCodes(configProviderCountryCodes) + .stream() + .map(v -> v.toUpperCase(Locale.US)) + .collect(Collectors.toCollection(ArraySet::new)); + LogUtil.i("Constraints.Constraints", "Using country codes: " + supportedCountryCodes); } - // TODO(erfanian): Ensure the below standard is consistent between libphonenumber and the - // platform. - // ISO 3166-1 alpha-2 Country Codes that are eligible for assisted dialing. - private final String[] supportedCountryCodeValues = - new String[] { - "CA" /* Canada */, - "GB" /* United Kingdom */, - "JP" /* Japan */, - "MX" /* Mexico */, - "US" /* United States */, - }; - - private final Set<String> supportedCountryCodes = - Arrays.stream(supportedCountryCodeValues) - .map(v -> v.toUpperCase(Locale.US)) - .collect(Collectors.toCollection(ArraySet::new)); + private List<String> parseConfigProviderCountryCodes(String configProviderCountryCodes) { + if (TextUtils.isEmpty(configProviderCountryCodes)) { + LogUtil.i( + "Constraints.parseConfigProviderCountryCodes", + "configProviderCountryCodes was empty, returning default"); + return DEFAULT_COUNTRY_CODES; + } + + StringTokenizer tokenizer = new StringTokenizer(configProviderCountryCodes, ","); + + if (tokenizer.countTokens() < 1) { + LogUtil.i( + "Constraints.parseConfigProviderCountryCodes", "insufficient provided country codes"); + return DEFAULT_COUNTRY_CODES; + } + + List<String> parsedCountryCodes = new ArrayList<>(); + while (tokenizer.hasMoreTokens()) { + String foundLocale = tokenizer.nextToken(); + if (foundLocale == null) { + LogUtil.i( + "Constraints.parseConfigProviderCountryCodes", + "Unexpected empty value, returning default."); + return DEFAULT_COUNTRY_CODES; + } + + if (foundLocale.length() != 2) { + LogUtil.i( + "Constraints.parseConfigProviderCountryCodes", + "Unexpected locale %s, returning default", + foundLocale); + return DEFAULT_COUNTRY_CODES; + } + + parsedCountryCodes.add(foundLocale); + } + return parsedCountryCodes; + } /** * Determines whether or not we think Assisted Dialing is possible given the provided parameters. |