Add check on multisim modem capabilities.
Add check on static modem capabilities to check if the device can
support enablement of dual SIM mode.
Bug: 123537730
Test: Compilation, test application
Change-Id: I5c8fc3a86f79cf71d01dba20c2d1591f59b6ec58
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index bd824c4..0d15481 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -69,6 +69,7 @@
import android.telephony.ModemActivityInfo;
import android.telephony.NeighboringCellInfo;
import android.telephony.NetworkScanRequest;
+import android.telephony.PhoneCapability;
import android.telephony.PhoneNumberRange;
import android.telephony.RadioAccessFamily;
import android.telephony.Rlog;
@@ -158,7 +159,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -6599,20 +6599,38 @@
}
@Override
- public boolean isMultisimCarrierRestricted() {
- enforceReadPrivilegedPermission("isMultisimCarrierRestricted");
+ public boolean isMultisimSupported(String callingPackage) {
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(mApp,
+ getDefaultPhone().getSubId(), callingPackage, "isMultisimSupported")) {
+ return false;
+ }
final long identity = Binder.clearCallingIdentity();
try {
// If the device has less than 2 SIM cards, indicate that multisim is restricted.
int numPhysicalSlots = UiccController.getInstance().getUiccSlots().length;
if (numPhysicalSlots < 2) {
- loge("isMultisimCarrierRestricted: requires at least 2 cards");
- return true;
+ loge("isMultisimSupported: requires at least 2 cards");
+ return false;
+ }
+ // 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("isMultisimSupported: no static configuration available");
+ return false;
+ }
+ if (staticCapability.logicalModemList.size() < 2) {
+ loge("isMultisimSupported: maximum number of modem is < 2");
+ return false;
+ }
+ // Check if support of multiple SIMs is restricted by carrier
+ if (mTelephonySharedPreferences.getBoolean(PREF_MULTI_SIM_RESTRICTED, false)) {
+ return false;
}
- // Default value is false. Multi SIM is allowed unless explicitly restricted.
- return mTelephonySharedPreferences.getBoolean(PREF_MULTI_SIM_RESTRICTED, false);
+ return true;
} finally {
Binder.restoreCallingIdentity(identity);
}