Merge "[Provider Model] Implement the carrner network selection"
This commit is contained in:
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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 */);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user