Skip to content
Snippets Groups Projects
Commit 5bc50b6c authored by Olivier St-Onge's avatar Olivier St-Onge
Browse files

Check if the device is provisioned before showing the satellite icon

Test: DeviceBasedSatelliteViewModelTest
Flag: none
Fixes: 331628184
Change-Id: I2ba8422871042390e257704f4ac7671a8f6f89e3
parent 4309dcd0
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
import com.android.systemui.statusbar.pipeline.satellite.data.DeviceBasedSatelliteRepository
import com.android.systemui.statusbar.pipeline.satellite.shared.model.SatelliteConnectionState
import com.android.systemui.statusbar.policy.domain.interactor.DeviceProvisioningInteractor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
......@@ -39,6 +40,7 @@ class DeviceBasedSatelliteInteractor
constructor(
val repo: DeviceBasedSatelliteRepository,
iconsInteractor: MobileIconsInteractor,
deviceProvisioningInteractor: DeviceProvisioningInteractor,
@Application scope: CoroutineScope,
) {
/** Must be observed by any UI showing Satellite iconography */
......@@ -69,6 +71,8 @@ constructor(
}
.stateIn(scope, SharingStarted.WhileSubscribed(), 0)
val isDeviceProvisioned: Flow<Boolean> = deviceProvisioningInteractor.isDeviceProvisioned
/** When all connections are considered OOS, satellite connectivity is potentially valid */
val areAllConnectionsOutOfService =
if (Flags.oemEnabledSatelliteFlag()) {
......
......@@ -56,10 +56,12 @@ constructor(
if (!allOos) {
flowOf(false)
} else {
combine(interactor.isSatelliteAllowed, airplaneModeRepository.isAirplaneMode) {
isSatelliteAllowed,
isAirplaneMode ->
isSatelliteAllowed && !isAirplaneMode
combine(
interactor.isSatelliteAllowed,
interactor.isDeviceProvisioned,
airplaneModeRepository.isAirplaneMode
) { isSatelliteAllowed, isDeviceProvisioned, isAirplaneMode ->
isSatelliteAllowed && isDeviceProvisioned && !isAirplaneMode
}
}
}
......
......@@ -26,6 +26,8 @@ import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobi
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.statusbar.pipeline.satellite.data.prod.FakeDeviceBasedSatelliteRepository
import com.android.systemui.statusbar.pipeline.satellite.shared.model.SatelliteConnectionState
import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository
import com.android.systemui.statusbar.policy.domain.interactor.DeviceProvisioningInteractor
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
......@@ -48,6 +50,9 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
)
private val repo = FakeDeviceBasedSatelliteRepository()
private val deviceProvisionedRepository = FakeDeviceProvisioningRepository()
private val deviceProvisioningInteractor =
DeviceProvisioningInteractor(deviceProvisionedRepository)
@Before
fun setUp() {
......@@ -55,6 +60,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
DeviceBasedSatelliteInteractor(
repo,
iconsInteractor,
deviceProvisioningInteractor,
testScope.backgroundScope,
)
}
......@@ -96,6 +102,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
DeviceBasedSatelliteInteractor(
repo,
iconsInteractor,
deviceProvisioningInteractor,
testScope.backgroundScope,
)
......@@ -142,6 +149,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
DeviceBasedSatelliteInteractor(
repo,
iconsInteractor,
deviceProvisioningInteractor,
testScope.backgroundScope,
)
......@@ -196,6 +204,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
DeviceBasedSatelliteInteractor(
repo,
iconsInteractor,
deviceProvisioningInteractor,
testScope.backgroundScope,
)
......@@ -327,6 +336,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
DeviceBasedSatelliteInteractor(
repo,
iconsInteractor,
deviceProvisioningInteractor,
testScope.backgroundScope,
)
......
......@@ -26,6 +26,8 @@ import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobi
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.statusbar.pipeline.satellite.data.prod.FakeDeviceBasedSatelliteRepository
import com.android.systemui.statusbar.pipeline.satellite.domain.interactor.DeviceBasedSatelliteInteractor
import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository
import com.android.systemui.statusbar.policy.domain.interactor.DeviceProvisioningInteractor
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
......@@ -45,6 +47,9 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
private val repo = FakeDeviceBasedSatelliteRepository()
private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock())
private val deviceProvisionedRepository = FakeDeviceProvisioningRepository()
private val deviceProvisioningInteractor =
DeviceProvisioningInteractor(deviceProvisionedRepository)
private val testScope = TestScope()
......@@ -57,6 +62,7 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
DeviceBasedSatelliteInteractor(
repo,
mobileIconsInteractor,
deviceProvisioningInteractor,
testScope.backgroundScope,
)
......@@ -214,4 +220,37 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
// THEN icon is null immediately
assertThat(latest).isNull()
}
@OptIn(ExperimentalCoroutinesApi::class)
@Test
fun icon_deviceIsProvisioned() =
testScope.runTest {
val latest by collectLastValue(underTest.icon)
// GIVEN satellite is allowed
repo.isSatelliteAllowedForCurrentLocation.value = true
// GIVEN all icons are OOS
val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
i1.isInService.value = false
i1.isEmergencyOnly.value = false
// GIVEN apm is disabled
airplaneModeRepository.setIsAirplaneMode(false)
// GIVEN device is not provisioned
deviceProvisionedRepository.setDeviceProvisioned(false)
// THEN icon is null because the device is not provisioned
assertThat(latest).isNull()
// GIVEN device becomes provisioned
deviceProvisionedRepository.setDeviceProvisioned(true)
// Wait for delay to be completed
advanceTimeBy(10.seconds)
// THEN icon is null because the device is not provisioned
assertThat(latest).isInstanceOf(Icon::class.java)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment