Merge changes I0fdcc086,I6beaccc5,Ice240ec2 into tm-qpr-dev

* changes:
  Explicitly collect on mobile subscriptions in MobuileUiAdapter
  Disable `NetworkControllerImpl`'s demo mode based on flag
  Add DATA_UNKNOWN to the data state parsing
This commit is contained in:
TreeHugger Robot
2022-12-06 23:43:42 +00:00
committed by Android (Google) Code Review
8 changed files with 68 additions and 24 deletions

View File

@@ -78,6 +78,7 @@ import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.plugins.log.LogLevel; import com.android.systemui.plugins.log.LogLevel;
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
import com.android.systemui.settings.UserTracker; import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.DataSaverControllerImpl; import com.android.systemui.statusbar.policy.DataSaverControllerImpl;
@@ -193,6 +194,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
private final Executor mBgExecutor; private final Executor mBgExecutor;
// Handler that all callbacks are made on. // Handler that all callbacks are made on.
private final CallbackHandler mCallbackHandler; private final CallbackHandler mCallbackHandler;
private final StatusBarPipelineFlags mStatusBarPipelineFlags;
private int mEmergencySource; private int mEmergencySource;
private boolean mIsEmergency; private boolean mIsEmergency;
@@ -243,6 +245,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
TelephonyListenerManager telephonyListenerManager, TelephonyListenerManager telephonyListenerManager,
@Nullable WifiManager wifiManager, @Nullable WifiManager wifiManager,
AccessPointControllerImpl accessPointController, AccessPointControllerImpl accessPointController,
StatusBarPipelineFlags statusBarPipelineFlags,
DemoModeController demoModeController, DemoModeController demoModeController,
CarrierConfigTracker carrierConfigTracker, CarrierConfigTracker carrierConfigTracker,
WifiStatusTrackerFactory trackerFactory, WifiStatusTrackerFactory trackerFactory,
@@ -261,6 +264,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
bgExecutor, bgExecutor,
callbackHandler, callbackHandler,
accessPointController, accessPointController,
statusBarPipelineFlags,
new DataUsageController(context), new DataUsageController(context),
new SubscriptionDefaults(), new SubscriptionDefaults(),
deviceProvisionedController, deviceProvisionedController,
@@ -288,6 +292,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
Executor bgExecutor, Executor bgExecutor,
CallbackHandler callbackHandler, CallbackHandler callbackHandler,
AccessPointControllerImpl accessPointController, AccessPointControllerImpl accessPointController,
StatusBarPipelineFlags statusBarPipelineFlags,
DataUsageController dataUsageController, DataUsageController dataUsageController,
SubscriptionDefaults defaultsHandler, SubscriptionDefaults defaultsHandler,
DeviceProvisionedController deviceProvisionedController, DeviceProvisionedController deviceProvisionedController,
@@ -309,6 +314,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mBgLooper = bgLooper; mBgLooper = bgLooper;
mBgExecutor = bgExecutor; mBgExecutor = bgExecutor;
mCallbackHandler = callbackHandler; mCallbackHandler = callbackHandler;
mStatusBarPipelineFlags = statusBarPipelineFlags;
mDataSaverController = new DataSaverControllerImpl(context); mDataSaverController = new DataSaverControllerImpl(context);
mBroadcastDispatcher = broadcastDispatcher; mBroadcastDispatcher = broadcastDispatcher;
mMobileFactory = mobileFactory; mMobileFactory = mobileFactory;
@@ -1334,7 +1340,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mWifiSignalController.notifyListeners(); mWifiSignalController.notifyListeners();
} }
String sims = args.getString("sims"); String sims = args.getString("sims");
if (sims != null) { if (sims != null && !mStatusBarPipelineFlags.useNewMobileIcons()) {
int num = MathUtils.constrain(Integer.parseInt(sims), 1, 8); int num = MathUtils.constrain(Integer.parseInt(sims), 1, 8);
List<SubscriptionInfo> subs = new ArrayList<>(); List<SubscriptionInfo> subs = new ArrayList<>();
if (num != mMobileSignalControllers.size()) { if (num != mMobileSignalControllers.size()) {
@@ -1357,7 +1363,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected); mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
} }
String mobile = args.getString("mobile"); String mobile = args.getString("mobile");
if (mobile != null) { if (mobile != null && !mStatusBarPipelineFlags.useNewMobileIcons()) {
boolean show = mobile.equals("show"); boolean show = mobile.equals("show");
String datatype = args.getString("datatype"); String datatype = args.getString("datatype");
String slotString = args.getString("slot"); String slotString = args.getString("slot");
@@ -1442,7 +1448,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
controller.notifyListeners(); controller.notifyListeners();
} }
String carrierNetworkChange = args.getString("carriernetworkchange"); String carrierNetworkChange = args.getString("carriernetworkchange");
if (carrierNetworkChange != null) { if (carrierNetworkChange != null && !mStatusBarPipelineFlags.useNewMobileIcons()) {
boolean show = carrierNetworkChange.equals("show"); boolean show = carrierNetworkChange.equals("show");
for (int i = 0; i < mMobileSignalControllers.size(); i++) { for (int i = 0; i < mMobileSignalControllers.size(); i++) {
MobileSignalController controller = mMobileSignalControllers.valueAt(i); MobileSignalController controller = mMobileSignalControllers.valueAt(i);

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.pipeline.dagger package com.android.systemui.statusbar.pipeline.dagger
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.TableLogBufferFactory import com.android.systemui.log.table.TableLogBufferFactory
@@ -29,6 +30,7 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupR
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepositoryImpl import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepositoryImpl
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl
import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter
import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy
import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxyImpl import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxyImpl
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
@@ -40,6 +42,8 @@ import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiIntera
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
@Module @Module
abstract class StatusBarPipelineModule { abstract class StatusBarPipelineModule {
@@ -52,8 +56,7 @@ abstract class StatusBarPipelineModule {
@Binds @Binds
abstract fun connectivityRepository(impl: ConnectivityRepositoryImpl): ConnectivityRepository abstract fun connectivityRepository(impl: ConnectivityRepositoryImpl): ConnectivityRepository
@Binds @Binds abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository
abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository
@Binds @Binds
abstract fun wifiInteractor(impl: WifiInteractorImpl): WifiInteractor abstract fun wifiInteractor(impl: WifiInteractorImpl): WifiInteractor
@@ -63,15 +66,18 @@ abstract class StatusBarPipelineModule {
impl: MobileConnectionsRepositoryImpl impl: MobileConnectionsRepositoryImpl
): MobileConnectionsRepository ): MobileConnectionsRepository
@Binds @Binds abstract fun userSetupRepository(impl: UserSetupRepositoryImpl): UserSetupRepository
abstract fun userSetupRepository(impl: UserSetupRepositoryImpl): UserSetupRepository
@Binds @Binds abstract fun mobileMappingsProxy(impl: MobileMappingsProxyImpl): MobileMappingsProxy
abstract fun mobileMappingsProxy(impl: MobileMappingsProxyImpl): MobileMappingsProxy
@Binds @Binds
abstract fun mobileIconsInteractor(impl: MobileIconsInteractorImpl): MobileIconsInteractor abstract fun mobileIconsInteractor(impl: MobileIconsInteractorImpl): MobileIconsInteractor
@Binds
@IntoMap
@ClassKey(MobileUiAdapter::class)
abstract fun bindFeature(impl: MobileUiAdapter): CoreStartable
@Module @Module
companion object { companion object {
@JvmStatic @JvmStatic

View File

@@ -20,6 +20,7 @@ import android.telephony.TelephonyManager.DATA_CONNECTED
import android.telephony.TelephonyManager.DATA_CONNECTING import android.telephony.TelephonyManager.DATA_CONNECTING
import android.telephony.TelephonyManager.DATA_DISCONNECTED import android.telephony.TelephonyManager.DATA_DISCONNECTED
import android.telephony.TelephonyManager.DATA_DISCONNECTING import android.telephony.TelephonyManager.DATA_DISCONNECTING
import android.telephony.TelephonyManager.DATA_UNKNOWN
import android.telephony.TelephonyManager.DataState import android.telephony.TelephonyManager.DataState
/** Internal enum representation of the telephony data connection states */ /** Internal enum representation of the telephony data connection states */
@@ -28,6 +29,7 @@ enum class DataConnectionState(@DataState val dataState: Int) {
Connecting(DATA_CONNECTING), Connecting(DATA_CONNECTING),
Disconnected(DATA_DISCONNECTED), Disconnected(DATA_DISCONNECTED),
Disconnecting(DATA_DISCONNECTING), Disconnecting(DATA_DISCONNECTING),
Unknown(DATA_UNKNOWN),
} }
fun @receiver:DataState Int.toDataConnectionType(): DataConnectionState = fun @receiver:DataState Int.toDataConnectionType(): DataConnectionState =
@@ -36,5 +38,6 @@ fun @receiver:DataState Int.toDataConnectionType(): DataConnectionState =
DATA_CONNECTING -> DataConnectionState.Connecting DATA_CONNECTING -> DataConnectionState.Connecting
DATA_DISCONNECTED -> DataConnectionState.Disconnected DATA_DISCONNECTED -> DataConnectionState.Disconnected
DATA_DISCONNECTING -> DataConnectionState.Disconnecting DATA_DISCONNECTING -> DataConnectionState.Disconnecting
else -> throw IllegalArgumentException("unknown data state received") DATA_UNKNOWN -> DataConnectionState.Unknown
else -> throw IllegalArgumentException("unknown data state received $this")
} }

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.pipeline.mobile.ui package com.android.systemui.statusbar.pipeline.mobile.ui
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusBarIconController
@@ -29,9 +30,10 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
/** /**
* This class is intended to provide a context to collect on the * This class is intended to provide a context to collect on the
@@ -50,9 +52,9 @@ constructor(
interactor: MobileIconsInteractor, interactor: MobileIconsInteractor,
private val iconController: StatusBarIconController, private val iconController: StatusBarIconController,
private val iconsViewModelFactory: MobileIconsViewModel.Factory, private val iconsViewModelFactory: MobileIconsViewModel.Factory,
@Application scope: CoroutineScope, @Application private val scope: CoroutineScope,
private val statusBarPipelineFlags: StatusBarPipelineFlags, private val statusBarPipelineFlags: StatusBarPipelineFlags,
) { ) : CoreStartable {
private val mobileSubIds: Flow<List<Int>> = private val mobileSubIds: Flow<List<Int>> =
interactor.filteredSubscriptions.mapLatest { infos -> interactor.filteredSubscriptions.mapLatest { infos ->
infos.map { subscriptionInfo -> subscriptionInfo.subscriptionId } infos.map { subscriptionInfo -> subscriptionInfo.subscriptionId }
@@ -66,18 +68,19 @@ constructor(
* NOTE: this should go away as the view presenter learns more about this data pipeline * NOTE: this should go away as the view presenter learns more about this data pipeline
*/ */
private val mobileSubIdsState: StateFlow<List<Int>> = private val mobileSubIdsState: StateFlow<List<Int>> =
mobileSubIds mobileSubIds.stateIn(scope, SharingStarted.WhileSubscribed(), listOf())
.onEach {
// Only notify the icon controller if we want to *render* the new icons. override fun start() {
// Note that this flow may still run if // Only notify the icon controller if we want to *render* the new icons.
// [statusBarPipelineFlags.runNewMobileIconsBackend] is true because we may want to // Note that this flow may still run if
// get the logging data without rendering. // [statusBarPipelineFlags.runNewMobileIconsBackend] is true because we may want to
if (statusBarPipelineFlags.useNewMobileIcons()) { // get the logging data without rendering.
// Notify the icon controller here so that it knows to add icons if (statusBarPipelineFlags.useNewMobileIcons()) {
iconController.setNewMobileIconSubIds(it) scope.launch {
} mobileSubIds.collectLatest { iconController.setNewMobileIconSubIds(it) }
} }
.stateIn(scope, SharingStarted.WhileSubscribed(), listOf()) }
}
/** /**
* Create a MobileIconsViewModel for a given [IconManager], and bind it to to the manager's * Create a MobileIconsViewModel for a given [IconManager], and bind it to to the manager's

View File

@@ -72,6 +72,7 @@ import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.log.LogBuffer; import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.settings.UserTracker; import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy; import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy;
import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
@@ -245,6 +246,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mMockProvisionController, mMockProvisionController,

View File

@@ -49,6 +49,7 @@ import com.android.settingslib.mobile.TelephonyIcons;
import com.android.settingslib.net.DataUsageController; import com.android.settingslib.net.DataUsageController;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.log.LogBuffer; import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.util.CarrierConfigTracker; import com.android.systemui.util.CarrierConfigTracker;
@@ -150,6 +151,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mock(DeviceProvisionedController.class), mock(DeviceProvisionedController.class),

View File

@@ -44,6 +44,7 @@ import com.android.settingslib.net.DataUsageController;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.log.LogBuffer; import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.util.CarrierConfigTracker; import com.android.systemui.util.CarrierConfigTracker;
@@ -78,6 +79,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mMockProvisionController, mMockProvisionController,
@@ -115,6 +117,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mMockProvisionController, mMockProvisionController,
@@ -150,6 +153,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mock(DeviceProvisionedController.class), mock(DeviceProvisionedController.class),
@@ -188,6 +192,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mock(DeviceProvisionedController.class), mock(DeviceProvisionedController.class),
@@ -274,6 +279,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mFakeExecutor, mFakeExecutor,
mCallbackHandler, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(AccessPointControllerImpl.class),
mock(StatusBarPipelineFlags.class),
mock(DataUsageController.class), mock(DataUsageController.class),
mMockSubDefaults, mMockSubDefaults,
mock(DeviceProvisionedController.class), mock(DeviceProvisionedController.class),

View File

@@ -31,6 +31,7 @@ import android.telephony.TelephonyManager.DATA_CONNECTED
import android.telephony.TelephonyManager.DATA_CONNECTING import android.telephony.TelephonyManager.DATA_CONNECTING
import android.telephony.TelephonyManager.DATA_DISCONNECTED import android.telephony.TelephonyManager.DATA_DISCONNECTED
import android.telephony.TelephonyManager.DATA_DISCONNECTING import android.telephony.TelephonyManager.DATA_DISCONNECTING
import android.telephony.TelephonyManager.DATA_UNKNOWN
import android.telephony.TelephonyManager.NETWORK_TYPE_LTE import android.telephony.TelephonyManager.NETWORK_TYPE_LTE
import android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN import android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
@@ -220,6 +221,21 @@ class MobileConnectionRepositoryTest : SysuiTestCase() {
job.cancel() job.cancel()
} }
@Test
fun testFlowForSubId_dataConnectionState_unknown() =
runBlocking(IMMEDIATE) {
var latest: MobileSubscriptionModel? = null
val job = underTest.subscriptionModelFlow.onEach { latest = it }.launchIn(this)
val callback =
getTelephonyCallbackForType<TelephonyCallback.DataConnectionStateListener>()
callback.onDataConnectionStateChanged(DATA_UNKNOWN, 200 /* unused */)
assertThat(latest?.dataConnectionState).isEqualTo(DataConnectionState.Unknown)
job.cancel()
}
@Test @Test
fun testFlowForSubId_dataActivity() = fun testFlowForSubId_dataActivity() =
runBlocking(IMMEDIATE) { runBlocking(IMMEDIATE) {