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

Commit cdd02a88 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

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
parent 906bfd89
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -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
+5 −2
Original line number Diff line number Diff line
@@ -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);

+7 −2
Original line number Diff line number Diff line
@@ -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) {
+8 −18
Original line number Diff line number Diff line
@@ -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);
+3 −2
Original line number Diff line number Diff line
@@ -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();
Loading