aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/internal/telephony/MultiSimSettingController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/android/internal/telephony/MultiSimSettingController.java')
-rw-r--r--src/java/com/android/internal/telephony/MultiSimSettingController.java97
1 files changed, 65 insertions, 32 deletions
diff --git a/src/java/com/android/internal/telephony/MultiSimSettingController.java b/src/java/com/android/internal/telephony/MultiSimSettingController.java
index 8488ab0359..aaeba23622 100644
--- a/src/java/com/android/internal/telephony/MultiSimSettingController.java
+++ b/src/java/com/android/internal/telephony/MultiSimSettingController.java
@@ -35,6 +35,7 @@ import android.annotation.NonNull;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Looper;
@@ -52,6 +53,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.util.ArrayUtils;
@@ -122,6 +124,7 @@ public class MultiSimSettingController extends Handler {
protected final Context mContext;
private final SubscriptionManagerService mSubscriptionManagerService;
+ private final @NonNull FeatureFlags mFeatureFlags;
// Keep a record of active primary (non-opportunistic) subscription list.
@NonNull private List<Integer> mPrimarySubList = new ArrayList<>();
@@ -201,10 +204,11 @@ public class MultiSimSettingController extends Handler {
/**
* Init instance of MultiSimSettingController.
*/
- public static MultiSimSettingController init(Context context) {
+ public static MultiSimSettingController init(Context context,
+ @NonNull FeatureFlags featureFlags) {
synchronized (MultiSimSettingController.class) {
if (sInstance == null) {
- sInstance = new MultiSimSettingController(context);
+ sInstance = new MultiSimSettingController(context, featureFlags);
} else {
Log.wtf(LOG_TAG, "init() called multiple times! sInstance = " + sInstance);
}
@@ -213,9 +217,10 @@ public class MultiSimSettingController extends Handler {
}
@VisibleForTesting
- public MultiSimSettingController(Context context) {
+ public MultiSimSettingController(Context context, @NonNull FeatureFlags featureFlags) {
mContext = context;
mSubscriptionManagerService = SubscriptionManagerService.getInstance();
+ mFeatureFlags = featureFlags;
// Initialize mCarrierConfigLoadedSubIds and register to listen to carrier config change.
TelephonyManager telephonyManager = ((TelephonyManager) mContext.getSystemService(
@@ -239,6 +244,24 @@ public class MultiSimSettingController extends Handler {
onCarrierConfigChanged(slotIndex, subId));
}
+ private boolean hasCalling() {
+ if (!mFeatureFlags.minimalTelephonyCdmCheck()) return true;
+ return mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_CALLING);
+ }
+
+ private boolean hasData() {
+ if (!mFeatureFlags.minimalTelephonyCdmCheck()) return true;
+ return mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_DATA);
+ }
+
+ private boolean hasMessaging() {
+ if (!mFeatureFlags.minimalTelephonyCdmCheck()) return true;
+ return mContext.getPackageManager().hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_MESSAGING);
+ }
+
/**
* Notify MOBILE_DATA of a subscription is changed.
*/
@@ -606,35 +629,43 @@ public class MultiSimSettingController extends Handler {
|| mActiveModemCount == 1)) {
int subId = mPrimarySubList.get(0);
if (DBG) log("updateDefaultValues: to only primary sub " + subId);
- mSubscriptionManagerService.setDefaultDataSubId(subId);
- mSubscriptionManagerService.setDefaultVoiceSubId(subId);
- mSubscriptionManagerService.setDefaultSmsSubId(subId);
+ if (hasData()) mSubscriptionManagerService.setDefaultDataSubId(subId);
+ if (hasCalling()) mSubscriptionManagerService.setDefaultVoiceSubId(subId);
+ if (hasMessaging()) mSubscriptionManagerService.setDefaultSmsSubId(subId);
sendDefaultSubConfirmedNotification(subId);
return;
}
if (DBG) log("updateDefaultValues: records: " + mPrimarySubList);
- boolean dataSelected, voiceSelected, smsSelected;
+ boolean dataSelected = false;
+ boolean voiceSelected = false;
+ boolean smsSelected = false;
- // Update default data subscription.
- if (DBG) log("updateDefaultValues: Update default data subscription");
- dataSelected = updateDefaultValue(mPrimarySubList,
- mSubscriptionManagerService.getDefaultDataSubId(),
- mSubscriptionManagerService::setDefaultDataSubId);
+ if (hasData()) {
+ // Update default data subscription.
+ if (DBG) log("updateDefaultValues: Update default data subscription");
+ dataSelected = updateDefaultValue(mPrimarySubList,
+ mSubscriptionManagerService.getDefaultDataSubId(),
+ mSubscriptionManagerService::setDefaultDataSubId);
+ }
- // Update default voice subscription.
- if (DBG) log("updateDefaultValues: Update default voice subscription");
- voiceSelected = updateDefaultValue(mPrimarySubList,
- mSubscriptionManagerService.getDefaultVoiceSubId(),
- mSubscriptionManagerService::setDefaultVoiceSubId);
+ if (hasCalling()) {
+ // Update default voice subscription.
+ if (DBG) log("updateDefaultValues: Update default voice subscription");
+ voiceSelected = updateDefaultValue(mPrimarySubList,
+ mSubscriptionManagerService.getDefaultVoiceSubId(),
+ mSubscriptionManagerService::setDefaultVoiceSubId);
+ }
- // Update default sms subscription.
- if (DBG) log("updateDefaultValues: Update default sms subscription");
- smsSelected = updateDefaultValue(mPrimarySubList,
- mSubscriptionManagerService.getDefaultSmsSubId(),
- mSubscriptionManagerService::setDefaultSmsSubId,
- mIsAskEverytimeSupportedForSms);
+ if (hasMessaging()) {
+ // Update default sms subscription.
+ if (DBG) log("updateDefaultValues: Update default sms subscription");
+ smsSelected = updateDefaultValue(mPrimarySubList,
+ mSubscriptionManagerService.getDefaultSmsSubId(),
+ mSubscriptionManagerService::setDefaultSmsSubId,
+ mIsAskEverytimeSupportedForSms);
+ }
boolean autoFallbackEnabled = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_voice_data_sms_auto_fallback);
@@ -1023,11 +1054,11 @@ public class MultiSimSettingController extends Handler {
int autoDefaultSubId = primarySubList.get(0);
- if ((primarySubList.size() == 1) && !smsSelected) {
+ if (hasMessaging() && (primarySubList.size() == 1) && !smsSelected) {
mSubscriptionManagerService.setDefaultSmsSubId(autoDefaultSubId);
}
- if ((primarySubList.size() == 1) && !voiceSelected) {
+ if (hasCalling() && (primarySubList.size() == 1) && !voiceSelected) {
mSubscriptionManagerService.setDefaultVoiceSubId(autoDefaultSubId);
}
@@ -1036,13 +1067,15 @@ public class MultiSimSettingController extends Handler {
log("User pref subId = " + userPrefDataSubId + " current dds " + defaultDataSubId
+ " next active subId " + autoDefaultSubId);
- // If earlier user selected DDS is now available, set that as DDS subId.
- if (primarySubList.contains(userPrefDataSubId)
- && SubscriptionManager.isValidSubscriptionId(userPrefDataSubId)
- && (defaultDataSubId != userPrefDataSubId)) {
- mSubscriptionManagerService.setDefaultDataSubId(userPrefDataSubId);
- } else if (!dataSelected) {
- mSubscriptionManagerService.setDefaultDataSubId(autoDefaultSubId);
+ if (hasData()) {
+ // If earlier user selected DDS is now available, set that as DDS subId.
+ if (primarySubList.contains(userPrefDataSubId)
+ && SubscriptionManager.isValidSubscriptionId(userPrefDataSubId)
+ && (defaultDataSubId != userPrefDataSubId)) {
+ mSubscriptionManagerService.setDefaultDataSubId(userPrefDataSubId);
+ } else if (!dataSelected) {
+ mSubscriptionManagerService.setDefaultDataSubId(autoDefaultSubId);
+ }
}
if (DBG) {