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

Commit 69a8aff3 authored by Evan Laird's avatar Evan Laird
Browse files

Add an @Inject-able MobileSignalControllerFactory

This is step (1/n) towards refactoring the networking iconography stack
in sysui. This change moves the creation of the MobileSignalController
to an injectable factory as a precursor to reducing the dependencies
between NetworkControllerImpl and its managed subcontrollers.

Test: atest SystemUITests
Bug: 238425913
Change-Id: I405ad38588a3d904675de7c64142d22e4402f8e5
parent 531b63c1
Loading
Loading
Loading
Loading
+60 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.systemui.statusbar.connectivity

import android.content.Context
import android.os.Looper
import android.telephony.SubscriptionInfo
import android.telephony.TelephonyManager
import com.android.settingslib.mobile.MobileMappings
import com.android.settingslib.mobile.MobileStatusTracker
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.util.CarrierConfigTracker
import javax.inject.Inject

/**
 * Factory to make MobileSignalController injectable
 */
internal class MobileSignalControllerFactory @Inject constructor(
    val context: Context,
    val callbackHandler: CallbackHandler,
    val carrierConfigTracker: CarrierConfigTracker,
    val featureFlags: FeatureFlags,
) {
    fun createMobileSignalController(
        config: MobileMappings.Config,
        hasMobileData: Boolean,
        phone: TelephonyManager,
        networkController: NetworkControllerImpl, // TODO: no!
        subscriptionInfo: SubscriptionInfo,
        subscriptionDefaults: MobileStatusTracker.SubscriptionDefaults,
        receiverLooper: Looper // TODO: no!
    ): MobileSignalController {
        return MobileSignalController(
            context,
            config,
            hasMobileData,
            phone,
            callbackHandler,
            networkController,
            subscriptionInfo,
            subscriptionDefaults,
            receiverLooper,
            carrierConfigTracker,
            featureFlags,
        )
    }
}
+28 −13
Original line number Original line Diff line number Diff line
@@ -140,6 +140,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
    private final FeatureFlags mFeatureFlags;
    private final FeatureFlags mFeatureFlags;
    private final DumpManager mDumpManager;
    private final DumpManager mDumpManager;
    private final LogBuffer mLogBuffer;
    private final LogBuffer mLogBuffer;
    private final MobileSignalControllerFactory mMobileFactory;


    private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener;
    private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener;
    private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -235,6 +236,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
            DemoModeController demoModeController,
            DemoModeController demoModeController,
            CarrierConfigTracker carrierConfigTracker,
            CarrierConfigTracker carrierConfigTracker,
            WifiStatusTrackerFactory trackerFactory,
            WifiStatusTrackerFactory trackerFactory,
            MobileSignalControllerFactory mobileFactory,
            @Main Handler handler,
            @Main Handler handler,
            InternetDialogFactory internetDialogFactory,
            InternetDialogFactory internetDialogFactory,
            FeatureFlags featureFlags,
            FeatureFlags featureFlags,
@@ -257,6 +259,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
                demoModeController,
                demoModeController,
                carrierConfigTracker,
                carrierConfigTracker,
                trackerFactory,
                trackerFactory,
                mobileFactory,
                handler,
                handler,
                featureFlags,
                featureFlags,
                dumpManager,
                dumpManager,
@@ -283,6 +286,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
            DemoModeController demoModeController,
            DemoModeController demoModeController,
            CarrierConfigTracker carrierConfigTracker,
            CarrierConfigTracker carrierConfigTracker,
            WifiStatusTrackerFactory trackerFactory,
            WifiStatusTrackerFactory trackerFactory,
            MobileSignalControllerFactory mobileFactory,
            @Main Handler handler,
            @Main Handler handler,
            FeatureFlags featureFlags,
            FeatureFlags featureFlags,
            DumpManager dumpManager,
            DumpManager dumpManager,
@@ -298,6 +302,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
        mCallbackHandler = callbackHandler;
        mCallbackHandler = callbackHandler;
        mDataSaverController = new DataSaverControllerImpl(context);
        mDataSaverController = new DataSaverControllerImpl(context);
        mBroadcastDispatcher = broadcastDispatcher;
        mBroadcastDispatcher = broadcastDispatcher;
        mMobileFactory = mobileFactory;


        mSubscriptionManager = subManager;
        mSubscriptionManager = subManager;
        mSubDefaults = defaultsHandler;
        mSubDefaults = defaultsHandler;
@@ -982,11 +987,15 @@ public class NetworkControllerImpl extends BroadcastReceiver
                mMobileSignalControllers.put(subId, cachedControllers.get(subId));
                mMobileSignalControllers.put(subId, cachedControllers.get(subId));
                cachedControllers.remove(subId);
                cachedControllers.remove(subId);
            } else {
            } else {
                MobileSignalController controller = new MobileSignalController(mContext, mConfig,
                MobileSignalController controller = mMobileFactory.createMobileSignalController(
                        mHasMobileDataFeature, mPhone.createForSubscriptionId(subId),
                        mConfig,
                        mCallbackHandler, this, subscriptions.get(i),
                        mHasMobileDataFeature,
                        mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker,
                        mPhone.createForSubscriptionId(subId),
                        mFeatureFlags);
                        this,
                        subscriptions.get(i),
                        mSubDefaults,
                        mReceiverHandler.getLooper()
                );
                controller.setUserSetupComplete(mUserSetup);
                controller.setUserSetupComplete(mUserSetup);
                mMobileSignalControllers.put(subId, controller);
                mMobileSignalControllers.put(subId, controller);
                if (subscriptions.get(i).getSimSlotIndex() == 0) {
                if (subscriptions.get(i).getSimSlotIndex() == 0) {
@@ -1347,7 +1356,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
                mMobileSignalControllers.clear();
                mMobileSignalControllers.clear();
                int start = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
                int start = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
                for (int i = start /* get out of normal index range */; i < start + num; i++) {
                for (int i = start /* get out of normal index range */; i < start + num; i++) {
                    subs.add(addSignalController(i, i));
                    subs.add(addDemoModeSignalController(i, i));
                }
                }
                mCallbackHandler.setSubs(subs);
                mCallbackHandler.setSubs(subs);
                for (int i = 0; i < mMobileSignalControllers.size(); i++) {
                for (int i = 0; i < mMobileSignalControllers.size(); i++) {
@@ -1373,7 +1382,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
            List<SubscriptionInfo> subs = new ArrayList<>();
            List<SubscriptionInfo> subs = new ArrayList<>();
            while (mMobileSignalControllers.size() <= slot) {
            while (mMobileSignalControllers.size() <= slot) {
                int nextSlot = mMobileSignalControllers.size();
                int nextSlot = mMobileSignalControllers.size();
                subs.add(addSignalController(nextSlot, nextSlot));
                subs.add(addDemoModeSignalController(nextSlot, nextSlot));
            }
            }
            if (!subs.isEmpty()) {
            if (!subs.isEmpty()) {
                mCallbackHandler.setSubs(subs);
                mCallbackHandler.setSubs(subs);
@@ -1463,14 +1472,20 @@ public class NetworkControllerImpl extends BroadcastReceiver
        mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE;
        mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE;
    }
    }


    private SubscriptionInfo addSignalController(int id, int simSlotIndex) {
    private SubscriptionInfo addDemoModeSignalController(int id, int simSlotIndex) {
        SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0,
        SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0,
                null, null, null, "", false, null, null);
                null, null, null, "", false, null, null);
        MobileSignalController controller = new MobileSignalController(mContext,

                mConfig, mHasMobileDataFeature,
        MobileSignalController controller = mMobileFactory.createMobileSignalController(
                mPhone.createForSubscriptionId(info.getSubscriptionId()), mCallbackHandler, this,
                mConfig,
                info, mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker,
                mHasMobileDataFeature,
                mFeatureFlags);
                mPhone.createForSubscriptionId(info.getSubscriptionId()),
                this,
                info,
                mSubDefaults,
                mReceiverHandler.getLooper()
        );

        mMobileSignalControllers.put(id, controller);
        mMobileSignalControllers.put(id, controller);
        controller.getState().userSetup = true;
        controller.getState().userSetup = true;
        return info;
        return info;
+8 −1
Original line number Original line Diff line number Diff line
@@ -129,6 +129,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
    protected Handler mMainHandler;
    protected Handler mMainHandler;
    protected FeatureFlags mFeatureFlags;
    protected FeatureFlags mFeatureFlags;
    protected WifiStatusTrackerFactory mWifiStatusTrackerFactory;
    protected WifiStatusTrackerFactory mWifiStatusTrackerFactory;
    protected MobileSignalControllerFactory mMobileFactory;


    protected int mSubId;
    protected int mSubId;


@@ -224,6 +225,12 @@ public class NetworkControllerBaseTest extends SysuiTestCase {


        mWifiStatusTrackerFactory = new WifiStatusTrackerFactory(
        mWifiStatusTrackerFactory = new WifiStatusTrackerFactory(
                mContext, mMockWm, mMockNsm, mMockCm, mMainHandler);
                mContext, mMockWm, mMockNsm, mMockCm, mMainHandler);
        mMobileFactory = new MobileSignalControllerFactory(
                mContext,
                mCallbackHandler,
                mCarrierConfigTracker,
                mFeatureFlags
        );


        mNetworkController = new NetworkControllerImpl(mContext,
        mNetworkController = new NetworkControllerImpl(mContext,
                mMockCm,
                mMockCm,
@@ -243,6 +250,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
                mDemoModeController,
                mDemoModeController,
                mCarrierConfigTracker,
                mCarrierConfigTracker,
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                mMainHandler,
                mMainHandler,
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),
@@ -637,5 +645,4 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
    protected void assertDataNetworkNameEquals(String expected) {
    protected void assertDataNetworkNameEquals(String expected) {
        assertEquals("Data network name", expected, mNetworkController.getMobileDataNetworkName());
        assertEquals("Data network name", expected, mNetworkController.getMobileDataNetworkName());
    }
    }

}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -145,6 +145,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
                mDemoModeController,
                mDemoModeController,
                mock(CarrierConfigTracker.class),
                mock(CarrierConfigTracker.class),
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                new Handler(TestableLooper.get(this).getLooper()),
                new Handler(TestableLooper.get(this).getLooper()),
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),
+5 −0
Original line number Original line Diff line number Diff line
@@ -85,6 +85,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
                mDemoModeController,
                mDemoModeController,
                mCarrierConfigTracker,
                mCarrierConfigTracker,
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                mMainHandler,
                mMainHandler,
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),
@@ -121,6 +122,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
                mDemoModeController,
                mDemoModeController,
                mCarrierConfigTracker,
                mCarrierConfigTracker,
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                mMainHandler,
                mMainHandler,
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),
@@ -155,6 +157,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
                mDemoModeController,
                mDemoModeController,
                mock(CarrierConfigTracker.class),
                mock(CarrierConfigTracker.class),
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                mMainHandler,
                mMainHandler,
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),
@@ -192,6 +195,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
                mDemoModeController,
                mDemoModeController,
                mock(CarrierConfigTracker.class),
                mock(CarrierConfigTracker.class),
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                mMainHandler,
                mMainHandler,
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),
@@ -277,6 +281,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
                mDemoModeController,
                mDemoModeController,
                mock(CarrierConfigTracker.class),
                mock(CarrierConfigTracker.class),
                mWifiStatusTrackerFactory,
                mWifiStatusTrackerFactory,
                mMobileFactory,
                mMainHandler,
                mMainHandler,
                mFeatureFlags,
                mFeatureFlags,
                mock(DumpManager.class),
                mock(DumpManager.class),