Merge "Fix usage of obtainMessage()"
diff --git a/src/com/android/phone/NetworkSelectSetting.java b/src/com/android/phone/NetworkSelectSetting.java
index edbceb4..45478d9 100644
--- a/src/com/android/phone/NetworkSelectSetting.java
+++ b/src/com/android/phone/NetworkSelectSetting.java
@@ -31,7 +31,7 @@
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
-import android.telephony.NetworkRegistrationState;
+import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -382,7 +382,7 @@
* Config the connected network operator preference when the page was created. When user get
* into this page, the device might or might not have data connection.
* - If the device has data:
- * 1. use {@code ServiceState#getNetworkRegistrationStates()} to get the currently
+ * 1. use {@code ServiceState#getNetworkRegistrationInfoList()} to get the currently
* registered cellIdentity, wrap it into a CellInfo;
* 2. set the signal strength level as strong;
* 3. use {@link TelephonyManager#getNetworkOperatorName()} to get the title of the
@@ -396,10 +396,11 @@
if (mTelephonyManager.getDataState() == mTelephonyManager.DATA_CONNECTED) {
// Try to get the network registration states
ServiceState ss = mTelephonyManager.getServiceState();
- List<NetworkRegistrationState> networkList =
- ss.getNetworkRegistrationStates(AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
+ List<NetworkRegistrationInfo> networkList =
+ ss.getNetworkRegistrationInfoListForTransportType(
+ AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
if (networkList == null || networkList.size() == 0) {
- loge("getNetworkRegistrationStates return null");
+ loge("getNetworkRegistrationInfoList return null");
// Remove the connected network operators category
removeConnectedNetworkOperatorPreference();
return;
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index a1456c1..c04b639 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -6701,13 +6701,13 @@
}
@Override
- public void setMultisimCarrierRestriction(boolean isMultisimCarrierRestricted) {
+ public void setMultiSimCarrierRestriction(boolean isMultiSimCarrierRestricted) {
enforceModifyPermission();
final long identity = Binder.clearCallingIdentity();
try {
mTelephonySharedPreferences.edit()
- .putBoolean(PREF_MULTI_SIM_RESTRICTED, isMultisimCarrierRestricted)
+ .putBoolean(PREF_MULTI_SIM_RESTRICTED, isMultiSimCarrierRestricted)
.commit();
} finally {
Binder.restoreCallingIdentity(identity);
@@ -6715,45 +6715,47 @@
}
@Override
- public boolean isMultisimSupported(String callingPackage) {
+ @TelephonyManager.IsMultiSimSupportedResult
+ public int isMultiSimSupported(String callingPackage) {
if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(mApp,
- getDefaultPhone().getSubId(), callingPackage, "isMultisimSupported")) {
- return false;
+ getDefaultPhone().getSubId(), callingPackage, "isMultiSimSupported")) {
+ return TelephonyManager.MULTISIM_NOT_SUPPORTED_BY_HARDWARE;
}
final long identity = Binder.clearCallingIdentity();
try {
- return isMultisimSupportedInternal();
+ return isMultiSimSupportedInternal();
} finally {
Binder.restoreCallingIdentity(identity);
}
}
- private boolean isMultisimSupportedInternal() {
+ @TelephonyManager.IsMultiSimSupportedResult
+ private int isMultiSimSupportedInternal() {
// If the device has less than 2 SIM cards, indicate that multisim is restricted.
int numPhysicalSlots = UiccController.getInstance().getUiccSlots().length;
if (numPhysicalSlots < 2) {
- loge("isMultisimSupportedInternal: requires at least 2 cards");
- return false;
+ loge("isMultiSimSupportedInternal: requires at least 2 cards");
+ return TelephonyManager.MULTISIM_NOT_SUPPORTED_BY_HARDWARE;
}
// Check if the hardware supports multisim functionality. If usage of multisim is not
// supported by the modem, indicate that it is restricted.
PhoneCapability staticCapability =
mPhoneConfigurationManager.getStaticPhoneCapability();
if (staticCapability == null) {
- loge("isMultisimSupportedInternal: no static configuration available");
- return false;
+ loge("isMultiSimSupportedInternal: no static configuration available");
+ return TelephonyManager.MULTISIM_NOT_SUPPORTED_BY_HARDWARE;
}
if (staticCapability.logicalModemList.size() < 2) {
- loge("isMultisimSupportedInternal: maximum number of modem is < 2");
- return false;
+ loge("isMultiSimSupportedInternal: maximum number of modem is < 2");
+ return TelephonyManager.MULTISIM_NOT_SUPPORTED_BY_HARDWARE;
}
// Check if support of multiple SIMs is restricted by carrier
if (mTelephonySharedPreferences.getBoolean(PREF_MULTI_SIM_RESTRICTED, false)) {
- return false;
+ return TelephonyManager.MULTISIM_NOT_SUPPORTED_BY_CARRIER;
}
- return true;
+ return TelephonyManager.MULTISIM_ALLOWED;
}
/**
@@ -6775,7 +6777,7 @@
try {
//only proceed if multi-sim is not restricted
- if (!isMultisimSupportedInternal()) {
+ if (isMultiSimSupportedInternal() != TelephonyManager.MULTISIM_ALLOWED) {
loge("switchMultiSimConfig not possible. It is restricted or not supported.");
return;
}
diff --git a/src/com/android/phone/SpecialCharSequenceMgr.java b/src/com/android/phone/SpecialCharSequenceMgr.java
index 5a5d488..514b2c9 100644
--- a/src/com/android/phone/SpecialCharSequenceMgr.java
+++ b/src/com/android/phone/SpecialCharSequenceMgr.java
@@ -23,12 +23,19 @@
import android.content.Intent;
import android.provider.Settings;
import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.WindowManager;
+import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyCapabilities;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Helper class to listen for some magic dialpad character sequences
* that are handled specially by the Phone app.
@@ -185,6 +192,40 @@
return false;
}
+ private static IccCardConstants.State getSimState(int slotId, Context context) {
+ final TelephonyManager tele = TelephonyManager.from(context);
+ int simState = tele.getSimState(slotId);
+ IccCardConstants.State state;
+ try {
+ state = IccCardConstants.State.intToState(simState);
+ } catch (IllegalArgumentException ex) {
+ Log.w(TAG, "Unknown sim state: " + simState);
+ state = IccCardConstants.State.UNKNOWN;
+ }
+ return state;
+ }
+
+ private static int getNextSubIdForState(IccCardConstants.State state, Context context) {
+ SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
+ List<SubscriptionInfo> list = subscriptionManager.getActiveSubscriptionInfoList();
+ if (list == null) {
+ // getActiveSubscriptionInfoList was null callers expect an empty list.
+ list = new ArrayList<>();
+ }
+ int resultId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ int bestSlotId = Integer.MAX_VALUE; // Favor lowest slot first
+ for (int i = 0; i < list.size(); i++) {
+ final SubscriptionInfo info = list.get(i);
+ final int id = info.getSubscriptionId();
+ if (state == getSimState(info.getSimSlotIndex(), context)
+ && bestSlotId > info.getSimSlotIndex()) {
+ resultId = id;
+ bestSlotId = info.getSimSlotIndex();
+ }
+ }
+ return resultId;
+ }
+
static private boolean handlePinEntry(Context context, String input,
Activity pukInputActivity) {
// TODO: The string constants here should be removed in favor
@@ -193,7 +234,20 @@
if ((input.startsWith("**04") || input.startsWith("**05"))
&& input.endsWith("#")) {
PhoneGlobals app = PhoneGlobals.getInstance();
- Phone phone = PhoneGlobals.getPhone();
+ Phone phone;
+ int subId;
+ if (input.startsWith("**04")) {
+ subId = getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED, context);
+ } else {
+ subId = getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED, context);
+ }
+ if (SubscriptionManager.isValidSubscriptionId(subId)) {
+ log("get phone with subId: " + subId);
+ phone = PhoneGlobals.getPhone(subId);
+ } else {
+ log("get default phone");
+ phone = PhoneGlobals.getPhone();
+ }
boolean isMMIHandled = phone.handlePinMmi(input);
// if the PUK code is recognized then indicate to the
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 2cd62ff..fd7eeb2 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -518,6 +518,7 @@
}
private boolean isEmergencyNumberTestNumber(String number) {
+ number = PhoneNumberUtils.stripSeparators(number);
Map<Integer, List<EmergencyNumber>> list =
mTelephonyManagerProxy.getCurrentEmergencyNumberList();
// Do not worry about which subscription the test emergency call is on yet, only detect that