[Provider Model] Connect carrier network issue fix

- Need to check if the data is enabled on the second SIM in the case of
dual SIM.

Bug: 177411771
Test: manual test
Change-Id: Ieead7a4550628d5380b8d0150cfd7a67c47980ca
This commit is contained in:
Weng Su
2021-01-16 07:42:04 +00:00
parent 88ffca9af9
commit 99dbb43f0c
4 changed files with 36 additions and 10 deletions

View File

@@ -173,22 +173,31 @@ public class ProviderModelSlice extends WifiSlice {
if (!SubscriptionManager.isUsableSubscriptionId(defaultSubId)) { if (!SubscriptionManager.isUsableSubscriptionId(defaultSubId)) {
return; // No subscription - do nothing. return; // No subscription - do nothing.
} }
boolean requestConnectCarrier = !intent.hasExtra(EXTRA_TOGGLE_STATE);
// Enable the mobile data always if the user requests to connect to the carrier network.
boolean newState = requestConnectCarrier ? true
: intent.getBooleanExtra(EXTRA_TOGGLE_STATE, mHelper.isMobileDataEnabled());
MobileNetworkUtils.setMobileDataEnabled(mContext, defaultSubId, newState, boolean isToggleAction = intent.hasExtra(EXTRA_TOGGLE_STATE);
false /* disableOtherSubscriptions */); boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
mHelper.isMobileDataEnabled());
if (isToggleAction) {
// The ToggleAction is used to set mobile data enabled.
MobileNetworkUtils.setMobileDataEnabled(mContext, defaultSubId, newState,
false /* disableOtherSubscriptions */);
}
doCarrierNetworkAction(isToggleAction, newState);
}
private void doCarrierNetworkAction(boolean isToggleAction, boolean isDataEnabled) {
final NetworkProviderWorker worker = getWorker(); final NetworkProviderWorker worker = getWorker();
if (worker == null) { if (worker == null) {
return; return;
} }
if (requestConnectCarrier) {
if (isToggleAction) {
worker.setCarrierNetworkEnabled(isDataEnabled);
return;
}
if (MobileNetworkUtils.isMobileDataEnabled(mContext)) {
worker.connectCarrierNetwork(); worker.connectCarrierNetwork();
} else {
worker.setCarrierNetworkEnabled(newState);
} }
} }

View File

@@ -498,7 +498,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
@VisibleForTesting @VisibleForTesting
public void connectCarrierNetwork() { public void connectCarrierNetwork() {
if (mTelephonyManager == null || !mTelephonyManager.isDataEnabled()) { if (!MobileNetworkUtils.isMobileDataEnabled(mContext)) {
return; return;
} }
if (mWifiPickerTrackerHelper != null) { if (mWifiPickerTrackerHelper != null) {

View File

@@ -293,6 +293,22 @@ public class MobileNetworkUtils {
&& isCurrentCountrySupported(context))); && isCurrentCountrySupported(context)));
} }
/**
* Return {@code true} if mobile data is enabled
*/
public static boolean isMobileDataEnabled(Context context) {
final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
if (!telephonyManager.isDataEnabled()) {
// Check if the data is enabled on the second SIM in the case of dual SIM.
final TelephonyManager tmDefaultData = telephonyManager.createForSubscriptionId(
SubscriptionManager.getDefaultDataSubscriptionId());
if (tmDefaultData == null || !tmDefaultData.isDataEnabled()) {
return false;
}
}
return true;
}
/** /**
* Set whether to enable data for {@code subId}, also whether to disable data for other * Set whether to enable data for {@code subId}, also whether to disable data for other
* subscription * subscription

View File

@@ -371,6 +371,7 @@ public class ProviderModelSliceTest {
@Test @Test
public void onNotifyChange_intentPrimaryAction_shouldConnectCarrierNetwork() { public void onNotifyChange_intentPrimaryAction_shouldConnectCarrierNetwork() {
when(mTelephonyManager.isDataEnabled()).thenReturn(true);
Intent intent = mMockProviderModelSlice.getBroadcastIntent(mContext).getIntent(); Intent intent = mMockProviderModelSlice.getBroadcastIntent(mContext).getIntent();
mMockProviderModelSlice.onNotifyChange(intent); mMockProviderModelSlice.onNotifyChange(intent);