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

Commit 74b18587 authored by Weng Su's avatar Weng Su
Browse files

[Provider Model] Implement the carrner network selection

- Add primaryAction for connecting carrier network

- User toggles carrier network On/Off
  - Calls MergedCarrierEntry#setEnabled(true/false)

- User taps on carrier network
  - Calls MergedCarrierEntry#connect()

Bug: 175761096
Test:
- Manual Test
- atest ProviderModelSliceTest
- atest ProviderModelSliceHelperTest
- make RunSettingsRoboTests ROBOTEST_FILTER=WifiScanWorkerTest

Change-Id: I07cb6c142a2f4e9cbdbab1f77afdc367728b4e3f
parent 21338568
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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
+6 −4
Original line number Diff line number Diff line
@@ -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;
    }
+15 −0
Original line number Diff line number Diff line
@@ -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 */);
        }
    }
}
+26 −0
Original line number Diff line number Diff line
@@ -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());
    }
}
+34 −2
Original line number Diff line number Diff line
@@ -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();
    }
}