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