diff options
14 files changed, 38 insertions, 172 deletions
diff --git a/data/etc/com.android.systemui.xml b/data/etc/com.android.systemui.xml index e0e13f59b706..6dcee6d8bd31 100644 --- a/data/etc/com.android.systemui.xml +++ b/data/etc/com.android.systemui.xml @@ -49,6 +49,7 @@ <permission name="android.permission.READ_FRAME_BUFFER"/> <permission name="android.permission.READ_NETWORK_USAGE_HISTORY"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> + <permission name="android.permission.READ_PRECISE_PHONE_STATE"/> <permission name="android.permission.REAL_GET_TASKS"/> <permission name="android.permission.REQUEST_NETWORK_SCORES"/> <permission name="android.permission.RECEIVE_MEDIA_RESOURCE_USAGE"/> diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index e96aead597b3..c1e0877d2fe5 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -68,6 +68,7 @@ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" /> + <uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" /> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepository.kt index e0d156aa25f3..c640baa6e12e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileConnectionsRepository.kt @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.pipeline.mobile.data.repository -import android.provider.Settings import android.telephony.CarrierConfigManager import android.telephony.SubscriptionManager import com.android.settingslib.SignalIcon.MobileIconGroup @@ -53,9 +52,6 @@ interface MobileConnectionsRepository { /** Get or create a repository for the line of service for the given subscription ID */ fun getRepoForSubId(subId: Int): MobileConnectionRepository - /** Observe changes to the [Settings.Global.MOBILE_DATA] setting */ - val globalMobileDataSettingChangedEvent: Flow<Unit> - /** * [Config] is an object that tracks relevant configuration flags for a given subscription ID. * In the case of [MobileMappings], it's hard-coded to check the default data subscription's diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt index b93985604fb3..7038a3bb0487 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcher.kt @@ -156,9 +156,6 @@ constructor( realRepository.defaultMobileNetworkConnectivity.value ) - override val globalMobileDataSettingChangedEvent: Flow<Unit> = - activeRepo.flatMapLatest { it.globalMobileDataSettingChangedEvent } - override fun getRepoForSubId(subId: Int): MobileConnectionRepository { if (isDemoMode.value) { return demoMobileConnectionsRepository.getRepoForSubId(subId) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt index 108834521ebf..58cd36e59d52 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepository.kt @@ -185,8 +185,6 @@ constructor( return CacheContainer(repo, lastMobileState = null) } - override val globalMobileDataSettingChangedEvent = MutableStateFlow(Unit) - fun startProcessingCommands() { mobileDemoCommandJob = scope.launch { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt index 0f30ae249c31..dd2cc928f7ad 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepository.kt @@ -26,7 +26,6 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConn import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -50,7 +49,6 @@ class FullMobileConnectionRepository( override val tableLogBuffer: TableLogBuffer, private val defaultNetworkName: NetworkNameModel, private val networkNameSeparator: String, - private val globalMobileDataSettingChangedEvent: Flow<Unit>, @Application scope: CoroutineScope, private val mobileRepoFactory: MobileConnectionRepositoryImpl.Factory, private val carrierMergedRepoFactory: CarrierMergedConnectionRepository.Factory, @@ -84,7 +82,6 @@ class FullMobileConnectionRepository( tableLogBuffer, defaultNetworkName, networkNameSeparator, - globalMobileDataSettingChangedEvent, ) } @@ -150,7 +147,6 @@ class FullMobileConnectionRepository( startingIsCarrierMerged: Boolean, defaultNetworkName: NetworkNameModel, networkNameSeparator: String, - globalMobileDataSettingChangedEvent: Flow<Unit>, ): FullMobileConnectionRepository { val mobileLogger = logFactory.getOrCreate(tableBufferLogName(subId), MOBILE_CONNECTION_BUFFER_SIZE) @@ -161,7 +157,6 @@ class FullMobileConnectionRepository( mobileLogger, defaultNetworkName, networkNameSeparator, - globalMobileDataSettingChangedEvent, scope, mobileRepoFactory, carrierMergedRepoFactory, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt index 266430f13e33..1d0c9e9b8ed4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryImpl.kt @@ -18,8 +18,6 @@ package com.android.systemui.statusbar.pipeline.mobile.data.repository.prod import android.content.Context import android.content.IntentFilter -import android.database.ContentObserver -import android.provider.Settings.Global import android.telephony.CellSignalStrength import android.telephony.CellSignalStrengthCdma import android.telephony.ServiceState @@ -53,7 +51,6 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConn import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.data.model.toMobileDataActivityModel -import com.android.systemui.util.settings.GlobalSettings import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -62,9 +59,11 @@ import kotlinx.coroutines.asExecutor import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.merge @@ -83,10 +82,8 @@ class MobileConnectionRepositoryImpl( defaultNetworkName: NetworkNameModel, networkNameSeparator: String, private val telephonyManager: TelephonyManager, - private val globalSettings: GlobalSettings, systemUiCarrierConfig: SystemUiCarrierConfig, broadcastDispatcher: BroadcastDispatcher, - globalMobileDataSettingChangedEvent: Flow<Unit>, mobileMappingsProxy: MobileMappingsProxy, bgDispatcher: CoroutineDispatcher, logger: ConnectivityPipelineLogger, @@ -117,7 +114,8 @@ class MobileConnectionRepositoryImpl( TelephonyCallback.DataConnectionStateListener, TelephonyCallback.DataActivityListener, TelephonyCallback.CarrierNetworkListener, - TelephonyCallback.DisplayInfoListener { + TelephonyCallback.DisplayInfoListener, + TelephonyCallback.DataEnabledListener { override fun onServiceStateChanged(serviceState: ServiceState) { logger.logOnServiceStateChanged(serviceState, subId) state = @@ -206,6 +204,12 @@ class MobileConnectionRepositoryImpl( state = state.copy(resolvedNetworkType = networkType) trySend(state) } + + override fun onDataEnabledChanged(enabled: Boolean, reason: Int) { + logger.logOnDataEnabledChanged(enabled, subId) + _dataEnabled.value = enabled + trySend(state) + } } telephonyManager.registerTelephonyCallback(bgDispatcher.asExecutor(), callback) awaitClose { telephonyManager.unregisterTelephonyCallback(callback) } @@ -230,24 +234,6 @@ class MobileConnectionRepositoryImpl( } .stateIn(scope, SharingStarted.WhileSubscribed(), DEFAULT_NUM_LEVELS) - /** Produces whenever the mobile data setting changes for this subId */ - private val localMobileDataSettingChangedEvent: Flow<Unit> = conflatedCallbackFlow { - val observer = - object : ContentObserver(null) { - override fun onChange(selfChange: Boolean) { - trySend(Unit) - } - } - - globalSettings.registerContentObserver( - globalSettings.getUriFor("${Global.MOBILE_DATA}$subId"), - /* notifyForDescendants */ true, - observer - ) - - awaitClose { context.contentResolver.unregisterContentObserver(observer) } - } - /** * There are a few cases where we will need to poll [TelephonyManager] so we can update some * internal state where callbacks aren't provided. Any of those events should be merged into @@ -256,8 +242,6 @@ class MobileConnectionRepositoryImpl( private val telephonyPollingEvent: Flow<Unit> = merge( telephonyCallbackEvent, - localMobileDataSettingChangedEvent, - globalMobileDataSettingChangedEvent, ) override val cdmaRoaming: StateFlow<Boolean> = @@ -284,21 +268,19 @@ class MobileConnectionRepositoryImpl( ) .stateIn(scope, SharingStarted.WhileSubscribed(), defaultNetworkName) - override val dataEnabled: StateFlow<Boolean> = run { - val initial = dataConnectionAllowed() - telephonyPollingEvent - .mapLatest { dataConnectionAllowed() } - .distinctUntilChanged() + private val _dataEnabled = MutableStateFlow(telephonyManager.isDataConnectionAllowed) + override val dataEnabled = + connectionInfo + // _dataEnabled is updated in connectionInfo's callback, so we need to make sure that + // this flow declares a dependency on that callback + .flatMapLatest { _dataEnabled } .logDiffsForTable( mobileLogger, columnPrefix = "", columnName = "dataEnabled", - initialValue = initial, + initialValue = _dataEnabled.value ) - .stateIn(scope, SharingStarted.WhileSubscribed(), initial) - } - - private fun dataConnectionAllowed(): Boolean = telephonyManager.isDataConnectionAllowed + .stateIn(scope, SharingStarted.WhileSubscribed(), _dataEnabled.value) class Factory @Inject @@ -307,7 +289,6 @@ class MobileConnectionRepositoryImpl( private val context: Context, private val telephonyManager: TelephonyManager, private val logger: ConnectivityPipelineLogger, - private val globalSettings: GlobalSettings, private val carrierConfigRepository: CarrierConfigRepository, private val mobileMappingsProxy: MobileMappingsProxy, @Background private val bgDispatcher: CoroutineDispatcher, @@ -318,7 +299,6 @@ class MobileConnectionRepositoryImpl( mobileLogger: TableLogBuffer, defaultNetworkName: NetworkNameModel, networkNameSeparator: String, - globalMobileDataSettingChangedEvent: Flow<Unit>, ): MobileConnectionRepository { return MobileConnectionRepositoryImpl( context, @@ -326,10 +306,8 @@ class MobileConnectionRepositoryImpl( defaultNetworkName, networkNameSeparator, telephonyManager.createForSubscriptionId(subId), - globalSettings, carrierConfigRepository.getOrCreateConfigForSubId(subId), broadcastDispatcher, - globalMobileDataSettingChangedEvent, mobileMappingsProxy, bgDispatcher, logger, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt index 39ad31f7eee8..10f48a36e7f6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt @@ -19,14 +19,12 @@ package com.android.systemui.statusbar.pipeline.mobile.data.repository.prod import android.annotation.SuppressLint import android.content.Context import android.content.IntentFilter -import android.database.ContentObserver import android.net.ConnectivityManager import android.net.ConnectivityManager.NetworkCallback import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED import android.net.NetworkCapabilities.TRANSPORT_CELLULAR -import android.provider.Settings.Global.MOBILE_DATA import android.telephony.CarrierConfigManager import android.telephony.SubscriptionInfo import android.telephony.SubscriptionManager @@ -54,7 +52,6 @@ import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository import com.android.systemui.util.kotlin.pairwise -import com.android.systemui.util.settings.GlobalSettings import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -87,7 +84,6 @@ constructor( private val logger: ConnectivityPipelineLogger, mobileMappingsProxy: MobileMappingsProxy, broadcastDispatcher: BroadcastDispatcher, - private val globalSettings: GlobalSettings, private val context: Context, @Background private val bgDispatcher: CoroutineDispatcher, @Application private val scope: CoroutineScope, @@ -222,29 +218,6 @@ constructor( ?: createRepositoryForSubId(subId).also { subIdRepositoryCache[subId] = it } } - /** - * In single-SIM devices, the [MOBILE_DATA] setting is phone-wide. For multi-SIM, the individual - * connection repositories also observe the URI for [MOBILE_DATA] + subId. - */ - override val globalMobileDataSettingChangedEvent: Flow<Unit> = - conflatedCallbackFlow { - val observer = - object : ContentObserver(null) { - override fun onChange(selfChange: Boolean) { - trySend(Unit) - } - } - - globalSettings.registerContentObserver( - globalSettings.getUriFor(MOBILE_DATA), - true, - observer - ) - - awaitClose { context.contentResolver.unregisterContentObserver(observer) } - } - .logInputChange(logger, "globalMobileDataSettingChangedEvent") - @SuppressLint("MissingPermission") override val defaultMobileNetworkConnectivity: StateFlow<MobileConnectivityModel> = conflatedCallbackFlow { @@ -315,7 +288,6 @@ constructor( isCarrierMerged(subId), defaultNetworkName, networkNameSeparator, - globalMobileDataSettingChangedEvent, ) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt index a25e52ba845f..6796a94cf6a9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLogger.kt @@ -240,6 +240,18 @@ constructor( ) } + fun logOnDataEnabledChanged(enabled: Boolean, subId: Int) { + buffer.log( + SB_LOGGING_TAG, + LogLevel.INFO, + { + int1 = subId + bool1 = enabled + }, + { "onDataEnabledChanged: subId=$int1 enabled=$bool1" }, + ) + } + companion object { const val SB_LOGGING_TAG = "SbConnectivity" diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionsRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionsRepository.kt index 0add905e2750..cb9eb70d61dc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionsRepository.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/FakeMobileConnectionsRepository.kt @@ -71,9 +71,6 @@ class FakeMobileConnectionsRepository( ?: FakeMobileConnectionRepository(subId, tableLogBuffer).also { subIdRepos[subId] = it } } - private val _globalMobileDataSettingChangedEvent = MutableStateFlow(Unit) - override val globalMobileDataSettingChangedEvent = _globalMobileDataSettingChangedEvent - override val defaultDataSubRatConfig = MutableStateFlow(MobileMappings.Config()) private val _defaultMobileIconMapping = MutableStateFlow(TEST_MAPPING) @@ -94,10 +91,6 @@ class FakeMobileConnectionsRepository( _mobileConnectivity.value = model } - suspend fun triggerGlobalMobileDataSettingChangedEvent() { - _globalMobileDataSettingChangedEvent.emit(Unit) - } - fun setActiveMobileDataSubscriptionId(subId: Int) { _activeMobileDataSubscriptionId.value = subId } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt index 0859d140c3b4..96cca4440769 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt @@ -40,7 +40,6 @@ import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.kotlinArgumentCaptor import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever -import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.CoroutineScope @@ -85,7 +84,6 @@ class MobileRepositorySwitcherTest : SysuiTestCase() { @Mock private lateinit var demoModeController: DemoModeController @Mock private lateinit var dumpManager: DumpManager - private val globalSettings = FakeSettings() private val fakeNetworkEventsFlow = MutableStateFlow<FakeNetworkEventModel?>(null) private val mobileMappings = FakeMobileMappingsProxy() @@ -118,7 +116,6 @@ class MobileRepositorySwitcherTest : SysuiTestCase() { logger, mobileMappings, fakeBroadcastDispatcher, - globalSettings, context, IMMEDIATE, scope, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt index c02a4dfd074c..24b9f7d55da5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt @@ -23,9 +23,7 @@ import com.android.systemui.log.table.TableLogBufferFactory import com.android.systemui.statusbar.pipeline.mobile.data.model.MobileConnectionModel import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionRepository -import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository -import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock @@ -33,7 +31,6 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.test.TestScope @@ -57,22 +54,15 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { private val testDispatcher = UnconfinedTestDispatcher() private val testScope = TestScope(testDispatcher) - private val mobileMappings = FakeMobileMappingsProxy() private val tableLogBuffer = mock<TableLogBuffer>() private val mobileFactory = mock<MobileConnectionRepositoryImpl.Factory>() private val carrierMergedFactory = mock<CarrierMergedConnectionRepository.Factory>() - private lateinit var connectionsRepo: FakeMobileConnectionsRepository - private val globalMobileDataSettingChangedEvent: Flow<Unit> - get() = connectionsRepo.globalMobileDataSettingChangedEvent - private lateinit var mobileRepo: FakeMobileConnectionRepository private lateinit var carrierMergedRepo: FakeMobileConnectionRepository @Before fun setUp() { - connectionsRepo = FakeMobileConnectionsRepository(mobileMappings, tableLogBuffer) - mobileRepo = FakeMobileConnectionRepository(SUB_ID, tableLogBuffer) carrierMergedRepo = FakeMobileConnectionRepository(SUB_ID, tableLogBuffer) @@ -82,7 +72,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { any(), eq(DEFAULT_NAME), eq(SEP), - eq(globalMobileDataSettingChangedEvent), ) ) .thenReturn(mobileRepo) @@ -109,7 +98,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { tableLogBuffer, DEFAULT_NAME, SEP, - globalMobileDataSettingChangedEvent ) } @@ -310,7 +298,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { startingIsCarrierMerged = false, DEFAULT_NAME, SEP, - globalMobileDataSettingChangedEvent, ) val connection1Repeat = @@ -319,7 +306,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { startingIsCarrierMerged = false, DEFAULT_NAME, SEP, - globalMobileDataSettingChangedEvent, ) assertThat(connection1.tableLogBuffer) @@ -345,7 +331,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { startingIsCarrierMerged = false, DEFAULT_NAME, SEP, - globalMobileDataSettingChangedEvent, ) // WHEN a connection with the same sub ID but carrierMerged = true is created @@ -355,7 +340,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { startingIsCarrierMerged = true, DEFAULT_NAME, SEP, - globalMobileDataSettingChangedEvent, ) // THEN the same table is re-used @@ -374,7 +358,6 @@ class FullMobileConnectionRepositoryTest : SysuiTestCase() { tableLogBuffer, DEFAULT_NAME, SEP, - globalMobileDataSettingChangedEvent, testScope.backgroundScope, mobileFactory, carrierMergedFactory, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt index b8dda780755e..77bdf9e307e8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionRepositoryTest.kt @@ -17,8 +17,6 @@ package com.android.systemui.statusbar.pipeline.mobile.data.repository.prod import android.content.Intent -import android.os.UserHandle -import android.provider.Settings import android.telephony.CarrierConfigManager.KEY_INFLATE_SIGNAL_STRENGTH_BOOL import android.telephony.CellSignalStrengthCdma import android.telephony.NetworkRegistrationInfo @@ -74,7 +72,6 @@ import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever -import com.android.systemui.util.settings.FakeSettings import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -103,7 +100,6 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { private val scope = CoroutineScope(IMMEDIATE) private val mobileMappings = FakeMobileMappingsProxy() - private val globalSettings = FakeSettings() private val systemUiCarrierConfig = SystemUiCarrierConfig( SUB_1_ID, @@ -113,7 +109,6 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) - globalSettings.userId = UserHandle.USER_ALL whenever(telephonyManager.subscriptionId).thenReturn(SUB_1_ID) connectionsRepo = FakeMobileConnectionsRepository(mobileMappings, tableLogger) @@ -125,10 +120,8 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { DEFAULT_NAME, SEP, telephonyManager, - globalSettings, systemUiCarrierConfig, fakeBroadcastDispatcher, - connectionsRepo.globalMobileDataSettingChangedEvent, mobileMappings, IMMEDIATE, logger, @@ -362,52 +355,26 @@ class MobileConnectionRepositoryTest : SysuiTestCase() { @Test fun dataEnabled_initial_false() = runBlocking(IMMEDIATE) { - whenever(telephonyManager.isDataConnectionAllowed).thenReturn(true) - - assertThat(underTest.dataEnabled.value).isFalse() - } - - @Test - fun dataEnabled_isEnabled_true() = - runBlocking(IMMEDIATE) { - whenever(telephonyManager.isDataConnectionAllowed).thenReturn(true) - val job = underTest.dataEnabled.launchIn(this) - - assertThat(underTest.dataEnabled.value).isTrue() - - job.cancel() - } - - @Test - fun dataEnabled_isDisabled() = - runBlocking(IMMEDIATE) { whenever(telephonyManager.isDataConnectionAllowed).thenReturn(false) - val job = underTest.dataEnabled.launchIn(this) assertThat(underTest.dataEnabled.value).isFalse() - - job.cancel() } @Test - fun isDataConnectionAllowed_subIdSettingUpdate_valueUpdated() = + fun `is data enabled - tracks telephony callback`() = runBlocking(IMMEDIATE) { - val subIdSettingName = "${Settings.Global.MOBILE_DATA}$SUB_1_ID" - var latest: Boolean? = null val job = underTest.dataEnabled.onEach { latest = it }.launchIn(this) - // We don't read the setting directly, we query telephony when changes happen whenever(telephonyManager.isDataConnectionAllowed).thenReturn(false) - globalSettings.putInt(subIdSettingName, 0) - assertThat(latest).isFalse() + assertThat(underTest.dataEnabled.value).isFalse() - whenever(telephonyManager.isDataConnectionAllowed).thenReturn(true) - globalSettings.putInt(subIdSettingName, 1) + val callback = getTelephonyCallbackForType<TelephonyCallback.DataEnabledListener>() + + callback.onDataEnabledChanged(true, 1) assertThat(latest).isTrue() - whenever(telephonyManager.isDataConnectionAllowed).thenReturn(false) - globalSettings.putInt(subIdSettingName, 0) + callback.onDataEnabledChanged(false, 1) assertThat(latest).isFalse() job.cancel() diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt index f9567fc1eafc..b73348c18560 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt @@ -23,7 +23,6 @@ import android.net.NetworkCapabilities import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED import android.net.NetworkCapabilities.TRANSPORT_CELLULAR import android.os.ParcelUuid -import android.provider.Settings import android.telephony.CarrierConfigManager import android.telephony.SubscriptionInfo import android.telephony.SubscriptionManager @@ -50,7 +49,6 @@ import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever -import com.android.systemui.util.settings.FakeSettings import com.google.common.truth.Truth.assertThat import java.util.UUID import kotlinx.coroutines.CoroutineScope @@ -91,7 +89,6 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { private val mobileMappings = FakeMobileMappingsProxy() private val scope = CoroutineScope(IMMEDIATE) - private val globalSettings = FakeSettings() @Before fun setUp() { @@ -136,7 +133,6 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { context = context, telephonyManager = telephonyManager, bgDispatcher = IMMEDIATE, - globalSettings = globalSettings, logger = logger, mobileMappingsProxy = mobileMappings, scope = scope, @@ -163,7 +159,6 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { logger, mobileMappings, fakeBroadcastDispatcher, - globalSettings, context, IMMEDIATE, scope, @@ -556,24 +551,6 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { } @Test - fun globalMobileDataSettingsChangedEvent_producesOnSettingChange() = - runBlocking(IMMEDIATE) { - var produced = false - val job = - underTest.globalMobileDataSettingChangedEvent - .onEach { produced = true } - .launchIn(this) - - assertThat(produced).isFalse() - - globalSettings.putInt(Settings.Global.MOBILE_DATA, 0) - - assertThat(produced).isTrue() - - job.cancel() - } - - @Test fun mobileConnectivity_isConnected_isNotValidated() = runBlocking(IMMEDIATE) { val caps = createCapabilities(connected = true, validated = false) @@ -641,7 +618,6 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { logger, mobileMappings, fakeBroadcastDispatcher, - globalSettings, context, IMMEDIATE, scope, |