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

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

[Provider Model] Simplify filtering WiFi list function

- When the WiFi network status changes, if it takes too long to filter
the WiFi list, then the result might have a gap in the second filter.

- Avoid multiple filtering

- Remove unnecessary code

Bug: 207672135
Test: manual test
atest -c InternetDialogTest

Change-Id: I66f58a1e03847d54f052388fd6efa97eb7dc069e
parent 8653f2ee
Loading
Loading
Loading
Loading
+20 −28
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ import com.android.systemui.util.settings.GlobalSettings;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -98,8 +99,10 @@ import java.util.stream.Stream;

import javax.inject.Inject;

public class InternetDialogController implements WifiEntry.DisconnectCallback,
        AccessPointController.AccessPointCallback {
/**
 * Controller for Internet Dialog.
 */
public class InternetDialogController implements AccessPointController.AccessPointCallback {

    private static final String TAG = "InternetDialogController";
    private static final String ACTION_NETWORK_PROVIDER_SETTINGS =
@@ -870,20 +873,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
            return;
        }

        boolean hasConnectedWifi = false;
        final int accessPointSize = accessPoints.size();
        for (int i = 0; i < accessPointSize; i++) {
            WifiEntry wifiEntry = accessPoints.get(i);
            if (wifiEntry.isDefaultNetwork() && wifiEntry.hasInternetAccess()) {
                mConnectedEntry = wifiEntry;
                hasConnectedWifi = true;
                break;
            }
        }
        if (!hasConnectedWifi) {
            mConnectedEntry = null;
        }

        int count = MAX_WIFI_ENTRY_COUNT;
        if (mHasEthernet) {
            count -= 1;
@@ -891,15 +880,22 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        if (hasCarrier()) {
            count -= 1;
        }
        if (hasConnectedWifi) {
            count -= 1;
        if (count > accessPoints.size()) {
            count = accessPoints.size();
        }
        final List<WifiEntry> wifiEntries = accessPoints.stream()
                .filter(wifiEntry -> (!wifiEntry.isDefaultNetwork()
                        || !wifiEntry.hasInternetAccess()))
                .limit(count)
                .collect(Collectors.toList());
        mWifiEntriesCount = wifiEntries == null ? 0 : wifiEntries.size();

        WifiEntry connectedEntry = null;
        final List<WifiEntry> wifiEntries = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            WifiEntry entry = accessPoints.get(i);
            if (connectedEntry == null && entry.isDefaultNetwork() && entry.hasInternetAccess()) {
                connectedEntry = entry;
            } else {
                wifiEntries.add(entry);
            }
        }
        mConnectedEntry = connectedEntry;
        mWifiEntriesCount = wifiEntries.size();

        if (mCallback != null) {
            mCallback.onAccessPointsChanged(wifiEntries, mConnectedEntry);
@@ -910,10 +906,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
    public void onSettingsActivityTriggered(Intent settingsIntent) {
    }

    @Override
    public void onDisconnectResult(int status) {
    }

    private class InternetTelephonyCallback extends TelephonyCallback implements
            TelephonyCallback.DataConnectionStateListener,
            TelephonyCallback.DisplayInfoListener,
+42 −60
Original line number Diff line number Diff line
package com.android.systemui.qs.tiles.dialog;

import static android.provider.Settings.Global.AIRPLANE_MODE_ON;

import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_HORIZONTAL_WEIGHT;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_VERTICAL_WEIGHT;

@@ -19,7 +21,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.animation.Animator;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
@@ -37,7 +38,6 @@ import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;

import androidx.annotation.Nullable;
import androidx.test.filters.SmallTest;

import com.android.internal.logging.UiEventLogger;
@@ -47,7 +47,6 @@ import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.connectivity.AccessPointController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -70,7 +69,6 @@ import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;

@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -78,8 +76,6 @@ import java.util.concurrent.Executor;
public class InternetDialogControllerTest extends SysuiTestCase {

    private static final int SUB_ID = 1;
    private static final String CONNECTED_TITLE = "Connected Wi-Fi Title";
    private static final String CONNECTED_SUMMARY = "Connected Wi-Fi Summary";

    //SystemUIToast
    private static final int GRAVITY_FLAGS = Gravity.FILL_HORIZONTAL | Gravity.FILL_VERTICAL;
@@ -142,7 +138,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    private DialogLaunchAnimator mDialogLaunchAnimator;

    private TestableResources mTestableResources;
    private MockInternetDialogController mInternetDialogController;
    private InternetDialogController mInternetDialogController;
    private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
    private List<WifiEntry> mAccessPoints = new ArrayList<>();
    private List<WifiEntry> mWifiEntries = new ArrayList<>();
@@ -170,7 +166,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
        when(mSystemUIToast.getGravity()).thenReturn(GRAVITY_FLAGS);
        when(mSystemUIToast.getInAnimation()).thenReturn(mAnimator);

        mInternetDialogController = new MockInternetDialogController(mContext,
        mInternetDialogController = new InternetDialogController(mContext,
                mock(UiEventLogger.class), mock(ActivityStarter.class), mAccessPointController,
                mSubscriptionManager, mTelephonyManager, mWifiManager,
                mock(ConnectivityManager.class), mHandler, mExecutor, mBroadcastDispatcher,
@@ -225,7 +221,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getDialogTitleText_withAirplaneModeOn_returnAirplaneMode() {
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);

        assertTrue(TextUtils.equals(mInternetDialogController.getDialogTitleText(),
                getResourcesString("airplane_mode")));
@@ -233,7 +229,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getDialogTitleText_withAirplaneModeOff_returnInternet() {
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);

        assertTrue(TextUtils.equals(mInternetDialogController.getDialogTitleText(),
                getResourcesString("quick_settings_internet_label")));
@@ -241,14 +237,14 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getSubtitleText_withAirplaneModeOn_returnNull() {
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);

        assertThat(mInternetDialogController.getSubtitleText(false)).isNull();
    }

    @Test
    public void getSubtitleText_withWifiOff_returnWifiIsOff() {
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);
        when(mWifiManager.isWifiEnabled()).thenReturn(false);

        assertThat(mInternetDialogController.getSubtitleText(false))
@@ -263,7 +259,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getSubtitleText_withNoWifiEntry_returnSearchWifi() {
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);
        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        mInternetDialogController.onAccessPointsChanged(null /* accessPoints */);

@@ -280,7 +276,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void getSubtitleText_withWifiEntry_returnTapToConnect() {
        // The preconditions WiFi Entries is already in setUp()
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);
        when(mWifiManager.isWifiEnabled()).thenReturn(true);

        assertThat(mInternetDialogController.getSubtitleText(false))
@@ -295,7 +291,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getSubtitleText_deviceLockedWithWifiOn_returnUnlockToViewNetworks() {
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);
        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        when(mKeyguardStateController.isUnlocked()).thenReturn(false);

@@ -305,7 +301,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getSubtitleText_withNoService_returnNoNetworksAvailable() {
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);
        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        mInternetDialogController.onAccessPointsChanged(null /* accessPoints */);

@@ -319,7 +315,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

    @Test
    public void getSubtitleText_withMobileDataDisabled_returnNoOtherAvailable() {
        mInternetDialogController.setAirplaneModeEnabled(false);
        fakeAirplaneModeEnabled(false);
        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        mInternetDialogController.onAccessPointsChanged(null /* accessPoints */);

@@ -420,7 +416,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntry_callbackConnectedEntryOnly() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);

@@ -433,7 +429,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_noConnectedEntryAndOneOther_callbackWifiEntriesOnly() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mWifiEntry1);

@@ -448,7 +444,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndOneOther_callbackCorrectly() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -463,7 +459,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndTwoOthers_callbackCorrectly() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -480,7 +476,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndThreeOthers_callbackCutMore() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -497,7 +493,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

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

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

@@ -508,7 +504,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_oneConnectedEntryAndFourOthers_callbackCutMore() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mConnectedEntry);
        mAccessPoints.add(mWifiEntry1);
@@ -526,7 +522,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

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

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

@@ -537,7 +533,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    @Test
    public void onAccessPointsChanged_fourWifiEntries_callbackCutMore() {
        reset(mInternetDialogCallback);
        mInternetDialogController.setAirplaneModeEnabled(true);
        fakeAirplaneModeEnabled(true);
        mAccessPoints.clear();
        mAccessPoints.add(mWifiEntry1);
        mAccessPoints.add(mWifiEntry2);
@@ -566,7 +562,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {

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

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

@@ -575,6 +571,23 @@ public class InternetDialogControllerTest extends SysuiTestCase {
                .onAccessPointsChanged(mWifiEntries, null /* connectedEntry */);
    }

    @Test
    public void onAccessPointsChanged_wifiIsDefaultButNoInternetAccess_putIntoWifiEntries() {
        reset(mInternetDialogCallback);
        mAccessPoints.clear();
        when(mWifiEntry1.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);
        when(mWifiEntry1.isDefaultNetwork()).thenReturn(true);
        when(mWifiEntry1.hasInternetAccess()).thenReturn(false);
        mAccessPoints.add(mWifiEntry1);

        mInternetDialogController.onAccessPointsChanged(mAccessPoints);

        mWifiEntries.clear();
        mWifiEntries.add(mWifiEntry1);
        verify(mInternetDialogCallback)
                .onAccessPointsChanged(mWifiEntries, null /* connectedEntry */);
    }

    @Test
    public void setMergedCarrierWifiEnabledIfNeed_carrierProvisionsEnabled_doNothing() {
        when(mCarrierConfigTracker.getCarrierProvisionsWifiMergedNetworksBool(SUB_ID))
@@ -641,38 +654,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
                mContext.getPackageName());
    }

    private class MockInternetDialogController extends InternetDialogController {

        private GlobalSettings mGlobalSettings;
        private boolean mIsAirplaneModeOn;

        MockInternetDialogController(Context context, UiEventLogger uiEventLogger,
                ActivityStarter starter, AccessPointController accessPointController,
                SubscriptionManager subscriptionManager, TelephonyManager telephonyManager,
                @Nullable WifiManager wifiManager, ConnectivityManager connectivityManager,
                @Main Handler handler, @Main Executor mainExecutor,
                BroadcastDispatcher broadcastDispatcher,
                KeyguardUpdateMonitor keyguardUpdateMonitor, GlobalSettings globalSettings,
                KeyguardStateController keyguardStateController, WindowManager windowManager,
                ToastFactory toastFactory, Handler workerHandler,
                CarrierConfigTracker carrierConfigTracker,
                LocationController locationController,
                DialogLaunchAnimator dialogLaunchAnimator) {
            super(context, uiEventLogger, starter, accessPointController, subscriptionManager,
                    telephonyManager, wifiManager, connectivityManager, handler, mainExecutor,
                    broadcastDispatcher, keyguardUpdateMonitor, globalSettings,
                    keyguardStateController, windowManager, toastFactory, workerHandler,
                    carrierConfigTracker, locationController, dialogLaunchAnimator);
            mGlobalSettings = globalSettings;
        }

        @Override
        boolean isAirplaneModeEnabled() {
            return mIsAirplaneModeOn;
        }

        public void setAirplaneModeEnabled(boolean enabled) {
            mIsAirplaneModeOn = enabled;
        }
    private void fakeAirplaneModeEnabled(boolean enabled) {
        when(mGlobalSettings.getInt(eq(AIRPLANE_MODE_ON), anyInt())).thenReturn(enabled ? 1 : 0);
    }
}