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) {
return;
}
final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
mHelper.isMobileDataEnabled());
final int defaultSubId = subscriptionManager.getDefaultDataSubscriptionId();
log("defaultSubId:" + defaultSubId);
if (!SubscriptionManager.isUsableSubscriptionId(defaultSubId)) {
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,
false /* disableOtherSubscriptions */);
final NetworkProviderWorker worker = getWorker();
if (worker == null) {
return;
}
if (requestConnectCarrier) {
worker.connectCarrierNetwork();
} else {
worker.setCarrierNetworkEnabled(newState);
}
}
@Override

View File

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

View File

@@ -36,6 +36,7 @@ import androidx.lifecycle.LifecycleRegistry;
import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settingslib.utils.ThreadUtils;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback;
import com.android.wifitrackerlib.WifiPickerTracker;
@@ -199,4 +200,18 @@ public class WifiScanWorker extends SliceBackgroundWorker<WifiSliceItem> impleme
}
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 org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import androidx.lifecycle.Lifecycle;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;
@@ -44,6 +47,8 @@ public class WifiScanWorkerTest {
private WifiScanWorker mWifiScanWorker;
@Mock
WifiPickerTracker mWifiPickerTracker;
@Mock
MergedCarrierEntry mMergedCarrierEntry;
@Before
public void setUp() {
@@ -51,6 +56,7 @@ public class WifiScanWorkerTest {
mWifiScanWorker = new WifiScanWorker(RuntimeEnvironment.application, WIFI_SLICE_URI);
mWifiScanWorker.mWifiPickerTracker = mWifiPickerTracker;
when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry);
}
@Test
@@ -102,4 +108,24 @@ public class WifiScanWorkerTest {
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;
import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -113,13 +115,14 @@ public class ProviderModelSliceTest {
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mMockNetworkProviderWorker = new MockNetworkProviderWorker(mContext,
PROVIDER_MODEL_SLICE_URI);
mMockNetworkProviderWorker = spy(new MockNetworkProviderWorker(mContext,
PROVIDER_MODEL_SLICE_URI));
mMockProviderModelSlice = new MockProviderModelSlice(mContext, mMockNetworkProviderWorker);
mListBuilder = spy(new ListBuilder(mContext, PROVIDER_MODEL_SLICE_URI,
ListBuilder.INFINITY).setAccentColor(-1));
when(mProviderModelSliceHelper.createListBuilder(PROVIDER_MODEL_SLICE_URI)).thenReturn(
mListBuilder);
when(mProviderModelSliceHelper.getSubscriptionManager()).thenReturn(mSubscriptionManager);
mWifiList = new ArrayList<>();
mMockNetworkProviderWorker.updateSelfResults(mWifiList);
@@ -330,4 +333,33 @@ public class ProviderModelSliceTest {
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();
}
}