[Provider Model] Carrie Wi-Fi offload toggle request (panel)
- Do not set Carrier Network together when setting Mobile Data, if carrner network provision enabled. Bug: 182324921 Test: manual test atest -c ProviderModelSliceTest make RunSettingsRoboTests ROBOTEST_FILTER=WifiScanWorkerTest Change-Id: Ic8b77fd7b43372f077ba1c8be8fd9a7c3bcff197
This commit is contained in:
@@ -182,18 +182,18 @@ public class ProviderModelSlice extends WifiSlice {
|
|||||||
|
|
||||||
final boolean isDataEnabled =
|
final boolean isDataEnabled =
|
||||||
isToggleAction ? newState : MobileNetworkUtils.isMobileDataEnabled(mContext);
|
isToggleAction ? newState : MobileNetworkUtils.isMobileDataEnabled(mContext);
|
||||||
doCarrierNetworkAction(isToggleAction, isDataEnabled);
|
doCarrierNetworkAction(isToggleAction, isDataEnabled, defaultSubId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void doCarrierNetworkAction(boolean isToggleAction, boolean isDataEnabled) {
|
void doCarrierNetworkAction(boolean isToggleAction, boolean isDataEnabled, int subId) {
|
||||||
final NetworkProviderWorker worker = getWorker();
|
final NetworkProviderWorker worker = getWorker();
|
||||||
if (worker == null) {
|
if (worker == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isToggleAction) {
|
if (isToggleAction) {
|
||||||
worker.setCarrierNetworkEnabled(isDataEnabled);
|
worker.setCarrierNetworkEnabledIfNeeded(isDataEnabled, subId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,10 +21,6 @@ import static com.android.settings.wifi.slice.WifiSlice.DEFAULT_EXPANDED_ROW_COU
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.HandlerThread;
|
|
||||||
import android.os.Process;
|
|
||||||
import android.os.SimpleClock;
|
|
||||||
import android.os.SystemClock;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
@@ -32,16 +28,12 @@ import androidx.lifecycle.Lifecycle;
|
|||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.lifecycle.LifecycleRegistry;
|
import androidx.lifecycle.LifecycleRegistry;
|
||||||
|
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
|
||||||
import com.android.settings.slices.SliceBackgroundWorker;
|
import com.android.settings.slices.SliceBackgroundWorker;
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settings.wifi.WifiPickerTrackerHelper;
|
||||||
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;
|
||||||
|
|
||||||
import java.time.Clock;
|
|
||||||
import java.time.ZoneOffset;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -53,40 +45,19 @@ public class WifiScanWorker extends SliceBackgroundWorker<WifiSliceItem> impleme
|
|||||||
|
|
||||||
private static final String TAG = "WifiScanWorker";
|
private static final String TAG = "WifiScanWorker";
|
||||||
|
|
||||||
// Max age of tracked WifiEntries.
|
|
||||||
private static final long MAX_SCAN_AGE_MILLIS = 15_000;
|
|
||||||
// Interval between initiating WifiPickerTracker scans.
|
|
||||||
private static final long SCAN_INTERVAL_MILLIS = 10_000;
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final LifecycleRegistry mLifecycleRegistry;
|
final LifecycleRegistry mLifecycleRegistry;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected WifiPickerTracker mWifiPickerTracker;
|
protected WifiPickerTracker mWifiPickerTracker;
|
||||||
// Worker thread used for WifiPickerTracker work
|
protected WifiPickerTrackerHelper mWifiPickerTrackerHelper;
|
||||||
private final HandlerThread mWorkerThread;
|
|
||||||
|
|
||||||
public WifiScanWorker(Context context, Uri uri) {
|
public WifiScanWorker(Context context, Uri uri) {
|
||||||
super(context, uri);
|
super(context, uri);
|
||||||
|
|
||||||
mLifecycleRegistry = new LifecycleRegistry(this);
|
mLifecycleRegistry = new LifecycleRegistry(this);
|
||||||
|
|
||||||
mWorkerThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
|
mWifiPickerTrackerHelper = new WifiPickerTrackerHelper(mLifecycleRegistry, context, this);
|
||||||
mWorkerThread.start();
|
mWifiPickerTracker = mWifiPickerTrackerHelper.getWifiPickerTracker();
|
||||||
final Clock elapsedRealtimeClock = new SimpleClock(ZoneOffset.UTC) {
|
|
||||||
@Override
|
|
||||||
public long millis() {
|
|
||||||
return SystemClock.elapsedRealtime();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mWifiPickerTracker = FeatureFactory.getFactory(context)
|
|
||||||
.getWifiTrackerLibProvider()
|
|
||||||
.createWifiPickerTracker(getLifecycle(), context,
|
|
||||||
ThreadUtils.getUiThreadHandler(),
|
|
||||||
mWorkerThread.getThreadHandler(),
|
|
||||||
elapsedRealtimeClock,
|
|
||||||
MAX_SCAN_AGE_MILLIS,
|
|
||||||
SCAN_INTERVAL_MILLIS,
|
|
||||||
this);
|
|
||||||
|
|
||||||
mLifecycleRegistry.markState(Lifecycle.State.INITIALIZED);
|
mLifecycleRegistry.markState(Lifecycle.State.INITIALIZED);
|
||||||
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
|
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
|
||||||
@@ -108,7 +79,6 @@ public class WifiScanWorker extends SliceBackgroundWorker<WifiSliceItem> impleme
|
|||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
mLifecycleRegistry.markState(Lifecycle.State.DESTROYED);
|
mLifecycleRegistry.markState(Lifecycle.State.DESTROYED);
|
||||||
mWorkerThread.quit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -199,17 +169,15 @@ public class WifiScanWorker extends SliceBackgroundWorker<WifiSliceItem> impleme
|
|||||||
super.updateResults(resultList);
|
super.updateResults(resultList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCarrierNetworkEnabled(boolean enable) {
|
/** Enables/disables the carrier network if the carrier network provision disabled */
|
||||||
final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry();
|
public void setCarrierNetworkEnabledIfNeeded(boolean enabled, int subId) {
|
||||||
if (mergedCarrierEntry != null) {
|
if (!mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(subId)) {
|
||||||
mergedCarrierEntry.setEnabled(enable);
|
mWifiPickerTrackerHelper.setCarrierNetworkEnabled(enabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Connect to the carrier network */
|
||||||
public void connectCarrierNetwork() {
|
public void connectCarrierNetwork() {
|
||||||
final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry();
|
mWifiPickerTrackerHelper.connectCarrierNetwork(null /* ConnectCallback */);
|
||||||
if (mergedCarrierEntry != null && mergedCarrierEntry.canConnect()) {
|
|
||||||
mergedCarrierEntry.connect(null /* ConnectCallback */);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,12 +22,13 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.verify;
|
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.settings.wifi.WifiPickerTrackerHelper;
|
||||||
import com.android.wifitrackerlib.WifiEntry;
|
import com.android.wifitrackerlib.WifiEntry;
|
||||||
import com.android.wifitrackerlib.WifiPickerTracker;
|
import com.android.wifitrackerlib.WifiPickerTracker;
|
||||||
|
|
||||||
@@ -44,11 +45,13 @@ import java.util.Arrays;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class WifiScanWorkerTest {
|
public class WifiScanWorkerTest {
|
||||||
|
|
||||||
|
private static final int SUB_ID = 2;
|
||||||
|
|
||||||
private WifiScanWorker mWifiScanWorker;
|
private WifiScanWorker mWifiScanWorker;
|
||||||
@Mock
|
@Mock
|
||||||
WifiPickerTracker mWifiPickerTracker;
|
WifiPickerTracker mWifiPickerTracker;
|
||||||
@Mock
|
@Mock
|
||||||
MergedCarrierEntry mMergedCarrierEntry;
|
WifiPickerTrackerHelper mWifiPickerTrackerHelper;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -56,7 +59,8 @@ 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);
|
mWifiScanWorker.mWifiPickerTrackerHelper = mWifiPickerTrackerHelper;
|
||||||
|
when(mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(SUB_ID)).thenReturn(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -110,22 +114,33 @@ public class WifiScanWorkerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setCarrierNetworkEnabled_shouldCallMergedCarrierEntrySetEnabled() {
|
public void setCarrierNetworkEnabledIfNeeded_shouldSetCarrierNetworkEnabled() {
|
||||||
mWifiScanWorker.setCarrierNetworkEnabled(true);
|
mWifiScanWorker.setCarrierNetworkEnabledIfNeeded(true, SUB_ID);
|
||||||
|
|
||||||
verify(mMergedCarrierEntry).setEnabled(true);
|
verify(mWifiPickerTrackerHelper).setCarrierNetworkEnabled(true);
|
||||||
|
|
||||||
mWifiScanWorker.setCarrierNetworkEnabled(false);
|
mWifiScanWorker.setCarrierNetworkEnabledIfNeeded(false, SUB_ID);
|
||||||
|
|
||||||
verify(mMergedCarrierEntry).setEnabled(false);
|
verify(mWifiPickerTrackerHelper).setCarrierNetworkEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void connectCarrierNetwork_shouldCallMergedCarrierEntryConnect() {
|
public void setCarrierNetworkEnabledIfNeeded_enabledProvision_neverSetCarrierNetworkEnabled() {
|
||||||
when(mMergedCarrierEntry.canConnect()).thenReturn(true);
|
when(mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(SUB_ID)).thenReturn(true);
|
||||||
|
|
||||||
|
mWifiScanWorker.setCarrierNetworkEnabledIfNeeded(true, SUB_ID);
|
||||||
|
|
||||||
|
verify(mWifiPickerTrackerHelper, never()).setCarrierNetworkEnabled(true);
|
||||||
|
|
||||||
|
mWifiScanWorker.setCarrierNetworkEnabledIfNeeded(false, SUB_ID);
|
||||||
|
|
||||||
|
verify(mWifiPickerTrackerHelper, never()).setCarrierNetworkEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void connectCarrierNetwork_shouldConnectCarrierNetwork() {
|
||||||
mWifiScanWorker.connectCarrierNetwork();
|
mWifiScanWorker.connectCarrierNetwork();
|
||||||
|
|
||||||
verify(mMergedCarrierEntry).connect(any());
|
verify(mWifiPickerTrackerHelper).connectCarrierNetwork(any());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -70,6 +70,7 @@ public class ProviderModelSliceTest {
|
|||||||
private static final Uri PROVIDER_MODEL_SLICE_URI =
|
private static final Uri PROVIDER_MODEL_SLICE_URI =
|
||||||
Uri.parse("content://com.android.settings.slices/action/provider_model");
|
Uri.parse("content://com.android.settings.slices/action/provider_model");
|
||||||
private static final int MOCK_SLICE_LEVEL = 3;
|
private static final int MOCK_SLICE_LEVEL = 3;
|
||||||
|
private static final int SUB_ID = 2;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private MockProviderModelSlice mMockProviderModelSlice;
|
private MockProviderModelSlice mMockProviderModelSlice;
|
||||||
@@ -359,23 +360,23 @@ public class ProviderModelSliceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void doCarrierNetworkAction_toggleActionSetDataEnabled_setCarrierNetworkEnabledTrue() {
|
public void doCarrierNetworkAction_toggleActionSetDataEnabled_setCarrierNetworkEnabledTrue() {
|
||||||
mMockProviderModelSlice.doCarrierNetworkAction(true /* isToggleAction */,
|
mMockProviderModelSlice.doCarrierNetworkAction(true /* isToggleAction */,
|
||||||
true /* isDataEnabled */);
|
true /* isDataEnabled */, SUB_ID);
|
||||||
|
|
||||||
verify(mMockNetworkProviderWorker).setCarrierNetworkEnabled(true);
|
verify(mMockNetworkProviderWorker).setCarrierNetworkEnabledIfNeeded(true, SUB_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doCarrierNetworkAction_toggleActionSetDataDisabled_setCarrierNetworkEnabledFalse() {
|
public void doCarrierNetworkAction_toggleActionSetDataDisabled_setCarrierNetworkEnabledFalse() {
|
||||||
mMockProviderModelSlice.doCarrierNetworkAction(true /* isToggleAction */,
|
mMockProviderModelSlice.doCarrierNetworkAction(true /* isToggleAction */,
|
||||||
false /* isDataEnabled */);
|
false /* isDataEnabled */, SUB_ID);
|
||||||
|
|
||||||
verify(mMockNetworkProviderWorker).setCarrierNetworkEnabled(false);
|
verify(mMockNetworkProviderWorker).setCarrierNetworkEnabledIfNeeded(false, SUB_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doCarrierNetworkAction_primaryActionAndDataEnabled_connectCarrierNetwork() {
|
public void doCarrierNetworkAction_primaryActionAndDataEnabled_connectCarrierNetwork() {
|
||||||
mMockProviderModelSlice.doCarrierNetworkAction(false /* isToggleAction */,
|
mMockProviderModelSlice.doCarrierNetworkAction(false /* isToggleAction */,
|
||||||
true /* isDataEnabled */);
|
true /* isDataEnabled */, SUB_ID);
|
||||||
|
|
||||||
verify(mMockNetworkProviderWorker).connectCarrierNetwork();
|
verify(mMockNetworkProviderWorker).connectCarrierNetwork();
|
||||||
}
|
}
|
||||||
@@ -383,7 +384,7 @@ public class ProviderModelSliceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void doCarrierNetworkAction_primaryActionAndDataDisabled_notConnectCarrierNetwork() {
|
public void doCarrierNetworkAction_primaryActionAndDataDisabled_notConnectCarrierNetwork() {
|
||||||
mMockProviderModelSlice.doCarrierNetworkAction(false /* isToggleAction */,
|
mMockProviderModelSlice.doCarrierNetworkAction(false /* isToggleAction */,
|
||||||
false /* isDataEnabled */);
|
false /* isDataEnabled */, SUB_ID);
|
||||||
|
|
||||||
verify(mMockNetworkProviderWorker, never()).connectCarrierNetwork();
|
verify(mMockNetworkProviderWorker, never()).connectCarrierNetwork();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user