[Sb refactor] Ensure config is fetched on flow start

In the case where the `CARRIER_CONFIG_CHANGED` broadcast is sent out
before the default data sub RAT config is read, it will read the
system-defined default carrier config instead of the appropriate one for
the current default data sub.

This change is simple: make sure to always fetch the system current
carrier config when the flow starts.

Bug: 280390475
Test: MobileConnectionsRepositoryTest
Change-Id: I868a840ee8465b0313bc85e5c35c0d40ca9d509a
This commit is contained in:
Evan Laird
2023-05-05 18:21:58 -04:00
parent b98c2ee541
commit 651a424ace
2 changed files with 28 additions and 0 deletions

View File

@@ -233,6 +233,7 @@ constructor(
override val defaultDataSubRatConfig: StateFlow<Config> =
merge(defaultDataSubIdChangeEvent, carrierConfigChangedEvent)
.onStart { emit(Unit) }
.mapLatest { Config.readConfig(context) }
.distinctUntilChanged()
.onEach { logger.logDefaultDataSubRatConfig(it) }

View File

@@ -1111,6 +1111,33 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() {
assertThat(latest!!.showAtLeast3G).isTrue()
}
@Test
fun carrierConfig_initialValueIsFetched() =
testScope.runTest {
// Value starts out false
assertThat(underTest.defaultDataSubRatConfig.value.showAtLeast3G).isFalse()
overrideResource(R.bool.config_showMin3G, true)
val configFromContext = MobileMappings.Config.readConfig(context)
assertThat(configFromContext.showAtLeast3G).isTrue()
// WHEN the change event is fired
fakeBroadcastDispatcher.registeredReceivers.forEach { receiver ->
receiver.onReceive(
context,
Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)
)
}
// WHEN collection starts AFTER the broadcast is sent out
val latest by collectLastValue(underTest.defaultDataSubRatConfig)
// THEN the config has the updated value
assertThat(latest!!.areEqual(configFromContext)).isTrue()
assertThat(latest!!.showAtLeast3G).isTrue()
}
@Test
fun activeDataChange_inSameGroup_emitsUnit() =
testScope.runTest {