Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82612236 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Do not show the satellite icon when wifi is connected" into main

parents 10c1e30a 32a65e8d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ 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.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.policy.domain.interactor.DeviceProvisioningInteractor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -41,6 +43,7 @@ constructor(
    val repo: DeviceBasedSatelliteRepository,
    iconsInteractor: MobileIconsInteractor,
    deviceProvisioningInteractor: DeviceProvisioningInteractor,
    wifiInteractor: WifiInteractor,
    @Application scope: CoroutineScope,
) {
    /** Must be observed by any UI showing Satellite iconography */
@@ -73,6 +76,9 @@ constructor(

    val isDeviceProvisioned: Flow<Boolean> = deviceProvisioningInteractor.isDeviceProvisioned

    val isWifiActive: Flow<Boolean> =
        wifiInteractor.wifiNetwork.map { it is WifiNetworkModel.Active }

    /** When all connections are considered OOS, satellite connectivity is potentially valid */
    val areAllConnectionsOutOfService =
        if (Flags.oemEnabledSatelliteFlag()) {
+3 −2
Original line number Diff line number Diff line
@@ -59,9 +59,10 @@ constructor(
                combine(
                    interactor.isSatelliteAllowed,
                    interactor.isDeviceProvisioned,
                    interactor.isWifiActive,
                    airplaneModeRepository.isAirplaneMode
                ) { isSatelliteAllowed, isDeviceProvisioned, isAirplaneMode ->
                    isSatelliteAllowed && isDeviceProvisioned && !isAirplaneMode
                ) { isSatelliteAllowed, isDeviceProvisioned, isWifiActive, isAirplaneMode ->
                    isSatelliteAllowed && isDeviceProvisioned && !isWifiActive && !isAirplaneMode
                }
            }
        }
+37 −0
Original line number Diff line number Diff line
@@ -26,6 +26,10 @@ 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.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
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
@@ -53,6 +57,10 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
    private val deviceProvisionedRepository = FakeDeviceProvisioningRepository()
    private val deviceProvisioningInteractor =
        DeviceProvisioningInteractor(deviceProvisionedRepository)
    private val connectivityRepository = FakeConnectivityRepository()
    private val wifiRepository = FakeWifiRepository()
    private val wifiInteractor =
        WifiInteractorImpl(connectivityRepository, wifiRepository, testScope.backgroundScope)

    @Before
    fun setUp() {
@@ -61,6 +69,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
                repo,
                iconsInteractor,
                deviceProvisioningInteractor,
                wifiInteractor,
                testScope.backgroundScope,
            )
    }
@@ -103,6 +112,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
                    repo,
                    iconsInteractor,
                    deviceProvisioningInteractor,
                    wifiInteractor,
                    testScope.backgroundScope,
                )

@@ -150,6 +160,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
                    repo,
                    iconsInteractor,
                    deviceProvisioningInteractor,
                    wifiInteractor,
                    testScope.backgroundScope,
                )

@@ -205,6 +216,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
                    repo,
                    iconsInteractor,
                    deviceProvisioningInteractor,
                    wifiInteractor,
                    testScope.backgroundScope,
                )

@@ -337,6 +349,7 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
                    repo,
                    iconsInteractor,
                    deviceProvisioningInteractor,
                    wifiInteractor,
                    testScope.backgroundScope,
                )

@@ -353,4 +366,28 @@ class DeviceBasedSatelliteInteractorTest : SysuiTestCase() {
            // THEN the value is still false, because the flag is off
            assertThat(latest).isFalse()
        }

    @Test
    fun isWifiActive_falseWhenWifiNotActive() =
        testScope.runTest {
            val latest by collectLastValue(underTest.isWifiActive)

            // WHEN wifi is not active
            wifiRepository.setWifiNetwork(WifiNetworkModel.Invalid("test"))

            // THEN the interactor returns false due to the wifi network not being active
            assertThat(latest).isFalse()
        }

    @Test
    fun isWifiActive_trueWhenWifiIsActive() =
        testScope.runTest {
            val latest by collectLastValue(underTest.isWifiActive)

            // WHEN wifi is active
            wifiRepository.setWifiNetwork(WifiNetworkModel.Active(networkId = 0, level = 1))

            // THEN the interactor returns true due to the wifi network being active
            assertThat(latest).isTrue()
        }
}
+48 −3
Original line number Diff line number Diff line
@@ -26,6 +26,10 @@ 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.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
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
@@ -44,14 +48,18 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
    private lateinit var underTest: DeviceBasedSatelliteViewModel
    private lateinit var interactor: DeviceBasedSatelliteInteractor
    private lateinit var airplaneModeRepository: FakeAirplaneModeRepository

    private val repo = FakeDeviceBasedSatelliteRepository()
    private val testScope = TestScope()

    private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock())

    private val deviceProvisionedRepository = FakeDeviceProvisioningRepository()
    private val deviceProvisioningInteractor =
        DeviceProvisioningInteractor(deviceProvisionedRepository)

    private val testScope = TestScope()
    private val connectivityRepository = FakeConnectivityRepository()
    private val wifiRepository = FakeWifiRepository()
    private val wifiInteractor =
        WifiInteractorImpl(connectivityRepository, wifiRepository, testScope.backgroundScope)

    @Before
    fun setUp() {
@@ -63,6 +71,7 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
                repo,
                mobileIconsInteractor,
                deviceProvisioningInteractor,
                wifiInteractor,
                testScope.backgroundScope,
            )

@@ -253,4 +262,40 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
            // THEN icon is null because the device is not provisioned
            assertThat(latest).isInstanceOf(Icon::class.java)
        }

    @OptIn(ExperimentalCoroutinesApi::class)
    @Test
    fun icon_wifiIsActive() =
        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 provisioned
            deviceProvisionedRepository.setDeviceProvisioned(true)

            // GIVEN wifi network is active
            wifiRepository.setWifiNetwork(WifiNetworkModel.Active(networkId = 0, level = 1))

            // THEN icon is null because the device is connected to wifi
            assertThat(latest).isNull()

            // GIVEN device loses wifi connection
            wifiRepository.setWifiNetwork(WifiNetworkModel.Invalid("test"))

            // Wait for delay to be completed
            advanceTimeBy(10.seconds)

            // THEN icon is set because the device lost wifi connection
            assertThat(latest).isInstanceOf(Icon::class.java)
        }
}