Resolve the SIM call manager per subId

The SIM call manager used to be resolved based
on what the default voice subscription ID was.
This caused settings to be displayed for the
incorrect subscription. A new API has been added
that allows settings to query the SIM call manager
per subId.

Test: manual, unit testing
Bug: 131627085
Change-Id: I7699508429f7df7a138c24c4c7a6e9f1148b84da
This commit is contained in:
Brad Ebinger
2019-05-07 10:59:26 -07:00
parent 11b68bc420
commit 5caefbff3f
3 changed files with 16 additions and 12 deletions

View File

@@ -80,12 +80,16 @@ public class MobileNetworkUtils {
}
/**
* Returns true if Wifi calling is enabled for at least one phone.
* Returns true if Wifi calling is enabled for at least one subscription.
*/
public static boolean isWifiCallingEnabled(Context context) {
int phoneCount = context.getSystemService(TelephonyManager.class).getPhoneCount();
for (int i = 0; i < phoneCount; i++) {
if (isWifiCallingEnabled(context, i)) {
SubscriptionManager subManager = context.getSystemService(SubscriptionManager.class);
if (subManager == null) {
Log.e(TAG, "isWifiCallingEnabled: couldn't get system service.");
return false;
}
for (int subId : subManager.getActiveSubscriptionIdList()) {
if (isWifiCallingEnabled(context, subId)) {
return true;
}
}
@@ -93,11 +97,12 @@ public class MobileNetworkUtils {
}
/**
* Returns true if Wifi calling is enabled for the specific phone with id {@code phoneId}.
* Returns true if Wifi calling is enabled for the specific subscription with id {@code subId}.
*/
public static boolean isWifiCallingEnabled(Context context, int phoneId) {
public static boolean isWifiCallingEnabled(Context context, int subId) {
final PhoneAccountHandle simCallManager =
TelecomManager.from(context).getSimCallManager();
TelecomManager.from(context).getSimCallManagerForSubscription(subId);
final int phoneId = SubscriptionManager.getSlotIndex(subId);
boolean isWifiCallingEnabled;
if (simCallManager != null) {

View File

@@ -63,8 +63,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
@Override
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
SubscriptionManager.getPhoneId(subId))
&& MobileNetworkUtils.isWifiCallingEnabled(mContext, subId)
&& isVideoCallEnabled(subId)
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;

View File

@@ -68,7 +68,6 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
super(context, key);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSimCallManager = context.getSystemService(TelecomManager.class).getSimCallManager();
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
mEditableWfcRoamingMode = true;
mUseWfcHomeModeForRoaming = false;
@@ -77,8 +76,7 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
@Override
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& MobileNetworkUtils.isWifiCallingEnabled(mContext,
SubscriptionManager.getPhoneId(subId))
&& MobileNetworkUtils.isWifiCallingEnabled(mContext, subId)
? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
@@ -155,6 +153,8 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
mSubId = subId;
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
mSimCallManager = mContext.getSystemService(TelecomManager.class)
.getSimCallManagerForSubscription(mSubId);
if (mCarrierConfigManager != null) {
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
if (carrierConfig != null) {