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

Commit c5d0caf2 authored by Weng Su's avatar Weng Su
Browse files

[Provider Model] Reduce the max of WiFi networks (QS Internet Dialog)

- The max of 3 wifi networks when Wi-Fi is on (regardless of if airplane
mode is on or off).

- The max of 6 items in Internet Panel.

- See b/206807144#comment20 for a video.

Bug: 206807144
Test: manual test
atest -c InternetAdapterTest \
         InternetDialogControllerTest \
         InternetDialogTest

Change-Id: Ia7889a78a6d803fbb5c5ac9107dcc4033626a27b
parent acbe7b52
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.systemui.qs.tiles.dialog;

import static com.android.systemui.Prefs.Key.QS_HAS_TURNED_OFF_MOBILE_DATA;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.MAX_WIFI_ENTRY_COUNT;

import android.app.AlertDialog;
import android.content.Context;
@@ -79,6 +80,7 @@ public class InternetDialog extends SystemUIDialog implements
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    static final long PROGRESS_DELAY_MS = 1500L;
    static final int MAX_NETWORK_COUNT = 4;

    private final Handler mHandler;
    private final Executor mBackgroundExecutor;
@@ -478,13 +480,20 @@ public class InternetDialog extends SystemUIDialog implements
    @VisibleForTesting
    @MainThread
    int getWifiListMaxCount() {
        int count = InternetDialogController.MAX_WIFI_ENTRY_COUNT;
        // Use the maximum count of networks to calculate the remaining count for Wi-Fi networks.
        int count = MAX_NETWORK_COUNT;
        if (mEthernetLayout.getVisibility() == View.VISIBLE) {
            count -= 1;
        }
        if (mMobileNetworkLayout.getVisibility() == View.VISIBLE) {
            count -= 1;
        }

        // If the remaining count is greater than the maximum count of the Wi-Fi network, the
        // maximum count of the Wi-Fi network is used.
        if (count > MAX_WIFI_ENTRY_COUNT) {
            count = MAX_WIFI_ENTRY_COUNT;
        }
        if (mConnectedWifListLayout.getVisibility() == View.VISIBLE) {
            count -= 1;
        }
+21 −40
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
            R.string.all_network_unavailable;
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    static final int MAX_WIFI_ENTRY_COUNT = 4;
    static final int MAX_WIFI_ENTRY_COUNT = 3;

    private WifiManager mWifiManager;
    private Context mContext;
@@ -143,8 +143,6 @@ public class InternetDialogController implements AccessPointController.AccessPoi
    private AccessPointController mAccessPointController;
    private IntentFilter mConnectionStateFilter;
    private InternetDialogCallback mCallback;
    private WifiEntry mConnectedEntry;
    private int mWifiEntriesCount;
    private UiEventLogger mUiEventLogger;
    private BroadcastDispatcher mBroadcastDispatcher;
    private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -156,6 +154,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
    private SignalDrawable mSignalDrawable;
    private LocationController mLocationController;
    private DialogLaunchAnimator mDialogLaunchAnimator;
    private boolean mHasWifiEntries;

    @VisibleForTesting
    static final float TOAST_PARAMS_HORIZONTAL_WEIGHT = 1.0f;
@@ -334,7 +333,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi
            return mContext.getText(SUBTITLE_TEXT_UNLOCK_TO_VIEW_NETWORKS);
        }

        if (mConnectedEntry != null || mWifiEntriesCount > 0) {
        if (mHasWifiEntries) {
            return mCanConfigWifi ? mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT) : null;
        }

@@ -875,46 +874,28 @@ public class InternetDialogController implements AccessPointController.AccessPoi
            return;
        }

        if (accessPoints == null || accessPoints.size() == 0) {
            mConnectedEntry = null;
            mWifiEntriesCount = 0;
            mCallback.onAccessPointsChanged(null /* wifiEntries */, null /* connectedEntry */,
                    false /* hasMoreEntry */);
            return;
        }

        boolean hasMoreWifiEntries = false;
        int count = MAX_WIFI_ENTRY_COUNT;
        // TODO: (b/206807144) Plan to remove the design of calculating WiFi list here, and
        //  calculate the number of WiFi list by referring to the Visibility of each network in
        //  InternetDialog.
        if (mHasEthernet) {
            count -= 1;
        }
        if (hasActiveSubId() || isCarrierNetworkActive()) {
            count -= 1;
        }
        final int wifiTotalCount = accessPoints.size();
        if (count > wifiTotalCount) {
            count = wifiTotalCount;
        } else if (count < wifiTotalCount) {
            hasMoreWifiEntries = true;
        }

        WifiEntry connectedEntry = null;
        final List<WifiEntry> wifiEntries = new ArrayList<>();
        List<WifiEntry> wifiEntries = null;
        final int accessPointsSize = (accessPoints == null) ? 0 : accessPoints.size();
        final boolean hasMoreWifiEntries = (accessPointsSize > MAX_WIFI_ENTRY_COUNT);
        if (accessPointsSize > 0) {
            wifiEntries = new ArrayList<>();
            final int count = hasMoreWifiEntries ? MAX_WIFI_ENTRY_COUNT : accessPointsSize;
            for (int i = 0; i < count; i++) {
                WifiEntry entry = accessPoints.get(i);
            if (connectedEntry == null && entry.isDefaultNetwork() && entry.hasInternetAccess()) {
                if (connectedEntry == null && entry.isDefaultNetwork()
                        && entry.hasInternetAccess()) {
                    connectedEntry = entry;
                } else {
                    wifiEntries.add(entry);
                }
            }
        mConnectedEntry = connectedEntry;
        mWifiEntriesCount = wifiEntries.size();
            mHasWifiEntries = true;
        } else {
            mHasWifiEntries = false;
        }

        mCallback.onAccessPointsChanged(wifiEntries, mConnectedEntry, hasMoreWifiEntries);
        mCallback.onAccessPointsChanged(wifiEntries, connectedEntry, hasMoreWifiEntries);
    }

    @Override
+0 −99
Original line number Diff line number Diff line
@@ -434,7 +434,6 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntry_callbackConnectedEntryOnly() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);

@@ -448,7 +447,6 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_noConnectedEntryAndOneOther_callbackWifiEntriesOnly() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mWifiEntry1);

@@ -463,7 +461,6 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndOneOther_callbackCorrectly() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -479,7 +476,6 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndTwoOthers_callbackCorrectly() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -497,7 +493,6 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndThreeOthers_callbackCutMore() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -509,86 +504,13 @@ public class InternetDialogControllerTest extends SysuiTestCase {
        mWifiEntries.clear();
        mWifiEntries.add(mWifiEntry1);
        mWifiEntries.add(mWifiEntry2);
        mWifiEntries.add(mWifiEntry3);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry,
                false /* hasMoreEntry */);

        // Turn off airplane mode to has carrier network, then Wi-Fi entries will cut last one.
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(false);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.remove(mWifiEntry3);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry,
                true /* hasMoreEntry */);
    }

    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndFourOthers_callbackCutMore() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
        mAccessPoints.add(mWifiEntry2);
        mAccessPoints.add(mWifiEntry3);
        mAccessPoints.add(mWifiEntry4);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.clear();
        mWifiEntries.add(mWifiEntry1);
        mWifiEntries.add(mWifiEntry2);
        mWifiEntries.add(mWifiEntry3);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry,
                true /* hasMoreEntry */);

        // Turn off airplane mode to has carrier network, then Wi-Fi entries will cut last one.
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(false);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.remove(mWifiEntry3);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry,
                true /* hasMoreEntry */);
    }

    @Test
    public void onAccessPointsChanged_oneCarrierWifiAndFourOthers_callbackCutMore() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        when(mMergedCarrierEntry.isDefaultNetwork()).thenReturn(true);
        mAccessPoints.clear();
        mAccessPoints.add(mWifiEntry1);
        mAccessPoints.add(mWifiEntry2);
        mAccessPoints.add(mWifiEntry3);
        mAccessPoints.add(mWifiEntry4);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.clear();
        mWifiEntries.add(mWifiEntry1);
        mWifiEntries.add(mWifiEntry2);
        mWifiEntries.add(mWifiEntry3);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries,
                null /* connectedEntry */, true /* hasMoreEntry */);

        // Turn off airplane mode to has carrier WiFi, then Wi-Fi entries will keep the same.
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(false);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries,
                null /* connectedEntry */, true /* hasMoreEntry */);
    }

    @Test
    public void onAccessPointsChanged_fourWifiEntries_callbackCutMore() {
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mWifiEntry1);
        mAccessPoints.add(mWifiEntry2);
@@ -601,27 +523,6 @@ public class InternetDialogControllerTest extends SysuiTestCase {
        mWifiEntries.add(mWifiEntry1);
        mWifiEntries.add(mWifiEntry2);
        mWifiEntries.add(mWifiEntry3);
        mWifiEntries.add(mWifiEntry4);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries,
                null /* connectedEntry */, false /* hasMoreEntry */);

        // If the Ethernet exists, then Wi-Fi entries will cut last one.
        reset(mInternetDialogCallback);
        mInternetDialogController.mHasEthernet = true;

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.remove(mWifiEntry4);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries,
                null /* connectedEntry */, true /* hasMoreEntry */);

        // Turn off airplane mode to has carrier network, then Wi-Fi entries will cut last one.
        reset(mInternetDialogCallback);
        fakeAirplaneModeEnabled(false);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.remove(mWifiEntry3);
        verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries,
                null /* connectedEntry */, true /* hasMoreEntry */);
    }
+20 −19
Original line number Diff line number Diff line
@@ -518,45 +518,46 @@ public class InternetDialogTest extends SysuiTestCase {

    @Test
    public void getWifiListMaxCount_returnCountCorrectly() {
        // Ethernet, MobileData, ConnectedWiFi are all hidden.
        // Both of the Ethernet, MobileData is hidden.
        // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT.
        setNetworkVisible(false, false, false);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT);

        // Only one of Ethernet, MobileData, ConnectedWiFi is displayed.
        // Then the maximum count  is equal to MAX_WIFI_ENTRY_COUNT - 1.
        setNetworkVisible(true, false, false);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1);

        setNetworkVisible(false, true, false);
        // If the Connected Wi-Fi is displayed then reduce one of the Wi-Fi list max count.
        setNetworkVisible(false, false, true);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1);

        setNetworkVisible(false, false, true);
        // Only one of Ethernet, MobileData is displayed.
        // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT.
        setNetworkVisible(true, false, false);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1);
        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT);

        // Only one of Ethernet, MobileData, ConnectedWiFi is hidden.
        // Then the maximum count  is equal to MAX_WIFI_ENTRY_COUNT - 2.
        setNetworkVisible(true, true, false);
        setNetworkVisible(false, true, false);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2);
        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT);

        // If the Connected Wi-Fi is displayed then reduce one of the Wi-Fi list max count.
        setNetworkVisible(true, false, true);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2);
        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1);

        setNetworkVisible(false, true, true);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2);
        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1);

        // Ethernet, MobileData, ConnectedWiFi are all displayed.
        // Then the maximum count  is equal to MAX_WIFI_ENTRY_COUNT - 3.
        // Both of Ethernet, MobileData, ConnectedWiFi is displayed.
        // Then the maximum count is equal to MAX_WIFI_ENTRY_COUNT - 1.
        setNetworkVisible(true, true, false);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 1);

        // If the Connected Wi-Fi is displayed then reduce one of the Wi-Fi list max count.
        setNetworkVisible(true, true, true);

        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 3);
        assertThat(mInternetDialog.getWifiListMaxCount()).isEqualTo(MAX_WIFI_ENTRY_COUNT - 2);
    }

    private void setNetworkVisible(boolean ethernetVisible, boolean mobileDataVisible,