Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8f0a8e2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Provider Model] Carrie Wi-Fi offload toggle request (panel)" into sc-dev

parents d4a4fead a320fb12
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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;
        }

+10 −42
Original line number Diff line number Diff line
@@ -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<WifiSliceItem> 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<WifiSliceItem> impleme
    @Override
    public void close() {
        mLifecycleRegistry.markState(Lifecycle.State.DESTROYED);
        mWorkerThread.quit();
    }

    @Override
@@ -199,17 +169,15 @@ 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);
    /** 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 */);
    }
}
+26 −11
Original line number Diff line number Diff line
@@ -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());
    }
}
+7 −6
Original line number Diff line number Diff line
@@ -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();
    }