From a320fb12a1e8eb1243b5457b163bbeb0da5a4364 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Tue, 20 Apr 2021 22:27:44 +0800 Subject: [PATCH] [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 --- .../settings/network/ProviderModelSlice.java | 6 +-- .../settings/wifi/slice/WifiScanWorker.java | 52 ++++--------------- .../wifi/slice/WifiScanWorkerTest.java | 37 +++++++++---- .../network/ProviderModelSliceTest.java | 13 ++--- 4 files changed, 46 insertions(+), 62 deletions(-) diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java index beb74890d0b..3d4c4de8004 100644 --- a/src/com/android/settings/network/ProviderModelSlice.java +++ b/src/com/android/settings/network/ProviderModelSlice.java @@ -182,18 +182,18 @@ public class ProviderModelSlice extends WifiSlice { final boolean isDataEnabled = isToggleAction ? newState : MobileNetworkUtils.isMobileDataEnabled(mContext); - doCarrierNetworkAction(isToggleAction, isDataEnabled); + doCarrierNetworkAction(isToggleAction, isDataEnabled, defaultSubId); } @VisibleForTesting - void doCarrierNetworkAction(boolean isToggleAction, boolean isDataEnabled) { + void doCarrierNetworkAction(boolean isToggleAction, boolean isDataEnabled, int subId) { final NetworkProviderWorker worker = getWorker(); if (worker == null) { return; } if (isToggleAction) { - worker.setCarrierNetworkEnabled(isDataEnabled); + worker.setCarrierNetworkEnabledIfNeeded(isDataEnabled, subId); return; } diff --git a/src/com/android/settings/wifi/slice/WifiScanWorker.java b/src/com/android/settings/wifi/slice/WifiScanWorker.java index 78b0d33a89a..4f1f64dd060 100644 --- a/src/com/android/settings/wifi/slice/WifiScanWorker.java +++ b/src/com/android/settings/wifi/slice/WifiScanWorker.java @@ -21,10 +21,6 @@ import static com.android.settings.wifi.slice.WifiSlice.DEFAULT_EXPANDED_ROW_COU import android.content.Context; import android.net.Uri; 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 androidx.annotation.VisibleForTesting; @@ -32,16 +28,12 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; -import com.android.settings.overlay.FeatureFactory; import com.android.settings.slices.SliceBackgroundWorker; -import com.android.settingslib.utils.ThreadUtils; -import com.android.wifitrackerlib.MergedCarrierEntry; +import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback; import com.android.wifitrackerlib.WifiPickerTracker; -import java.time.Clock; -import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; @@ -53,40 +45,19 @@ public class WifiScanWorker extends SliceBackgroundWorker impleme 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 final LifecycleRegistry mLifecycleRegistry; @VisibleForTesting protected WifiPickerTracker mWifiPickerTracker; - // Worker thread used for WifiPickerTracker work - private final HandlerThread mWorkerThread; + protected WifiPickerTrackerHelper mWifiPickerTrackerHelper; public WifiScanWorker(Context context, Uri uri) { super(context, uri); mLifecycleRegistry = new LifecycleRegistry(this); - mWorkerThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND); - mWorkerThread.start(); - 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); + mWifiPickerTrackerHelper = new WifiPickerTrackerHelper(mLifecycleRegistry, context, this); + mWifiPickerTracker = mWifiPickerTrackerHelper.getWifiPickerTracker(); mLifecycleRegistry.markState(Lifecycle.State.INITIALIZED); mLifecycleRegistry.markState(Lifecycle.State.CREATED); @@ -108,7 +79,6 @@ public class WifiScanWorker extends SliceBackgroundWorker impleme @Override public void close() { mLifecycleRegistry.markState(Lifecycle.State.DESTROYED); - mWorkerThread.quit(); } @Override @@ -199,17 +169,15 @@ public class WifiScanWorker extends SliceBackgroundWorker impleme super.updateResults(resultList); } - public void setCarrierNetworkEnabled(boolean enable) { - final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry(); - if (mergedCarrierEntry != null) { - mergedCarrierEntry.setEnabled(enable); + /** Enables/disables the carrier network if the carrier network provision disabled */ + public void setCarrierNetworkEnabledIfNeeded(boolean enabled, int subId) { + if (!mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(subId)) { + mWifiPickerTrackerHelper.setCarrierNetworkEnabled(enabled); } } + /** Connect to the carrier network */ public void connectCarrierNetwork() { - final MergedCarrierEntry mergedCarrierEntry = mWifiPickerTracker.getMergedCarrierEntry(); - if (mergedCarrierEntry != null && mergedCarrierEntry.canConnect()) { - mergedCarrierEntry.connect(null /* ConnectCallback */); - } + mWifiPickerTrackerHelper.connectCarrierNetwork(null /* ConnectCallback */); } } diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiScanWorkerTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiScanWorkerTest.java index 2a8d26538e3..9d57d4a64a8 100644 --- a/tests/robotests/src/com/android/settings/wifi/slice/WifiScanWorkerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiScanWorkerTest.java @@ -22,12 +22,13 @@ 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.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import androidx.lifecycle.Lifecycle; -import com.android.wifitrackerlib.MergedCarrierEntry; +import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; @@ -44,11 +45,13 @@ import java.util.Arrays; @RunWith(RobolectricTestRunner.class) public class WifiScanWorkerTest { + private static final int SUB_ID = 2; + private WifiScanWorker mWifiScanWorker; @Mock WifiPickerTracker mWifiPickerTracker; @Mock - MergedCarrierEntry mMergedCarrierEntry; + WifiPickerTrackerHelper mWifiPickerTrackerHelper; @Before public void setUp() { @@ -56,7 +59,8 @@ public class WifiScanWorkerTest { mWifiScanWorker = new WifiScanWorker(RuntimeEnvironment.application, WIFI_SLICE_URI); mWifiScanWorker.mWifiPickerTracker = mWifiPickerTracker; - when(mWifiPickerTracker.getMergedCarrierEntry()).thenReturn(mMergedCarrierEntry); + mWifiScanWorker.mWifiPickerTrackerHelper = mWifiPickerTrackerHelper; + when(mWifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(SUB_ID)).thenReturn(false); } @Test @@ -110,22 +114,33 @@ public class WifiScanWorkerTest { } @Test - public void setCarrierNetworkEnabled_shouldCallMergedCarrierEntrySetEnabled() { - mWifiScanWorker.setCarrierNetworkEnabled(true); + public void setCarrierNetworkEnabledIfNeeded_shouldSetCarrierNetworkEnabled() { + 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 - public void connectCarrierNetwork_shouldCallMergedCarrierEntryConnect() { - when(mMergedCarrierEntry.canConnect()).thenReturn(true); + public void setCarrierNetworkEnabledIfNeeded_enabledProvision_neverSetCarrierNetworkEnabled() { + 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(); - verify(mMergedCarrierEntry).connect(any()); + verify(mWifiPickerTrackerHelper).connectCarrierNetwork(any()); } } diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index a323ed6ebef..c516f0cb3bc 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -70,6 +70,7 @@ public class ProviderModelSliceTest { private static final Uri PROVIDER_MODEL_SLICE_URI = Uri.parse("content://com.android.settings.slices/action/provider_model"); private static final int MOCK_SLICE_LEVEL = 3; + private static final int SUB_ID = 2; private Context mContext; private MockProviderModelSlice mMockProviderModelSlice; @@ -359,23 +360,23 @@ public class ProviderModelSliceTest { @Test public void doCarrierNetworkAction_toggleActionSetDataEnabled_setCarrierNetworkEnabledTrue() { mMockProviderModelSlice.doCarrierNetworkAction(true /* isToggleAction */, - true /* isDataEnabled */); + true /* isDataEnabled */, SUB_ID); - verify(mMockNetworkProviderWorker).setCarrierNetworkEnabled(true); + verify(mMockNetworkProviderWorker).setCarrierNetworkEnabledIfNeeded(true, SUB_ID); } @Test public void doCarrierNetworkAction_toggleActionSetDataDisabled_setCarrierNetworkEnabledFalse() { mMockProviderModelSlice.doCarrierNetworkAction(true /* isToggleAction */, - false /* isDataEnabled */); + false /* isDataEnabled */, SUB_ID); - verify(mMockNetworkProviderWorker).setCarrierNetworkEnabled(false); + verify(mMockNetworkProviderWorker).setCarrierNetworkEnabledIfNeeded(false, SUB_ID); } @Test public void doCarrierNetworkAction_primaryActionAndDataEnabled_connectCarrierNetwork() { mMockProviderModelSlice.doCarrierNetworkAction(false /* isToggleAction */, - true /* isDataEnabled */); + true /* isDataEnabled */, SUB_ID); verify(mMockNetworkProviderWorker).connectCarrierNetwork(); } @@ -383,7 +384,7 @@ public class ProviderModelSliceTest { @Test public void doCarrierNetworkAction_primaryActionAndDataDisabled_notConnectCarrierNetwork() { mMockProviderModelSlice.doCarrierNetworkAction(false /* isToggleAction */, - false /* isDataEnabled */); + false /* isDataEnabled */, SUB_ID); verify(mMockNetworkProviderWorker, never()).connectCarrierNetwork(); }