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

Commit ff31aa74 authored by Darrell Shi's avatar Darrell Shi Committed by Android (Google) Code Review
Browse files

Merge "Disable swipe to communal hub when not available" into main

parents 3baae7bc fa5d8e19
Loading
Loading
Loading
Loading
+9 −31
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@

package com.android.systemui.keyguard.ui.viewmodel

import android.content.pm.UserInfo
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -27,21 +25,20 @@ import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.communal.domain.interactor.setCommunalAvailable
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.Flags.COMMUNAL_SERVICE_ENABLED
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
@@ -85,35 +82,21 @@ class LockscreenSceneViewModelTest : SysuiTestCase() {

    @EnableFlags(FLAG_COMMUNAL_HUB)
    @Test
    fun leftTransitionSceneKey_communalIsEnabled_communal() =
    fun leftTransitionSceneKey_communalIsAvailable_communal() =
        testScope.runTest {
            with(kosmos.fakeUserRepository) {
                setUserInfos(listOf(PRIMARY_USER))
                setSelectedUserInfo(PRIMARY_USER)
            }
            kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)
            val leftDestinationSceneKey by collectLastValue(underTest.leftDestinationSceneKey)
            assertThat(leftDestinationSceneKey).isEqualTo(SceneKey.Communal)
        }

    @DisableFlags(FLAG_COMMUNAL_HUB)
    @Test
    fun leftTransitionSceneKey_communalIsDisabled_null() =
        testScope.runTest {
            with(kosmos.fakeUserRepository) {
                setUserInfos(listOf(PRIMARY_USER))
                setSelectedUserInfo(PRIMARY_USER)
            }
            kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false)
            val leftDestinationSceneKey by collectLastValue(underTest.leftDestinationSceneKey)
            assertThat(leftDestinationSceneKey).isNull()

            kosmos.setCommunalAvailable(true)
            runCurrent()
            assertThat(leftDestinationSceneKey).isEqualTo(SceneKey.Communal)
        }

    private fun createLockscreenSceneViewModel(): LockscreenSceneViewModel {
        return LockscreenSceneViewModel(
            applicationScope = testScope.backgroundScope,
            deviceEntryInteractor = kosmos.deviceEntryInteractor,
            communalSettingsInteractor = kosmos.communalSettingsInteractor,
            communalInteractor = kosmos.communalInteractor,
            longPress =
                KeyguardLongPressViewModel(
                    interactor = mock(),
@@ -121,9 +104,4 @@ class LockscreenSceneViewModelTest : SysuiTestCase() {
            notifications = kosmos.notificationsPlaceholderViewModel,
        )
    }

    private companion object {
        val PRIMARY_USER =
            UserInfo(/* id= */ 0, /* name= */ "primary user", /* flags= */ UserInfo.FLAG_MAIN)
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.bouncerViewModel
import com.android.systemui.classifier.domain.interactor.falsingInteractor
import com.android.systemui.classifier.falsingCollector
import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
@@ -130,7 +130,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
    private val sceneInteractor by lazy { kosmos.sceneInteractor }
    private val authenticationInteractor by lazy { kosmos.authenticationInteractor }
    private val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor }
    private val communalSettingsInteractor by lazy { kosmos.communalSettingsInteractor }
    private val communalInteractor by lazy { kosmos.communalInteractor }

    private val transitionState by lazy {
        MutableStateFlow<ObservableTransitionState>(
@@ -155,7 +155,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
        LockscreenSceneViewModel(
            applicationScope = testScope.backgroundScope,
            deviceEntryInteractor = deviceEntryInteractor,
            communalSettingsInteractor = communalSettingsInteractor,
            communalInteractor = communalInteractor,
            longPress =
                KeyguardLongPressViewModel(
                    interactor = mock(),
+3 −3
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.systemui.keyguard.ui.viewmodel

import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
@@ -36,7 +36,7 @@ class LockscreenSceneViewModel
constructor(
    @Application applicationScope: CoroutineScope,
    deviceEntryInteractor: DeviceEntryInteractor,
    communalSettingsInteractor: CommunalSettingsInteractor,
    communalInteractor: CommunalInteractor,
    val longPress: KeyguardLongPressViewModel,
    val notifications: NotificationsPlaceholderViewModel,
) {
@@ -56,7 +56,7 @@ constructor(

    /** The key of the scene we should switch to when swiping left. */
    val leftDestinationSceneKey: StateFlow<SceneKey?> =
        communalSettingsInteractor.isCommunalEnabled
        communalInteractor.isCommunalAvailable
            .map { available -> if (available) SceneKey.Communal else null }
            .stateIn(
                scope = applicationScope,
+15 −0
Original line number Diff line number Diff line
@@ -21,12 +21,16 @@ import com.android.systemui.communal.data.repository.communalPrefsRepository
import com.android.systemui.communal.data.repository.communalRepository
import com.android.systemui.communal.data.repository.communalWidgetRepository
import com.android.systemui.communal.widgets.EditWidgetsActivityStarter
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.smartspace.data.repository.smartspaceRepository
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.mockito.mock

val Kosmos.communalInteractor by Fixture {
@@ -47,3 +51,14 @@ val Kosmos.communalInteractor by Fixture {
}

val Kosmos.editWidgetsActivityStarter by Fixture<EditWidgetsActivityStarter> { mock() }

suspend fun Kosmos.setCommunalAvailable(available: Boolean) {
    fakeFeatureFlagsClassic.set(Flags.COMMUNAL_SERVICE_ENABLED, available)
    if (available) {
        fakeUserRepository.asMainUser()
        with(fakeKeyguardRepository) {
            setIsEncryptedOrLockdown(false)
            setKeyguardShowing(true)
        }
    }
}
+14 −1
Original line number Diff line number Diff line
@@ -39,13 +39,19 @@ class FakeUserRepository @Inject constructor() : UserRepository {
        // User id to represent a non system (human) user id. We presume this is the main user.
        private const val MAIN_USER_ID = 10

        private val DEFAULT_SELECTED_USER = 0
        private const val DEFAULT_SELECTED_USER = 0
        private val DEFAULT_SELECTED_USER_INFO =
            UserInfo(
                /* id= */ DEFAULT_SELECTED_USER,
                /* name= */ "default selected user",
                /* flags= */ 0,
            )
        private val MAIN_USER =
            UserInfo(
                /* id= */ MAIN_USER_ID,
                /* name= */ "main user",
                /* flags= */ UserInfo.FLAG_MAIN,
            )
    }

    private val _userSwitcherSettings = MutableStateFlow(UserSwitcherSettingsModel())
@@ -113,6 +119,13 @@ class FakeUserRepository @Inject constructor() : UserRepository {
        yield()
    }

    /** Makes the current user [MAIN_USER]. */
    suspend fun asMainUser(): UserInfo {
        setUserInfos(listOf(MAIN_USER))
        setSelectedUserInfo(MAIN_USER)
        return MAIN_USER
    }

    suspend fun setSettings(settings: UserSwitcherSettingsModel) {
        _userSwitcherSettings.value = settings
        yield()