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
This commit is contained in:
Evan Laird
2022-07-08 11:11:01 -04:00
parent 531b63c1a6
commit 69a8aff35d
5 changed files with 102 additions and 14 deletions

View File

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

View File

@@ -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<SubscriptionInfo> 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;

View File

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

View File

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

View File

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