[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
This commit is contained in:
Weng Su
2021-12-01 00:37:59 +08:00
parent 8653f2eeb5
commit e6767851a8
2 changed files with 62 additions and 88 deletions

View File

@@ -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,

View File

@@ -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);
@@ -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);
}
}