Treat the mdn as an additional voicemail number
Use carrier config to specify whether the carrier treats the mdn as an additonal voicemail number. Change-Id: I7192a3505da87d6b50a100e041d2b502cf37e113 Merged-In: I7192a3505da87d6b50a100e041d2b502cf37e113 Fix: 29145323 Test: build and flash on device
This commit is contained in:
@@ -65,6 +65,16 @@ public class CarrierConfigManager {
|
|||||||
public static final String
|
public static final String
|
||||||
KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
|
KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When checking if a given number is the voicemail number, if this flag is true
|
||||||
|
* then in addition to comparing the given number to the voicemail number, we also compare it
|
||||||
|
* to the mdn. If this flag is false, the given number is only compared to the voicemail number.
|
||||||
|
* By default this value is false.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL =
|
||||||
|
"mdn_is_additional_voicemail_number_bool";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag indicating whether the Phone app should provide a "Dismiss" button on the SIM network
|
* Flag indicating whether the Phone app should provide a "Dismiss" button on the SIM network
|
||||||
* unlock screen. The default value is true. If set to false, there will be *no way* to dismiss
|
* unlock screen. The default value is true. If set to false, there will be *no way* to dismiss
|
||||||
@@ -1052,6 +1062,7 @@ public class CarrierConfigManager {
|
|||||||
sDefaults.putBoolean(KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL, false);
|
sDefaults.putBoolean(KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL, false);
|
||||||
sDefaults.putBoolean(KEY_HIDE_SIM_LOCK_SETTINGS_BOOL, false);
|
sDefaults.putBoolean(KEY_HIDE_SIM_LOCK_SETTINGS_BOOL, false);
|
||||||
sDefaults.putBoolean(KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL, false);
|
sDefaults.putBoolean(KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL, false);
|
||||||
|
sDefaults.putBoolean(KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL, false);
|
||||||
sDefaults.putBoolean(KEY_OPERATOR_SELECTION_EXPAND_BOOL, true);
|
sDefaults.putBoolean(KEY_OPERATOR_SELECTION_EXPAND_BOOL, true);
|
||||||
sDefaults.putBoolean(KEY_PREFER_2G_BOOL, true);
|
sDefaults.putBoolean(KEY_PREFER_2G_BOOL, true);
|
||||||
sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false);
|
sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import android.database.Cursor;
|
|||||||
import android.location.CountryDetector;
|
import android.location.CountryDetector;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
|
import android.os.PersistableBundle;
|
||||||
import android.provider.Contacts;
|
import android.provider.Contacts;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import android.telecom.PhoneAccount;
|
import android.telecom.PhoneAccount;
|
||||||
@@ -2106,7 +2107,7 @@ public class PhoneNumberUtils
|
|||||||
* number provided by the RIL and SIM card. The caller must have
|
* number provided by the RIL and SIM card. The caller must have
|
||||||
* the READ_PHONE_STATE credential.
|
* the READ_PHONE_STATE credential.
|
||||||
*
|
*
|
||||||
* @param context a non-null {@link Context}.
|
* @param context {@link Context}.
|
||||||
* @param subId the subscription id of the SIM.
|
* @param subId the subscription id of the SIM.
|
||||||
* @param number the number to look up.
|
* @param number the number to look up.
|
||||||
* @return true if the number is in the list of voicemail. False
|
* @return true if the number is in the list of voicemail. False
|
||||||
@@ -2115,25 +2116,54 @@ public class PhoneNumberUtils
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static boolean isVoiceMailNumber(Context context, int subId, String number) {
|
public static boolean isVoiceMailNumber(Context context, int subId, String number) {
|
||||||
String vmNumber;
|
String vmNumber, mdn;
|
||||||
try {
|
try {
|
||||||
final TelephonyManager tm;
|
final TelephonyManager tm;
|
||||||
if (context == null) {
|
if (context == null) {
|
||||||
tm = TelephonyManager.getDefault();
|
tm = TelephonyManager.getDefault();
|
||||||
|
if (DBG) log("isVoiceMailNumber: default tm");
|
||||||
} else {
|
} else {
|
||||||
tm = TelephonyManager.from(context);
|
tm = TelephonyManager.from(context);
|
||||||
|
if (DBG) log("isVoiceMailNumber: tm from context");
|
||||||
}
|
}
|
||||||
vmNumber = tm.getVoiceMailNumber(subId);
|
vmNumber = tm.getVoiceMailNumber(subId);
|
||||||
|
mdn = tm.getLine1Number(subId);
|
||||||
|
if (DBG) log("isVoiceMailNumber: mdn=" + mdn + ", vmNumber=" + vmNumber
|
||||||
|
+ ", number=" + number);
|
||||||
} catch (SecurityException ex) {
|
} catch (SecurityException ex) {
|
||||||
|
if (DBG) log("isVoiceMailNumber: SecurityExcpetion caught");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Strip the separators from the number before comparing it
|
// Strip the separators from the number before comparing it
|
||||||
// to the list.
|
// to the list.
|
||||||
number = extractNetworkPortionAlt(number);
|
number = extractNetworkPortionAlt(number);
|
||||||
|
if (TextUtils.isEmpty(number)) {
|
||||||
|
if (DBG) log("isVoiceMailNumber: number is empty after stripping");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// compare tolerates null so we need to make sure that we
|
// check if the carrier considers MDN to be an additional voicemail number
|
||||||
// don't return true when both are null.
|
boolean compareWithMdn = false;
|
||||||
return !TextUtils.isEmpty(number) && compare(number, vmNumber);
|
if (context != null) {
|
||||||
|
CarrierConfigManager configManager = (CarrierConfigManager)
|
||||||
|
context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
|
||||||
|
if (configManager != null) {
|
||||||
|
PersistableBundle b = configManager.getConfigForSubId(subId);
|
||||||
|
if (b != null) {
|
||||||
|
compareWithMdn = b.getBoolean(CarrierConfigManager.
|
||||||
|
KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL);
|
||||||
|
if (DBG) log("isVoiceMailNumber: compareWithMdn=" + compareWithMdn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (compareWithMdn) {
|
||||||
|
if (DBG) log("isVoiceMailNumber: treating mdn as additional vm number");
|
||||||
|
return compare(number, vmNumber) || compare(number, mdn);
|
||||||
|
} else {
|
||||||
|
if (DBG) log("isVoiceMailNumber: returning regular compare");
|
||||||
|
return compare(number, vmNumber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -438,7 +438,7 @@ public class CallerInfoAsyncQuery {
|
|||||||
// check to see if these are recognized numbers, and use shortcuts if we can.
|
// check to see if these are recognized numbers, and use shortcuts if we can.
|
||||||
if (PhoneNumberUtils.isLocalEmergencyNumber(context, number)) {
|
if (PhoneNumberUtils.isLocalEmergencyNumber(context, number)) {
|
||||||
cw.event = EVENT_EMERGENCY_NUMBER;
|
cw.event = EVENT_EMERGENCY_NUMBER;
|
||||||
} else if (PhoneNumberUtils.isVoiceMailNumber(subId, number)) {
|
} else if (PhoneNumberUtils.isVoiceMailNumber(context, subId, number)) {
|
||||||
cw.event = EVENT_VOICEMAIL_NUMBER;
|
cw.event = EVENT_VOICEMAIL_NUMBER;
|
||||||
} else {
|
} else {
|
||||||
cw.event = EVENT_NEW_QUERY;
|
cw.event = EVENT_NEW_QUERY;
|
||||||
|
|||||||
Reference in New Issue
Block a user