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

Commit c5cd47b2 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB Refactor] Make some wifi pipeline classes into interfaces.

This is needed for WifiScreenshotTest so that more of the pipeline can
be faked out.

Bug: 238425913
Test: manual: verified new wifi icon still works
Test: atest WifiScreenshotTest
Test: atest all tests in statusbar.pipeline
Change-Id: I335451e62c5db01143226d7cdc3ee29b93301bf2
parent d41f29df
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -753,7 +753,7 @@
-packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerOldImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ConnectivityPipelineLoggerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt
+8 −4
Original line number Diff line number Diff line
@@ -36,16 +36,20 @@ import kotlinx.coroutines.flow.stateIn
 * [com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository] for
 * more details.
 */
interface AirplaneModeViewModel {
    /** True if the airplane mode icon is currently visible in the status bar. */
    val isAirplaneModeIconVisible: StateFlow<Boolean>
}

@SysUISingleton
class AirplaneModeViewModel
class AirplaneModeViewModelImpl
@Inject
constructor(
    interactor: AirplaneModeInteractor,
    logger: ConnectivityPipelineLogger,
    @Application private val scope: CoroutineScope,
) {
    /** True if the airplane mode icon is currently visible in the status bar. */
    val isAirplaneModeIconVisible: StateFlow<Boolean> =
) : AirplaneModeViewModel {
    override val isAirplaneModeIconVisible: StateFlow<Boolean> =
        combine(interactor.isAirplaneMode, interactor.isForceHidden) {
                isAirplaneMode,
                isAirplaneIconForceHidden ->
+10 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.statusbar.pipeline.dagger

import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepositoryImpl
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModelImpl
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepositoryImpl
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
@@ -30,6 +32,8 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.Connectivi
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepositoryImpl
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import dagger.Binds
import dagger.Module

@@ -38,12 +42,18 @@ abstract class StatusBarPipelineModule {
    @Binds
    abstract fun airplaneModeRepository(impl: AirplaneModeRepositoryImpl): AirplaneModeRepository

    @Binds
    abstract fun airplaneModeViewModel(impl: AirplaneModeViewModelImpl): AirplaneModeViewModel

    @Binds
    abstract fun connectivityRepository(impl: ConnectivityRepositoryImpl): ConnectivityRepository

    @Binds
    abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository

    @Binds
    abstract fun wifiInteractor(impl: WifiInteractorImpl): WifiInteractor

    @Binds
    abstract fun mobileConnectionsRepository(
        impl: MobileConnectionsRepositoryImpl
+31 −16
Original line number Diff line number Diff line
@@ -34,16 +34,36 @@ import kotlinx.coroutines.flow.map
 * This interactor processes information from our data layer into information that the UI layer can
 * use.
 */
@SysUISingleton
class WifiInteractor @Inject constructor(
    connectivityRepository: ConnectivityRepository,
    wifiRepository: WifiRepository,
) {
interface WifiInteractor {
    /**
     * The SSID (service set identifier) of the wifi network. Null if we don't have a network, or
     * have a network but no valid SSID.
     */
    val ssid: Flow<String?> = wifiRepository.wifiNetwork.map { info ->
    val ssid: Flow<String?>

    /** Our current enabled status. */
    val isEnabled: Flow<Boolean>

    /** Our current default status. */
    val isDefault: Flow<Boolean>

    /** Our current wifi network. See [WifiNetworkModel]. */
    val wifiNetwork: Flow<WifiNetworkModel>

    /** Our current wifi activity. See [WifiActivityModel]. */
    val activity: StateFlow<WifiActivityModel>

    /** True if we're configured to force-hide the wifi icon and false otherwise. */
    val isForceHidden: Flow<Boolean>
}

@SysUISingleton
class WifiInteractorImpl @Inject constructor(
    connectivityRepository: ConnectivityRepository,
    wifiRepository: WifiRepository,
) : WifiInteractor {

    override val ssid: Flow<String?> = wifiRepository.wifiNetwork.map { info ->
        when (info) {
            is WifiNetworkModel.Inactive -> null
            is WifiNetworkModel.CarrierMerged -> null
@@ -56,20 +76,15 @@ class WifiInteractor @Inject constructor(
        }
    }

    /** Our current enabled status. */
    val isEnabled: Flow<Boolean> = wifiRepository.isWifiEnabled
    override val isEnabled: Flow<Boolean> = wifiRepository.isWifiEnabled

    /** Our current default status. */
    val isDefault: Flow<Boolean> = wifiRepository.isWifiDefault
    override val isDefault: Flow<Boolean> = wifiRepository.isWifiDefault

    /** Our current wifi network. See [WifiNetworkModel]. */
    val wifiNetwork: Flow<WifiNetworkModel> = wifiRepository.wifiNetwork
    override val wifiNetwork: Flow<WifiNetworkModel> = wifiRepository.wifiNetwork

    /** Our current wifi activity. See [WifiActivityModel]. */
    val activity: StateFlow<WifiActivityModel> = wifiRepository.wifiActivity
    override val activity: StateFlow<WifiActivityModel> = wifiRepository.wifiActivity

    /** True if we're configured to force-hide the wifi icon and false otherwise. */
    val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
    override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
        it.contains(ConnectivitySlot.WIFI)
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -38,9 +38,9 @@ import org.mockito.MockitoAnnotations
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
class AirplaneModeViewModelTest : SysuiTestCase() {
class AirplaneModeViewModelImplTest : SysuiTestCase() {

    private lateinit var underTest: AirplaneModeViewModel
    private lateinit var underTest: AirplaneModeViewModelImpl

    @Mock private lateinit var logger: ConnectivityPipelineLogger
    private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
@@ -57,7 +57,7 @@ class AirplaneModeViewModelTest : SysuiTestCase() {
        scope = CoroutineScope(IMMEDIATE)

        underTest =
            AirplaneModeViewModel(
            AirplaneModeViewModelImpl(
                interactor,
                logger,
                scope,
Loading