Support confirmation of international calls while on WFC only.

Add new carrier config which enables a confirmation message when the user
dials an international number while on WFC only.

Add new @hide PhoneNumberUtils method which is used to determine if a
number dialed is an international number.

Test: Manual, unit.
Bug: 33272455
Change-Id: Ia7ffe10eee7d782ddc3355db616af0a48f19556e
This commit is contained in:
Tyler Gunn
2017-02-16 16:21:14 -08:00
parent 4211358c74
commit 662ae090a2
3 changed files with 48 additions and 0 deletions

View File

@@ -1266,6 +1266,14 @@ public class CarrierConfigManager {
public static final String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL =
"support_3gpp_call_forwarding_while_roaming_bool";
/**
* When {@code true}, the user will be notified when they attempt to place an international call
* when the call is placed using wifi calling.
* @hide
*/
public static final String KEY_NOTIFY_INTERNATIONAL_CALL_ON_WFC_BOOL =
"notify_international_call_on_wfc_bool";
/**
* Determine whether user edited tether APN (type dun) has effect
* {@code false} - Default. APN with dun type in telephony database has no effect.
@@ -1513,6 +1521,7 @@ public class CarrierConfigManager {
sDefaults.putStringArray(KEY_CARRIER_WIFI_STRING_ARRAY, null);
sDefaults.putInt(KEY_PREF_NETWORK_NOTIFICATION_DELAY_INT, -1);
sDefaults.putBoolean(KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL, true);
sDefaults.putBoolean(KEY_NOTIFY_INTERNATIONAL_CALL_ON_WFC_BOOL, false);
sDefaults.putBoolean(KEY_EDITABLE_TETHER_APN_BOOL, false);
sDefaults.putStringArray(KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY,
null);

View File

@@ -1437,6 +1437,30 @@ public class PhoneNumberUtils
return null;
}
/**
* Determines if a {@param phoneNumber} is international if dialed from
* {@param defaultCountryIso}.
*
* @param phoneNumber The phone number.
* @param defaultCountryIso The current country ISO.
* @return {@code true} if the number is international, {@code false} otherwise.
* @hide
*/
public static boolean isInternationalNumber(String phoneNumber, String defaultCountryIso) {
// If it starts with # or * its not international.
if (phoneNumber.startsWith("#") || phoneNumber.startsWith("*")) {
return false;
}
PhoneNumberUtil util = PhoneNumberUtil.getInstance();
try {
PhoneNumber pn = util.parseAndKeepRawInput(phoneNumber, defaultCountryIso);
return pn.getCountryCode() != util.getCountryCodeForRegion(defaultCountryIso);
} catch (NumberParseException e) {
return false;
}
}
/**
* Format a phone number.
* <p>

View File

@@ -819,6 +819,21 @@ public class TelephonyManager {
public static final String EVENT_DOWNGRADE_DATA_DISABLED =
"android.telephony.event.EVENT_DOWNGRADE_DATA_DISABLED";
/**
* {@link android.telecom.Connection} event used to indicate that the InCall UI should notify
* the user when an international call is placed while on WFC only.
* <p>
* Used when the carrier config value
* {@link CarrierConfigManager#KEY_NOTIFY_INTERNATIONAL_CALL_ON_WFC_BOOL} is true, the device
* is on WFC (VoLTE not available) and an international number is dialed.
* <p>
* Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}.
* The {@link Bundle} parameter is expected to be null when this connection event is used.
* @hide
*/
public static final String EVENT_NOTIFY_INTERNATIONAL_CALL_ON_WFC =
"android.telephony.event.EVENT_NOTIFY_INTERNATIONAL_CALL_ON_WFC";
/* Visual voicemail protocols */
/**