From 69a8aff35db03ba5d7009f5fcf35f97afcc5f2a5 Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Fri, 8 Jul 2022 11:11:01 -0400 Subject: [PATCH] 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 --- .../MobileSignalControllerFactory.kt | 60 +++++++++++++++++++ .../connectivity/NetworkControllerImpl.java | 41 +++++++++---- .../NetworkControllerBaseTest.java | 9 ++- .../NetworkControllerDataTest.java | 1 + .../NetworkControllerSignalTest.java | 5 ++ 5 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt new file mode 100644 index 0000000000000..fa1333073f37f --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt @@ -0,0 +1,60 @@ +/* + * 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, + ) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java index a1dc7b41d42bf..8a84ba12fa1cc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java @@ -140,6 +140,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private final FeatureFlags mFeatureFlags; private final DumpManager mDumpManager; private final LogBuffer mLogBuffer; + private final MobileSignalControllerFactory mMobileFactory; private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener; private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -235,6 +236,7 @@ public class NetworkControllerImpl extends BroadcastReceiver DemoModeController demoModeController, CarrierConfigTracker carrierConfigTracker, WifiStatusTrackerFactory trackerFactory, + MobileSignalControllerFactory mobileFactory, @Main Handler handler, InternetDialogFactory internetDialogFactory, FeatureFlags featureFlags, @@ -257,6 +259,7 @@ public class NetworkControllerImpl extends BroadcastReceiver demoModeController, carrierConfigTracker, trackerFactory, + mobileFactory, handler, featureFlags, dumpManager, @@ -283,6 +286,7 @@ public class NetworkControllerImpl extends BroadcastReceiver DemoModeController demoModeController, CarrierConfigTracker carrierConfigTracker, WifiStatusTrackerFactory trackerFactory, + MobileSignalControllerFactory mobileFactory, @Main Handler handler, FeatureFlags featureFlags, DumpManager dumpManager, @@ -298,6 +302,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mCallbackHandler = callbackHandler; mDataSaverController = new DataSaverControllerImpl(context); mBroadcastDispatcher = broadcastDispatcher; + mMobileFactory = mobileFactory; mSubscriptionManager = subManager; mSubDefaults = defaultsHandler; @@ -982,11 +987,15 @@ public class NetworkControllerImpl extends BroadcastReceiver mMobileSignalControllers.put(subId, cachedControllers.get(subId)); cachedControllers.remove(subId); } else { - MobileSignalController controller = new MobileSignalController(mContext, mConfig, - mHasMobileDataFeature, mPhone.createForSubscriptionId(subId), - mCallbackHandler, this, subscriptions.get(i), - mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker, - mFeatureFlags); + MobileSignalController controller = mMobileFactory.createMobileSignalController( + mConfig, + mHasMobileDataFeature, + mPhone.createForSubscriptionId(subId), + this, + subscriptions.get(i), + mSubDefaults, + mReceiverHandler.getLooper() + ); controller.setUserSetupComplete(mUserSetup); mMobileSignalControllers.put(subId, controller); if (subscriptions.get(i).getSimSlotIndex() == 0) { @@ -1347,7 +1356,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mMobileSignalControllers.clear(); int start = mSubscriptionManager.getActiveSubscriptionInfoCountMax(); 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); for (int i = 0; i < mMobileSignalControllers.size(); i++) { @@ -1373,7 +1382,7 @@ public class NetworkControllerImpl extends BroadcastReceiver List subs = new ArrayList<>(); while (mMobileSignalControllers.size() <= slot) { int nextSlot = mMobileSignalControllers.size(); - subs.add(addSignalController(nextSlot, nextSlot)); + subs.add(addDemoModeSignalController(nextSlot, nextSlot)); } if (!subs.isEmpty()) { mCallbackHandler.setSubs(subs); @@ -1463,14 +1472,20 @@ public class NetworkControllerImpl extends BroadcastReceiver 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, null, null, null, "", false, null, null); - MobileSignalController controller = new MobileSignalController(mContext, - mConfig, mHasMobileDataFeature, - mPhone.createForSubscriptionId(info.getSubscriptionId()), mCallbackHandler, this, - info, mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker, - mFeatureFlags); + + MobileSignalController controller = mMobileFactory.createMobileSignalController( + mConfig, + mHasMobileDataFeature, + mPhone.createForSubscriptionId(info.getSubscriptionId()), + this, + info, + mSubDefaults, + mReceiverHandler.getLooper() + ); + mMobileSignalControllers.put(id, controller); controller.getState().userSetup = true; return info; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java index 0d1879cb25939..8808502ba0df3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java @@ -129,6 +129,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected Handler mMainHandler; protected FeatureFlags mFeatureFlags; protected WifiStatusTrackerFactory mWifiStatusTrackerFactory; + protected MobileSignalControllerFactory mMobileFactory; protected int mSubId; @@ -224,6 +225,12 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mWifiStatusTrackerFactory = new WifiStatusTrackerFactory( mContext, mMockWm, mMockNsm, mMockCm, mMainHandler); + mMobileFactory = new MobileSignalControllerFactory( + mContext, + mCallbackHandler, + mCarrierConfigTracker, + mFeatureFlags + ); mNetworkController = new NetworkControllerImpl(mContext, mMockCm, @@ -243,6 +250,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mDemoModeController, mCarrierConfigTracker, mWifiStatusTrackerFactory, + mMobileFactory, mMainHandler, mFeatureFlags, mock(DumpManager.class), @@ -637,5 +645,4 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected void assertDataNetworkNameEquals(String expected) { assertEquals("Data network name", expected, mNetworkController.getMobileDataNetworkName()); } - } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java index e3dd6f4e6e406..f3edef434ed4c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java @@ -145,6 +145,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { mDemoModeController, mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, + mMobileFactory, new Handler(TestableLooper.get(this).getLooper()), mFeatureFlags, mock(DumpManager.class), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java index 698899a8fc36f..f60b6d1997be0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java @@ -85,6 +85,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mDemoModeController, mCarrierConfigTracker, mWifiStatusTrackerFactory, + mMobileFactory, mMainHandler, mFeatureFlags, mock(DumpManager.class), @@ -121,6 +122,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mDemoModeController, mCarrierConfigTracker, mWifiStatusTrackerFactory, + mMobileFactory, mMainHandler, mFeatureFlags, mock(DumpManager.class), @@ -155,6 +157,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mDemoModeController, mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, + mMobileFactory, mMainHandler, mFeatureFlags, mock(DumpManager.class), @@ -192,6 +195,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mDemoModeController, mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, + mMobileFactory, mMainHandler, mFeatureFlags, mock(DumpManager.class), @@ -277,6 +281,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { mDemoModeController, mock(CarrierConfigTracker.class), mWifiStatusTrackerFactory, + mMobileFactory, mMainHandler, mFeatureFlags, mock(DumpManager.class),