Merge "[Provider Model] Implement the carrner network selection"

This commit is contained in:
Weng Su
2020-12-29 13:13:16 +00:00
committed by Android (Google) Code Review
5 changed files with 95 additions and 8 deletions

View File

@@ -165,16 +165,28 @@ public class ProviderModelSlice extends WifiSlice {
if (subscriptionManager == null) { if (subscriptionManager == null) {
return; return;
} }
final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
mHelper.isMobileDataEnabled());
final int defaultSubId = subscriptionManager.getDefaultDataSubscriptionId(); final int defaultSubId = subscriptionManager.getDefaultDataSubscriptionId();
log("defaultSubId:" + defaultSubId); log("defaultSubId:" + defaultSubId);
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, MobileNetworkUtils.setMobileDataEnabled(mContext, defaultSubId, newState,
false /* disableOtherSubscriptions */); false /* disableOtherSubscriptions */);
final NetworkProviderWorker worker = getWorker();
if (worker == null) {
return;
}
if (requestConnectCarrier) {
worker.connectCarrierNetwork();
} else {
worker.setCarrierNetworkEnabled(newState);
}
} }
@Override @Override

View File

@@ -131,14 +131,16 @@ public class ProviderModelSliceHelper {
e.printStackTrace(); e.printStackTrace();
} }
final IconCompat levelIcon = Utils.createIconWithDrawable(drawable); final IconCompat levelIcon = Utils.createIconWithDrawable(drawable);
final PendingIntent toggleAction = mSliceable.getBroadcastIntent(mContext); final PendingIntent rowIntent = mSliceable.getBroadcastIntent(mContext);
final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction, final SliceAction primaryAction = SliceAction.create(rowIntent,
levelIcon, ListBuilder.ICON_IMAGE, title);
final SliceAction toggleAction = SliceAction.createToggle(rowIntent,
"mobile_toggle" /* actionTitle */, isMobileDataEnabled()); "mobile_toggle" /* actionTitle */, isMobileDataEnabled());
final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder() final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
.setTitle(title) .setTitle(title)
.setTitleItem(levelIcon, ListBuilder.ICON_IMAGE) .setTitleItem(levelIcon, ListBuilder.ICON_IMAGE)
.addEndItem(toggleSliceAction) .addEndItem(toggleAction)
.setPrimaryAction(toggleSliceAction) .setPrimaryAction(primaryAction)
.setSubtitle(summary); .setSubtitle(summary);
return rowBuilder; return rowBuilder;
} }

View File

@@ -36,6 +36,7 @@ import androidx.lifecycle.LifecycleRegistry;
import com.android.settings.slices.SliceBackgroundWorker; import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback; import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback;
import com.android.wifitrackerlib.WifiPickerTracker; import com.android.wifitrackerlib.WifiPickerTracker;
@@ -199,4 +200,18 @@ public class WifiScanWorker extends SliceBackgroundWorker<WifiSliceItem> impleme
} }
super.updateResults(resultList); super.updateResults(resultList);
} }
public void setCarrierNetworkEnabled(boolean enable) {
final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry();
if (mergedCarrierEntry != null) {
mergedCarrierEntry.setEnabled(enable);
}
}
public void connectCarrierNetwork() {
final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry();
if (mergedCarrierEntry != null && mergedCarrierEntry.canConnect()) {
mergedCarrierEntry.connect(null /* ConnectCallback */);
}
}
} }

View File

@@ -20,11 +20,14 @@ import static com.android.settings.slices.CustomSliceRegistry.WIFI_SLICE_URI;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker; import com.android.wifitrackerlib.WifiPickerTracker;
@@ -44,6 +47,8 @@ public class WifiScanWorkerTest {
private WifiScanWorker mWifiScanWorker; private WifiScanWorker mWifiScanWorker;
@Mock @Mock
WifiPickerTracker mWifiPickerTracker; WifiPickerTracker mWifiPickerTracker;
@Mock
MergedCarrierEntry mMergedCarrierEntry;
@Before @Before
public void setUp() { public void setUp() {
@@ -51,6 +56,7 @@ public class WifiScanWorkerTest {
mWifiScanWorker = new WifiScanWorker(RuntimeEnvironment.application, WIFI_SLICE_URI); mWifiScanWorker = new WifiScanWorker(RuntimeEnvironment.application, WIFI_SLICE_URI);
mWifiScanWorker.mWifiPickerTracker = mWifiPickerTracker; mWifiScanWorker.mWifiPickerTracker = mWifiPickerTracker;
when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry);
} }
@Test @Test
@@ -102,4 +108,24 @@ public class WifiScanWorkerTest {
assertThat(mWifiScanWorker.getWifiEntry(key)).isEqualTo(reachableWifiEntry); assertThat(mWifiScanWorker.getWifiEntry(key)).isEqualTo(reachableWifiEntry);
} }
@Test
public void setCarrierNetworkEnabled_shouldCallMergedCarrierEntrySetEnabled() {
mWifiScanWorker.setCarrierNetworkEnabled(true);
verify(mMergedCarrierEntry).setEnabled(true);
mWifiScanWorker.setCarrierNetworkEnabled(false);
verify(mMergedCarrierEntry).setEnabled(false);
}
@Test
public void connectCarrierNetwork_shouldCallMergedCarrierEntryConnect() {
when(mMergedCarrierEntry.canConnect()).thenReturn(true);
mWifiScanWorker.connectCarrierNetwork();
verify(mMergedCarrierEntry).connect(any());
}
} }

View File

@@ -16,6 +16,8 @@
package com.android.settings.network; package com.android.settings.network;
import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@@ -113,13 +115,14 @@ public class ProviderModelSliceTest {
// Set-up specs for SliceMetadata. // Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mMockNetworkProviderWorker = new MockNetworkProviderWorker(mContext, mMockNetworkProviderWorker = spy(new MockNetworkProviderWorker(mContext,
PROVIDER_MODEL_SLICE_URI); PROVIDER_MODEL_SLICE_URI));
mMockProviderModelSlice = new MockProviderModelSlice(mContext, mMockNetworkProviderWorker); mMockProviderModelSlice = new MockProviderModelSlice(mContext, mMockNetworkProviderWorker);
mListBuilder = spy(new ListBuilder(mContext, PROVIDER_MODEL_SLICE_URI, mListBuilder = spy(new ListBuilder(mContext, PROVIDER_MODEL_SLICE_URI,
ListBuilder.INFINITY).setAccentColor(-1)); ListBuilder.INFINITY).setAccentColor(-1));
when(mProviderModelSliceHelper.createListBuilder(PROVIDER_MODEL_SLICE_URI)).thenReturn( when(mProviderModelSliceHelper.createListBuilder(PROVIDER_MODEL_SLICE_URI)).thenReturn(
mListBuilder); mListBuilder);
when(mProviderModelSliceHelper.getSubscriptionManager()).thenReturn(mSubscriptionManager);
mWifiList = new ArrayList<>(); mWifiList = new ArrayList<>();
mMockNetworkProviderWorker.updateSelfResults(mWifiList); mMockNetworkProviderWorker.updateSelfResults(mWifiList);
@@ -330,4 +333,33 @@ public class ProviderModelSliceTest {
return mNetworkProviderWorker; return mNetworkProviderWorker;
} }
} }
@Test
public void onNotifyChange_intentToggleActionOn_shouldSetCarrierNetworkEnabledTrue() {
Intent intent = mMockProviderModelSlice.getBroadcastIntent(mContext).getIntent();
intent.putExtra(EXTRA_TOGGLE_STATE, true);
mMockProviderModelSlice.onNotifyChange(intent);
verify(mMockNetworkProviderWorker).setCarrierNetworkEnabled(true);
}
@Test
public void onNotifyChange_intentToggleActionOff_shouldSetCarrierNetworkEnabledFalse() {
Intent intent = mMockProviderModelSlice.getBroadcastIntent(mContext).getIntent();
intent.putExtra(EXTRA_TOGGLE_STATE, false);
mMockProviderModelSlice.onNotifyChange(intent);
verify(mMockNetworkProviderWorker).setCarrierNetworkEnabled(false);
}
@Test
public void onNotifyChange_intentPrimaryAction_shouldConnectCarrierNetwork() {
Intent intent = mMockProviderModelSlice.getBroadcastIntent(mContext).getIntent();
mMockProviderModelSlice.onNotifyChange(intent);
verify(mMockNetworkProviderWorker).connectCarrierNetwork();
}
} }