Merge "[SB Refactor] Make some wifi pipeline classes into interfaces." into tm-qpr-dev

This commit is contained in:
Caitlin Shkuratov
2022-12-02 14:46:54 +00:00
committed by Android (Google) Code Review
9 changed files with 68 additions and 32 deletions

View File

@@ -753,7 +753,7 @@
-packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/userswitcher/StatusBarUserSwitcherControllerOldImplTest.kt -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/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/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/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/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt -packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt

View File

@@ -36,16 +36,20 @@ import kotlinx.coroutines.flow.stateIn
* [com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository] for * [com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository] for
* more details. * more details.
*/ */
interface AirplaneModeViewModel {
/** True if the airplane mode icon is currently visible in the status bar. */
val isAirplaneModeIconVisible: StateFlow<Boolean>
}
@SysUISingleton @SysUISingleton
class AirplaneModeViewModel class AirplaneModeViewModelImpl
@Inject @Inject
constructor( constructor(
interactor: AirplaneModeInteractor, interactor: AirplaneModeInteractor,
logger: ConnectivityPipelineLogger, logger: ConnectivityPipelineLogger,
@Application private val scope: CoroutineScope, @Application private val scope: CoroutineScope,
) { ) : AirplaneModeViewModel {
/** True if the airplane mode icon is currently visible in the status bar. */ override val isAirplaneModeIconVisible: StateFlow<Boolean> =
val isAirplaneModeIconVisible: StateFlow<Boolean> =
combine(interactor.isAirplaneMode, interactor.isForceHidden) { combine(interactor.isAirplaneMode, interactor.isForceHidden) {
isAirplaneMode, isAirplaneMode,
isAirplaneIconForceHidden -> isAirplaneIconForceHidden ->

View File

@@ -21,6 +21,8 @@ import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.TableLogBufferFactory import com.android.systemui.log.table.TableLogBufferFactory
import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository 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.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.MobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepositoryImpl import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepositoryImpl
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
@@ -33,6 +35,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.shared.data.repository.ConnectivityRepositoryImpl
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository 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.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.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@@ -42,12 +46,18 @@ abstract class StatusBarPipelineModule {
@Binds @Binds
abstract fun airplaneModeRepository(impl: AirplaneModeRepositoryImpl): AirplaneModeRepository abstract fun airplaneModeRepository(impl: AirplaneModeRepositoryImpl): AirplaneModeRepository
@Binds
abstract fun airplaneModeViewModel(impl: AirplaneModeViewModelImpl): AirplaneModeViewModel
@Binds @Binds
abstract fun connectivityRepository(impl: ConnectivityRepositoryImpl): ConnectivityRepository abstract fun connectivityRepository(impl: ConnectivityRepositoryImpl): ConnectivityRepository
@Binds @Binds
abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository
@Binds
abstract fun wifiInteractor(impl: WifiInteractorImpl): WifiInteractor
@Binds @Binds
abstract fun mobileConnectionsRepository( abstract fun mobileConnectionsRepository(
impl: MobileConnectionsRepositoryImpl impl: MobileConnectionsRepositoryImpl

View File

@@ -34,16 +34,36 @@ import kotlinx.coroutines.flow.map
* This interactor processes information from our data layer into information that the UI layer can * This interactor processes information from our data layer into information that the UI layer can
* use. * use.
*/ */
@SysUISingleton interface WifiInteractor {
class WifiInteractor @Inject constructor(
connectivityRepository: ConnectivityRepository,
wifiRepository: WifiRepository,
) {
/** /**
* The SSID (service set identifier) of the wifi network. Null if we don't have a network, or * 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. * 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) { when (info) {
is WifiNetworkModel.Inactive -> null is WifiNetworkModel.Inactive -> null
is WifiNetworkModel.CarrierMerged -> null is WifiNetworkModel.CarrierMerged -> null
@@ -56,20 +76,15 @@ class WifiInteractor @Inject constructor(
} }
} }
/** Our current enabled status. */ override val isEnabled: Flow<Boolean> = wifiRepository.isWifiEnabled
val isEnabled: Flow<Boolean> = wifiRepository.isWifiEnabled
/** Our current default status. */ override val isDefault: Flow<Boolean> = wifiRepository.isWifiDefault
val isDefault: Flow<Boolean> = wifiRepository.isWifiDefault
/** Our current wifi network. See [WifiNetworkModel]. */ override val wifiNetwork: Flow<WifiNetworkModel> = wifiRepository.wifiNetwork
val wifiNetwork: Flow<WifiNetworkModel> = wifiRepository.wifiNetwork
/** Our current wifi activity. See [WifiActivityModel]. */ override val activity: StateFlow<WifiActivityModel> = wifiRepository.wifiActivity
val activity: StateFlow<WifiActivityModel> = wifiRepository.wifiActivity
/** True if we're configured to force-hide the wifi icon and false otherwise. */ override val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
it.contains(ConnectivitySlot.WIFI) it.contains(ConnectivitySlot.WIFI)
} }
} }

View File

@@ -38,9 +38,9 @@ import org.mockito.MockitoAnnotations
@SmallTest @SmallTest
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED") @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 @Mock private lateinit var logger: ConnectivityPipelineLogger
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
@@ -57,7 +57,7 @@ class AirplaneModeViewModelTest : SysuiTestCase() {
scope = CoroutineScope(IMMEDIATE) scope = CoroutineScope(IMMEDIATE)
underTest = underTest =
AirplaneModeViewModel( AirplaneModeViewModelImpl(
interactor, interactor,
logger, logger,
scope, scope,

View File

@@ -35,8 +35,9 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
@SmallTest @SmallTest
class WifiInteractorTest : SysuiTestCase() { class WifiInteractorImplTest : SysuiTestCase() {
private lateinit var underTest: WifiInteractor private lateinit var underTest: WifiInteractor
@@ -47,7 +48,7 @@ class WifiInteractorTest : SysuiTestCase() {
fun setUp() { fun setUp() {
connectivityRepository = FakeConnectivityRepository() connectivityRepository = FakeConnectivityRepository()
wifiRepository = FakeWifiRepository() wifiRepository = FakeWifiRepository()
underTest = WifiInteractor(connectivityRepository, wifiRepository) underTest = WifiInteractorImpl(connectivityRepository, wifiRepository)
} }
@Test @Test

View File

@@ -32,12 +32,14 @@ import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel 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.shared.ConnectivityConstants import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
@@ -86,9 +88,9 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
connectivityRepository = FakeConnectivityRepository() connectivityRepository = FakeConnectivityRepository()
wifiRepository = FakeWifiRepository() wifiRepository = FakeWifiRepository()
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
interactor = WifiInteractor(connectivityRepository, wifiRepository) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
scope = CoroutineScope(Dispatchers.Unconfined) scope = CoroutineScope(Dispatchers.Unconfined)
airplaneModeViewModel = AirplaneModeViewModel( airplaneModeViewModel = AirplaneModeViewModelImpl(
AirplaneModeInteractor( AirplaneModeInteractor(
airplaneModeRepository, airplaneModeRepository,
connectivityRepository, connectivityRepository,

View File

@@ -30,6 +30,7 @@ import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel 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.shared.ConnectivityConstants import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot
@@ -37,6 +38,7 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnec
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel.Companion.NO_INTERNET import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel.Companion.NO_INTERNET
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
@@ -81,10 +83,10 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase
connectivityRepository = FakeConnectivityRepository() connectivityRepository = FakeConnectivityRepository()
wifiRepository = FakeWifiRepository() wifiRepository = FakeWifiRepository()
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
interactor = WifiInteractor(connectivityRepository, wifiRepository) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
scope = CoroutineScope(IMMEDIATE) scope = CoroutineScope(IMMEDIATE)
airplaneModeViewModel = airplaneModeViewModel =
AirplaneModeViewModel( AirplaneModeViewModelImpl(
AirplaneModeInteractor( AirplaneModeInteractor(
airplaneModeRepository, airplaneModeRepository,
connectivityRepository, connectivityRepository,

View File

@@ -23,6 +23,7 @@ import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel 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.shared.ConnectivityConstants import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot
@@ -30,6 +31,7 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnec
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
@@ -73,9 +75,9 @@ class WifiViewModelTest : SysuiTestCase() {
connectivityRepository = FakeConnectivityRepository() connectivityRepository = FakeConnectivityRepository()
wifiRepository = FakeWifiRepository() wifiRepository = FakeWifiRepository()
wifiRepository.setIsWifiEnabled(true) wifiRepository.setIsWifiEnabled(true)
interactor = WifiInteractor(connectivityRepository, wifiRepository) interactor = WifiInteractorImpl(connectivityRepository, wifiRepository)
scope = CoroutineScope(IMMEDIATE) scope = CoroutineScope(IMMEDIATE)
airplaneModeViewModel = AirplaneModeViewModel( airplaneModeViewModel = AirplaneModeViewModelImpl(
AirplaneModeInteractor( AirplaneModeInteractor(
airplaneModeRepository, airplaneModeRepository,
connectivityRepository, connectivityRepository,