diff options
| author | 2021-12-01 00:37:59 +0800 | |
|---|---|---|
| committer | 2021-12-02 00:23:01 +0800 | |
| commit | e6767851a83009dcb64a73f79f3e32051403f13c (patch) | |
| tree | 186685485e8cb244483553748554a7a39cec2cc5 | |
| parent | 8653f2eeb55fdd3848359d3b41f14934e4924c29 (diff) | |
[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
2 files changed, 62 insertions, 88 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index 2a7d2c35e82f..8690ce364313 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -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, diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index ca8903bfe009..95e7a98c0a60 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -1,5 +1,7 @@ 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); @@ -576,6 +572,23 @@ public class InternetDialogControllerTest extends SysuiTestCase { } @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)) .thenReturn(true); @@ -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); } } |