diff options
Diffstat (limited to 'src/java/com/android/internal/telephony/MultiSimSettingController.java')
-rw-r--r-- | src/java/com/android/internal/telephony/MultiSimSettingController.java | 97 |
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) { |