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

Commit 0bf0823b authored by Ioana Alexandru's avatar Ioana Alexandru Committed by Android (Google) Code Review
Browse files

Merge "Add UserSetupInteractor." into main

parents 193caa93 fdf0acf3
Loading
Loading
Loading
Loading
+87 −0
Original line number Diff line number Diff line
@@ -14,76 +14,69 @@
 * limitations under the License.
 */

package com.android.systemui.statusbar.pipeline.mobile.data.repository
@file:OptIn(ExperimentalCoroutinesApi::class)

package com.android.systemui.statusbar.policy.data.repository

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener
import com.android.systemui.statusbar.policy.deviceProvisionedController
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.mockito.Mock
import org.junit.runner.RunWith
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations

@SmallTest
@RunWith(AndroidJUnit4::class)
class UserSetupRepositoryTest : SysuiTestCase() {
    private lateinit var underTest: UserSetupRepository
    @Mock private lateinit var deviceProvisionedController: DeviceProvisionedController
    private val scope = CoroutineScope(IMMEDIATE)

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        underTest =
            UserSetupRepositoryImpl(
    private val kosmos = testKosmos()

    private val testScope = kosmos.testScope
    private val deviceProvisionedController : DeviceProvisionedController = mock()

    private val underTest = UserSetupRepositoryImpl(
            deviceProvisionedController,
                IMMEDIATE,
                scope,
            kosmos.testDispatcher,
            kosmos.applicationCoroutineScope,
    )
    }

    @After
    fun tearDown() {
        scope.cancel()
    }

    @Test
    fun testUserSetup_defaultFalse() =
        runBlocking(IMMEDIATE) {
            var latest: Boolean? = null

            val job = underTest.isUserSetupFlow.onEach { latest = it }.launchIn(this)
    fun userSetup_defaultFalse() =
            testScope.runTest {
                val latest by collectLastValue(underTest.isUserSetUp)

                assertThat(latest).isFalse()

            job.cancel()
            }

    @Test
    fun testUserSetup_updatesOnChange() =
        runBlocking(IMMEDIATE) {
            var latest: Boolean? = null

            val job = underTest.isUserSetupFlow.onEach { latest = it }.launchIn(this)
    fun userSetup_updatesOnChange() =
            testScope.runTest {
                val latest by collectLastValue(underTest.isUserSetUp)
                runCurrent()

                whenever(deviceProvisionedController.isCurrentUserSetup).thenReturn(true)
                val callback = getDeviceProvisionedListener()
                callback.onUserSetupChanged()

                assertThat(latest).isTrue()

            job.cancel()
            }

    private fun getDeviceProvisionedListener(): DeviceProvisionedListener {
@@ -91,8 +84,4 @@ class UserSetupRepositoryTest : SysuiTestCase() {
        verify(deviceProvisionedController).addCallback(captor.capture())
        return captor.value!!
    }

    companion object {
        private val IMMEDIATE = Dispatchers.Main.immediate
    }
}
+58 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.policy.domain.interactor

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.statusbar.policy.data.repository.fakeUserSetupRepository
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith

@SmallTest
@RunWith(AndroidJUnit4::class)
class UserSetupInteractorTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val fakeUserSetupRepository = kosmos.fakeUserSetupRepository
    private val underTest = kosmos.userSetupInteractor

    @Test
    fun isUserSetup_false() =
        testScope.runTest {
            val setup by collectLastValue(underTest.isUserSetUp)

            fakeUserSetupRepository.setUserSetUp(false)

            assertThat(setup).isFalse()
        }

    @Test
    fun isUserSetup_true() =
        testScope.runTest {
            val setup by collectLastValue(underTest.isUserSetUp)

            fakeUserSetupRepository.setUserSetUp(true)

            assertThat(setup).isTrue()
        }
}
+2 −2
Original line number Diff line number Diff line
@@ -25,8 +25,8 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.statusbar.disableflags.data.repository.DisableFlagsRepository
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepository
import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository
import com.android.systemui.user.domain.interactor.UserSwitcherInteractor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -94,7 +94,7 @@ constructor(
            disableFlagsRepository.disableFlags,
            isShadeEnabled,
            keyguardRepository.isDozing,
            userSetupRepository.isUserSetupFlow,
            userSetupRepository.isUserSetUp,
            deviceProvisioningRepository.isDeviceProvisioned,
        ) { disableFlags, isShadeEnabled, isDozing, isUserSetup, isDeviceProvisioned ->
            isDeviceProvisioned &&
+2 −2
Original line number Diff line number Diff line
@@ -34,8 +34,6 @@ import com.android.systemui.statusbar.pipeline.icons.shared.BindableIconsRegistr
import com.android.systemui.statusbar.pipeline.mobile.data.repository.CarrierConfigCoreStartable
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileRepositorySwitcher
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepositoryImpl
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl
import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter
@@ -62,6 +60,8 @@ import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRep
import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryViaTrackerLib
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.policy.data.repository.UserSetupRepository
import com.android.systemui.statusbar.policy.data.repository.UserSetupRepositoryImpl
import dagger.Binds
import dagger.Module
import dagger.Provides
+3 −3
Original line number Diff line number Diff line
@@ -32,9 +32,9 @@ import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository
import com.android.systemui.util.CarrierConfigTracker
import java.lang.ref.WeakReference
import javax.inject.Inject
@@ -105,7 +105,7 @@ interface MobileIconsInteractor {
    val isDefaultConnectionFailed: StateFlow<Boolean>

    /** True once the user has been set up */
    val isUserSetup: StateFlow<Boolean>
    val isUserSetUp: StateFlow<Boolean>

    /** True if we're configured to force-hide the mobile icons and false otherwise. */
    val isForceHidden: Flow<Boolean>
@@ -362,7 +362,7 @@ constructor(
            )
            .stateIn(scope, SharingStarted.WhileSubscribed(), false)

    override val isUserSetup: StateFlow<Boolean> = userSetupRepo.isUserSetupFlow
    override val isUserSetUp: StateFlow<Boolean> = userSetupRepo.isUserSetUp

    override val isForceHidden: Flow<Boolean> =
        connectivityRepository.forceHiddenSlots
Loading