Thread fixes for WifiStatusTracker tests
WifiStatusTracker now supports sending messages to the background. Tests were adapted to make sure threading is taken into account. Test: atest NetworkControllerDataTest Test: atest NetworkControllerSignalTest Test: atest NetworkControllerWifiTest Bug: 190376958 Change-Id: Id80bba6a2abec36a2e58a81552a34a7f74f9a818
This commit is contained in:
@@ -54,9 +54,8 @@ public class WifiStatusTracker {
|
||||
private final WifiManager mWifiManager;
|
||||
private final NetworkScoreManager mNetworkScoreManager;
|
||||
private final ConnectivityManager mConnectivityManager;
|
||||
private final HandlerThread mHandlerThread;
|
||||
private final Handler mHandler;
|
||||
private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
|
||||
private final Handler mMainThreadHandler;
|
||||
private final Set<Integer> mNetworks = new HashSet<>();
|
||||
// Save the previous HISTORY_SIZE states for logging.
|
||||
private final String[] mHistory = new String[HISTORY_SIZE];
|
||||
@@ -170,15 +169,27 @@ public class WifiStatusTracker {
|
||||
public WifiStatusTracker(Context context, WifiManager wifiManager,
|
||||
NetworkScoreManager networkScoreManager, ConnectivityManager connectivityManager,
|
||||
Runnable callback) {
|
||||
this(context, wifiManager, networkScoreManager, connectivityManager, callback, null, null);
|
||||
}
|
||||
|
||||
public WifiStatusTracker(Context context, WifiManager wifiManager,
|
||||
NetworkScoreManager networkScoreManager, ConnectivityManager connectivityManager,
|
||||
Runnable callback, Handler foregroundHandler, Handler backgroundHandler) {
|
||||
mContext = context;
|
||||
mWifiManager = wifiManager;
|
||||
mWifiNetworkScoreCache = new WifiNetworkScoreCache(context);
|
||||
mNetworkScoreManager = networkScoreManager;
|
||||
mConnectivityManager = connectivityManager;
|
||||
mCallback = callback;
|
||||
mHandlerThread = new HandlerThread("WifiStatusTrackerHandler");
|
||||
mHandlerThread.start();
|
||||
mHandler = new Handler(mHandlerThread.getLooper());
|
||||
if (backgroundHandler == null) {
|
||||
HandlerThread handlerThread = new HandlerThread("WifiStatusTrackerHandler");
|
||||
handlerThread.start();
|
||||
mHandler = new Handler(handlerThread.getLooper());
|
||||
} else {
|
||||
mHandler = backgroundHandler;
|
||||
}
|
||||
mMainThreadHandler = foregroundHandler == null
|
||||
? new Handler(Looper.getMainLooper()) : foregroundHandler;
|
||||
mCacheListener =
|
||||
new WifiNetworkScoreCache.CacheListener(mHandler) {
|
||||
@Override
|
||||
|
||||
@@ -251,10 +251,10 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
broadcastDispatcher,
|
||||
demoModeController,
|
||||
carrierConfigTracker,
|
||||
handler,
|
||||
featureFlags,
|
||||
dumpManager);
|
||||
mReceiverHandler.post(mRegisterListeners);
|
||||
mMainHandler = handler;
|
||||
mInternetDialogFactory = internetDialogFactory;
|
||||
}
|
||||
|
||||
@@ -274,12 +274,14 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
DemoModeController demoModeController,
|
||||
CarrierConfigTracker carrierConfigTracker,
|
||||
@Main Handler handler,
|
||||
FeatureFlags featureFlags,
|
||||
DumpManager dumpManager
|
||||
) {
|
||||
mContext = context;
|
||||
mTelephonyListenerManager = telephonyListenerManager;
|
||||
mConfig = config;
|
||||
mMainHandler = handler;
|
||||
mReceiverHandler = new Handler(bgLooper);
|
||||
mBgLooper = bgLooper;
|
||||
mBgExecutor = bgExecutor;
|
||||
@@ -315,7 +317,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
}
|
||||
});
|
||||
mWifiSignalController = new WifiSignalController(mContext, mHasMobileDataFeature,
|
||||
mCallbackHandler, this, mWifiManager, mConnectivityManager, networkScoreManager);
|
||||
mCallbackHandler, this, mWifiManager, mConnectivityManager, networkScoreManager,
|
||||
mMainHandler, mReceiverHandler);
|
||||
|
||||
mEthernetSignalController = new EthernetSignalController(mContext, mCallbackHandler, this);
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.net.ConnectivityManager;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkScoreManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Handler;
|
||||
import android.text.Html;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
@@ -34,6 +35,8 @@ import com.android.settingslib.graph.SignalDrawable;
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.settingslib.wifi.WifiStatusTracker;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.util.Assert;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -53,12 +56,14 @@ public class WifiSignalController extends SignalController<WifiState, IconGroup>
|
||||
NetworkControllerImpl networkController,
|
||||
WifiManager wifiManager,
|
||||
ConnectivityManager connectivityManager,
|
||||
NetworkScoreManager networkScoreManager) {
|
||||
NetworkScoreManager networkScoreManager,
|
||||
@Main Handler handler,
|
||||
@Background Handler backgroundHandler) {
|
||||
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
|
||||
callbackHandler, networkController);
|
||||
mWifiManager = wifiManager;
|
||||
mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager,
|
||||
connectivityManager, this::handleStatusUpdated);
|
||||
connectivityManager, this::handleStatusUpdated, handler, backgroundHandler);
|
||||
mWifiTracker.setListening(true);
|
||||
mHasMobileDataFeature = hasMobileDataFeature;
|
||||
if (wifiManager != null) {
|
||||
|
||||
@@ -125,6 +125,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
protected DemoModeController mDemoModeController;
|
||||
protected CarrierConfigTracker mCarrierConfigTracker;
|
||||
protected FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
|
||||
protected Handler mMainHandler;
|
||||
protected FeatureFlags mFeatureFlags;
|
||||
|
||||
protected int mSubId;
|
||||
@@ -174,9 +175,15 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
mMockNsm = mock(NetworkScoreManager.class);
|
||||
mMockSubDefaults = mock(SubscriptionDefaults.class);
|
||||
mCarrierConfigTracker = mock(CarrierConfigTracker.class);
|
||||
mMainHandler = mock(Handler.class);
|
||||
mNetCapabilities = new NetworkCapabilities();
|
||||
when(mMockTm.isDataCapable()).thenReturn(true);
|
||||
when(mMockTm.createForSubscriptionId(anyInt())).thenReturn(mMockTm);
|
||||
|
||||
doAnswer(invocation -> {
|
||||
((Runnable) invocation.getArgument(0)).run();
|
||||
return null;
|
||||
}).when(mMainHandler).post(any());
|
||||
doAnswer(invocation -> {
|
||||
int rssi = invocation.getArgument(0);
|
||||
if (rssi < -88) return 0;
|
||||
@@ -231,6 +238,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
mMockBd,
|
||||
mDemoModeController,
|
||||
mCarrierConfigTracker,
|
||||
mMainHandler,
|
||||
mFeatureFlags,
|
||||
mock(DumpManager.class)
|
||||
);
|
||||
@@ -291,24 +299,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
mNetworkController.doUpdateMobileControllers();
|
||||
}
|
||||
|
||||
protected NetworkControllerImpl setUpNoMobileData() {
|
||||
when(mMockTm.isDataCapable()).thenReturn(false);
|
||||
NetworkControllerImpl networkControllerNoMobile =
|
||||
new NetworkControllerImpl(mContext, mMockCm, mMockTm, mTelephonyListenerManager,
|
||||
mMockWm, mMockNsm, mMockSm,
|
||||
mConfig, TestableLooper.get(this).getLooper(), mFakeExecutor,
|
||||
mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class),
|
||||
mock(DataUsageController.class), mMockSubDefaults,
|
||||
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController,
|
||||
mCarrierConfigTracker, mFeatureFlags,
|
||||
mock(DumpManager.class));
|
||||
|
||||
setupNetworkController();
|
||||
|
||||
return networkControllerNoMobile;
|
||||
}
|
||||
|
||||
// 2 Bars 3G GSM.
|
||||
public void setupDefaultSignal() {
|
||||
setIsGsm(true);
|
||||
|
||||
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.telephony.NetworkRegistrationInfo;
|
||||
import android.telephony.ServiceState;
|
||||
@@ -130,8 +131,8 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
|
||||
mock(AccessPointControllerImpl.class),
|
||||
mock(DataUsageController.class), mMockSubDefaults,
|
||||
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController,
|
||||
mock(CarrierConfigTracker.class), mFeatureFlags,
|
||||
mock(DumpManager.class));
|
||||
mock(CarrierConfigTracker.class), new Handler(TestableLooper.get(this).getLooper()),
|
||||
mFeatureFlags, mock(DumpManager.class));
|
||||
setupNetworkController();
|
||||
|
||||
setupDefaultSignal();
|
||||
|
||||
@@ -84,6 +84,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
mMockBd,
|
||||
mDemoModeController,
|
||||
mCarrierConfigTracker,
|
||||
mMainHandler,
|
||||
mFeatureFlags,
|
||||
mock(DumpManager.class)
|
||||
);
|
||||
@@ -117,6 +118,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
mMockBd,
|
||||
mDemoModeController,
|
||||
mCarrierConfigTracker,
|
||||
mMainHandler,
|
||||
mFeatureFlags,
|
||||
mock(DumpManager.class)
|
||||
);
|
||||
@@ -136,7 +138,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
|
||||
mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags,
|
||||
mDemoModeController, mock(CarrierConfigTracker.class),
|
||||
mMainHandler, mFeatureFlags,
|
||||
mock(DumpManager.class));
|
||||
setupNetworkController();
|
||||
|
||||
@@ -157,8 +160,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
|
||||
mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags,
|
||||
mock(DumpManager.class));
|
||||
mDemoModeController, mock(CarrierConfigTracker.class),
|
||||
mMainHandler, mFeatureFlags, mock(DumpManager.class));
|
||||
mNetworkController.registerListeners();
|
||||
|
||||
// Wait for the main looper to execute the previous command
|
||||
@@ -226,8 +229,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
|
||||
mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags,
|
||||
mock(DumpManager.class));
|
||||
mDemoModeController, mock(CarrierConfigTracker.class),
|
||||
mMainHandler, mFeatureFlags, mock(DumpManager.class));
|
||||
setupNetworkController();
|
||||
|
||||
// No Subscriptions.
|
||||
|
||||
@@ -31,10 +31,11 @@ import android.net.vcn.VcnTransportInfo;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.telephony.CellSignalStrength;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
|
||||
import org.junit.Before;
|
||||
|
||||
Reference in New Issue
Block a user