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

Commit 44fba6c5 authored by Franciszek Juras's avatar Franciszek Juras Committed by Android (Google) Code Review
Browse files

Merge changes I4e666b51,I48f739cf into main

* changes:
  Make KeyguardStatusBarViewModel HydratedActivatable
  Change lambda to member function in KeyguardStatusBarViewModel
parents f23a216b 371a6ded
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
@@ -39,7 +38,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.modifiers.height
import com.android.compose.theme.PlatformTheme
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent
@@ -127,10 +125,9 @@ constructor(
    @Composable
    private fun SignOutButton() {
        val context = LocalContext.current
        val isVisible by viewModel.isSignOutButtonVisible.collectAsStateWithLifecycle()
        if (isVisible) {
        if (viewModel.isSignOutButtonVisible) {
            Button(
                onClick = viewModel.onSignOut,
                onClick = viewModel::onSignOut,
                contentPadding = PaddingValues(start = 4.dp, end = 8.dp),
                modifier = Modifier.padding(end = 8.dp),
            ) {
+6 −4
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepos
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.scene.data.repository.sceneContainerRepository
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Overlays
@@ -99,6 +100,7 @@ class KeyguardStatusBarViewModelTest(flags: FlagsParameterization) : SysuiTestCa
                userLogoutInteractor,
                batteryController,
            )
        underTest.activateIn(testScope)
    }

    @Test
@@ -250,12 +252,12 @@ class KeyguardStatusBarViewModelTest(flags: FlagsParameterization) : SysuiTestCa
    fun signOutButton_isVisible_whenUserManagerLogoutIsEnabled() {
        testScope.runTest {
            kosmos.fakeKeyguardRepository.setIsSignOutButtonOnStatusBarEnabledInConfig(true)
            val isSignOutButtonVisible by collectLastValue(underTest.isSignOutButtonVisible)
            val logoutToSystemUserCount = userRepository.logOutWithUserManagerCallCount
            userRepository.setUserManagerLogoutEnabled(true)
            userRepository.setPolicyManagerLogoutEnabled(false)
            runCurrent()
            assertThat(underTest.isSignOutButtonEnabled).isTrue()
            assertThat(isSignOutButtonVisible).isTrue()
            assertThat(underTest.isSignOutButtonVisible).isTrue()
            underTest.onSignOut()
            runCurrent()
            assertThat(userRepository.logOutWithUserManagerCallCount)
@@ -268,11 +270,11 @@ class KeyguardStatusBarViewModelTest(flags: FlagsParameterization) : SysuiTestCa
    fun signOutButton_isNotVisible_whenUserManagerLogoutIsDisabled() {
        testScope.runTest {
            kosmos.fakeKeyguardRepository.setIsSignOutButtonOnStatusBarEnabledInConfig(true)
            val isSignOutButtonVisible by collectLastValue(underTest.isSignOutButtonVisible)
            userRepository.setUserManagerLogoutEnabled(false)
            userRepository.setPolicyManagerLogoutEnabled(true)
            runCurrent()
            assertThat(underTest.isSignOutButtonEnabled).isTrue()
            assertThat(isSignOutButtonVisible).isFalse()
            assertThat(underTest.isSignOutButtonVisible).isFalse()
        }
    }

+13 −5
Original line number Diff line number Diff line
@@ -19,19 +19,18 @@ package com.android.systemui.statusbar.ui.binder
import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.lifecycle.WindowLifecycleState
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.lifecycle.viewModel
import com.android.systemui.statusbar.phone.KeyguardStatusBarView
import com.android.systemui.statusbar.ui.viewmodel.KeyguardStatusBarViewModel
import kotlinx.coroutines.flow.distinctUntilChanged
import com.android.app.tracing.coroutines.launchTraced as launch

/** Binds [KeyguardStatusBarViewModel] to [KeyguardStatusBarView]. */
object KeyguardStatusBarViewBinder {
    @JvmStatic
    fun bind(
        view: KeyguardStatusBarView,
        viewModel: KeyguardStatusBarViewModel,
    ) {
    fun bind(view: KeyguardStatusBarView, viewModel: KeyguardStatusBarViewModel) {
        view.repeatWhenAttached {
            repeatOnLifecycle(Lifecycle.State.STARTED) {
                launch {
@@ -49,5 +48,14 @@ object KeyguardStatusBarViewBinder {
                }
            }
        }
        view.repeatWhenAttached {
            view.viewModel(
                traceName = "KeyguardStatusBarViewBinderViewModel",
                minWindowLifecycleState = WindowLifecycleState.ATTACHED,
                factory = { viewModel },
            ) {
                // no-op - currently used to activate viewModel
            }
        }
    }
}
+8 −5
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import com.android.systemui.Flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.lifecycle.HydratedActivatable
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Overlays
@@ -59,9 +60,9 @@ constructor(
    sceneInteractor: SceneInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    keyguardStatusBarInteractor: KeyguardStatusBarInteractor,
    userLogoutInteractor: UserLogoutInteractor,
    private val userLogoutInteractor: UserLogoutInteractor,
    batteryController: BatteryController,
) {
) : HydratedActivatable(enableEnqueuedActivations = true) {

    private val showingHeadsUpStatusBar: Flow<Boolean> =
        if (SceneContainerFlag.isEnabled && !StatusBarNoHunBehavior.isEnabled) {
@@ -114,8 +115,10 @@ constructor(
            Flags.signOutButtonOnKeyguardStatusBar() &&
                keyguardInteractor.isSignOutButtonOnStatusBarEnabled

    val isSignOutButtonVisible: StateFlow<Boolean> =
        userLogoutInteractor.isLogoutToSystemUserEnabled
    val isSignOutButtonVisible: Boolean by
        userLogoutInteractor.isLogoutToSystemUserEnabled.hydratedStateOf()

    val onSignOut: () -> Unit = { userLogoutInteractor.logOutToSystemUser() }
    fun onSignOut() {
        enqueueOnActivatedScope { userLogoutInteractor.logOutToSystemUser() }
    }
}
+3 −5
Original line number Diff line number Diff line
@@ -47,13 +47,11 @@ constructor(

    val isLogoutToSystemUserEnabled: StateFlow<Boolean> = userRepository.isUserManagerLogoutEnabled

    fun logOutToSystemUser() {
        applicationScope.launch {
    suspend fun logOutToSystemUser() {
        if (isLogoutToSystemUserEnabled.value) {
            userRepository.logOutWithUserManager()
        }
    }
    }

    fun logOut() {
        applicationScope.launch {