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

Commit 415c1a78 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

Don't allow view models to directly depend on AirplaneModeRepository.

AirplaneModeInteractor exposes the same flow without the Clean
Architecture Dependency Violation.

Bug: 307607958
Flag: EXEMPT refactor
Test: atest InternetTileViewModelTest DeviceBasedSatelliteViewModelTest
Test: toggle into & out of airplane mode -> verify Internet QS tile
correctly reflects state

Change-Id: Ic9365375301436f3b3a6bd6725fe0c3e9a5b7b5f
parent 16ef8106
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -408,17 +408,6 @@
            column="1"/>
    </issue>
    <issue
        id="CleanArchitectureDependencyViolation"
        message="The ui layer may not depend on the data layer."
        errorLine1="import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository"
        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModel.kt"
            line="23"
            column="1"/>
    </issue>
    <issue
        id="CleanArchitectureDependencyViolation"
        message="The data layer may not depend on the domain layer."
+11 −5
Original line number Diff line number Diff line
@@ -36,18 +36,22 @@ import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
import com.android.systemui.res.R
import com.android.systemui.statusbar.connectivity.AccessPointController
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.airplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.fake
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.airplaneModeInteractor
import com.android.systemui.statusbar.pipeline.ethernet.domain.EthernetInteractor
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.statusbar.pipeline.shared.data.model.DefaultConnectionModel
import com.android.systemui.statusbar.pipeline.shared.data.model.DefaultConnectionModel.Wifi
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.connectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.fake
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.InternetTileViewModel
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.pipeline.wifi.shared.model.WifiScanEntry
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
@@ -77,9 +81,11 @@ class InternetTileNewImplTest(flags: FlagsParameterization) : SysuiTestCase() {

    private val testDispatcher = StandardTestDispatcher()
    private val testScope = TestScope(testDispatcher)
    private val kosmos = testKosmos()

    private var airplaneModeRepository = FakeAirplaneModeRepository()
    private var connectivityRepository = FakeConnectivityRepository()
    private var airplaneModeRepository = kosmos.airplaneModeRepository.fake
    private var airplaneModeInteractor = kosmos.airplaneModeInteractor
    private var connectivityRepository = kosmos.connectivityRepository.fake
    private var ethernetInteractor = EthernetInteractor(connectivityRepository)
    private var mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock())
    private var wifiRepository = FakeWifiRepository()
@@ -110,7 +116,7 @@ class InternetTileNewImplTest(flags: FlagsParameterization) : SysuiTestCase() {

        viewModel =
            InternetTileViewModel(
                airplaneModeRepository,
                airplaneModeInteractor,
                connectivityRepository,
                ethernetInteractor,
                mobileIconsInteractor,
+11 −6
Original line number Diff line number Diff line
@@ -23,16 +23,20 @@ import com.android.systemui.common.shared.model.Icon
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.log.core.FakeLogBuffer
import com.android.systemui.res.R
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.airplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.fake
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.airplaneModeInteractor
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobileIconsInteractor
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.satellite.shared.model.SatelliteConnectionState
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.connectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.fake
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.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
import kotlin.time.Duration.Companion.seconds
@@ -48,15 +52,17 @@ import org.mockito.kotlin.mock
@RunWith(AndroidJUnit4::class)
@android.platform.test.annotations.EnabledOnRavenwood
class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos()

    private lateinit var underTest: DeviceBasedSatelliteViewModel
    private lateinit var interactor: DeviceBasedSatelliteInteractor
    private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
    private val airplaneModeRepository = kosmos.airplaneModeRepository.fake
    private val repo = FakeDeviceBasedSatelliteRepository()
    private val testScope = TestScope()

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

    private val connectivityRepository = FakeConnectivityRepository()
    private val connectivityRepository = kosmos.connectivityRepository.fake
    private val wifiRepository = FakeWifiRepository()
    private val wifiInteractor =
        WifiInteractorImpl(connectivityRepository, wifiRepository, testScope.backgroundScope)
@@ -64,7 +70,6 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        airplaneModeRepository = FakeAirplaneModeRepository()

        interactor =
            DeviceBasedSatelliteInteractor(
@@ -81,7 +86,7 @@ class DeviceBasedSatelliteViewModelTest : SysuiTestCase() {
                context,
                interactor,
                testScope.backgroundScope,
                airplaneModeRepository,
                kosmos.airplaneModeInteractor,
                FakeLogBuffer.Factory.create(),
                mock(),
            )
+9 −5
Original line number Diff line number Diff line
@@ -31,7 +31,9 @@ import com.android.systemui.qs.tileimpl.QSTileImpl.ResourceIcon
import com.android.systemui.res.R
import com.android.systemui.statusbar.connectivity.WifiIcons
import com.android.systemui.statusbar.connectivity.ui.MobileContextProvider
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.airplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.data.repository.fake
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.airplaneModeInteractor
import com.android.systemui.statusbar.pipeline.ethernet.domain.EthernetInteractor
import com.android.systemui.statusbar.pipeline.mobile.data.model.DataConnectionState
import com.android.systemui.statusbar.pipeline.mobile.data.model.NetworkNameModel
@@ -41,7 +43,8 @@ import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIc
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.statusbar.pipeline.shared.data.model.DefaultConnectionModel
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.connectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.fake
import com.android.systemui.statusbar.pipeline.shared.ui.model.SignalIcon
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.InternetTileViewModel.Companion.NOT_CONNECTED_NETWORKS_UNAVAILABLE
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
@@ -71,8 +74,9 @@ class InternetTileViewModelTest : SysuiTestCase() {
    private lateinit var underTest: InternetTileViewModel
    private lateinit var mobileIconsInteractor: MobileIconsInteractor

    private val airplaneModeRepository = FakeAirplaneModeRepository()
    private val connectivityRepository = FakeConnectivityRepository()
    private val airplaneModeRepository = kosmos.airplaneModeRepository.fake
    private val airplaneModeInteractor = kosmos.airplaneModeInteractor
    private val connectivityRepository = kosmos.connectivityRepository.fake
    private val ethernetInteractor = EthernetInteractor(connectivityRepository)
    private val wifiRepository = FakeWifiRepository()
    private val userSetupRepo = FakeUserSetupRepository()
@@ -128,7 +132,7 @@ class InternetTileViewModelTest : SysuiTestCase() {

        underTest =
            InternetTileViewModel(
                airplaneModeRepository,
                airplaneModeInteractor,
                connectivityRepository,
                ethernetInteractor,
                mobileIconsInteractor,
+3 −3
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.res.R
import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
import com.android.systemui.statusbar.pipeline.dagger.DeviceBasedSatelliteInputLog
import com.android.systemui.statusbar.pipeline.dagger.DeviceBasedSatelliteTableLog
import com.android.systemui.statusbar.pipeline.satellite.domain.interactor.DeviceBasedSatelliteInteractor
@@ -68,7 +68,7 @@ constructor(
    context: Context,
    interactor: DeviceBasedSatelliteInteractor,
    @Application scope: CoroutineScope,
    airplaneModeRepository: AirplaneModeRepository,
    airplaneModeInteractor: AirplaneModeInteractor,
    @DeviceBasedSatelliteInputLog logBuffer: LogBuffer,
    @DeviceBasedSatelliteTableLog tableLog: TableLogBuffer,
) : DeviceBasedSatelliteViewModel {
@@ -122,7 +122,7 @@ constructor(
                                interactor.isAnyConnectionNtn,
                                interactor.connectionState,
                                interactor.isWifiActive,
                                airplaneModeRepository.isAirplaneMode,
                                airplaneModeInteractor.isAirplaneMode,
                            ) { showForOos, anyNtn, connectionState, isWifiActive, isAirplaneMode ->
                                // anyNtn means that there is some mobile network using ntn, and the
                                // mobile icon will show its own satellite icon
Loading