Add configurable emergency call number support
In some region, when user dials emergency numbers, the call will go to IVR system first and then to emergency center. This behavior causes delay to let consumer to get help from center. Due to region/operator requirements, some emergency numbers are required to be set-up as non emeregency numbers on device. On such device, coverting original number to emergency number is required under the conditions where only emergency call is allowed - e.g. no SIM. This patch implements this auto converting logic and its configurations. E.g. For Taiwan, 110 and 119 need to be converted to 112 under not in-service state. Bug: 28123861 Change-Id: I01b3072ae272c1af8d4a19b2fb6ae451b7268821
This commit is contained in:
@@ -2540,4 +2540,12 @@
|
||||
<!-- Verizon requires any SMS that starts with //VZWVVM to be treated as a VVM SMS-->
|
||||
<item>310004,310010,310012,310013,310590,310890,310910,311110,311270,311271,311272,311273,311274,311275,311276,311277,311278,311279,311280,311281,311282,311283,311284,311285,311286,311287,311288,311289,311390,311480,311481,311482,311483,311484,311485,311486,311487,311488,311489;^//VZWVVM.*</item>
|
||||
</string-array>
|
||||
<!-- This config is holding calling number conversion map - expected to convert to emergency
|
||||
number. Formats for this config as below:
|
||||
<item>[dialstring1],[dialstring2],[dialstring3]:[replacement]</item>
|
||||
|
||||
E.g. for Taiwan Type Approval, 110 and 119 should be converted to 112.
|
||||
<item>110,119:112</item>
|
||||
-->
|
||||
<string-array translatable="false" name="config_convert_to_emergency_number_map" />
|
||||
</resources>
|
||||
|
||||
@@ -2697,4 +2697,5 @@
|
||||
|
||||
<java-symbol type="drawable" name="ic_restart" />
|
||||
|
||||
<java-symbol type="array" name="config_convert_to_emergency_number_map" />
|
||||
</resources>
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.android.i18n.phonenumbers.ShortNumberUtil;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.location.CountryDetector;
|
||||
import android.net.Uri;
|
||||
@@ -3021,4 +3022,79 @@ public class PhoneNumberUtils
|
||||
return SubscriptionManager.getDefaultVoiceSubscriptionId();
|
||||
}
|
||||
//==== End of utility methods used only in compareStrictly() =====
|
||||
|
||||
|
||||
/*
|
||||
* The config held calling number conversion map, expected to convert to emergency number.
|
||||
*/
|
||||
private static final String[] CONVERT_TO_EMERGENCY_MAP = Resources.getSystem().getStringArray(
|
||||
com.android.internal.R.array.config_convert_to_emergency_number_map);
|
||||
/**
|
||||
* Check whether conversion to emergency number is enabled
|
||||
*
|
||||
* @return {@code true} when conversion to emergency numbers is enabled,
|
||||
* {@code false} otherwise
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static boolean isConvertToEmergencyNumberEnabled() {
|
||||
return CONVERT_TO_EMERGENCY_MAP != null && CONVERT_TO_EMERGENCY_MAP.length > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts to emergency number based on the conversion map.
|
||||
* The conversion map is declared as config_convert_to_emergency_number_map.
|
||||
*
|
||||
* Make sure {@link #isConvertToEmergencyNumberEnabled} is true before calling
|
||||
* this function.
|
||||
*
|
||||
* @return The converted emergency number if the number matches conversion map,
|
||||
* otherwise original number.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static String convertToEmergencyNumber(String number) {
|
||||
if (TextUtils.isEmpty(number)) {
|
||||
return number;
|
||||
}
|
||||
|
||||
String normalizedNumber = normalizeNumber(number);
|
||||
|
||||
// The number is already emergency number. Skip conversion.
|
||||
if (isEmergencyNumber(normalizedNumber)) {
|
||||
return number;
|
||||
}
|
||||
|
||||
for (String convertMap : CONVERT_TO_EMERGENCY_MAP) {
|
||||
if (DBG) log("convertToEmergencyNumber: " + convertMap);
|
||||
String[] entry = null;
|
||||
String[] filterNumbers = null;
|
||||
String convertedNumber = null;
|
||||
if (!TextUtils.isEmpty(convertMap)) {
|
||||
entry = convertMap.split(":");
|
||||
}
|
||||
if (entry != null && entry.length == 2) {
|
||||
convertedNumber = entry[1];
|
||||
if (!TextUtils.isEmpty(entry[0])) {
|
||||
filterNumbers = entry[0].split(",");
|
||||
}
|
||||
}
|
||||
// Skip if the format of entry is invalid
|
||||
if (TextUtils.isEmpty(convertedNumber) || filterNumbers == null
|
||||
|| filterNumbers.length == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (String filterNumber : filterNumbers) {
|
||||
if (DBG) log("convertToEmergencyNumber: filterNumber = " + filterNumber
|
||||
+ ", convertedNumber = " + convertedNumber);
|
||||
if (!TextUtils.isEmpty(filterNumber) && filterNumber.equals(normalizedNumber)) {
|
||||
if (DBG) log("convertToEmergencyNumber: Matched. Successfully converted to: "
|
||||
+ convertedNumber);
|
||||
return convertedNumber;
|
||||
}
|
||||
}
|
||||
}
|
||||
return number;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user