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

Commit c78a7ff7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I4c7fb842,Ie9541868 into main

* changes:
  Create a separate composable for integrating the bouncer in legacy keyguard.
  Change ComposeBouncerFlags to an object instead of an interface + impl
parents f8a4404e 8858a75d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package com.android.systemui.bouncer.ui.viewmodel
import android.content.pm.UserInfo
import android.hardware.biometrics.BiometricFaceConstants
import android.hardware.fingerprint.FingerprintManager
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.widget.LockPatternUtils
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
@@ -35,7 +37,6 @@ import com.android.systemui.biometrics.data.repository.fakeFacePropertyRepositor
import com.android.systemui.biometrics.data.repository.fakeFingerprintPropertyRepository
import com.android.systemui.biometrics.shared.model.SensorStrength
import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
import com.android.systemui.bouncer.shared.flag.fakeComposeBouncerFlags
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor
import com.android.systemui.deviceentry.shared.model.ErrorFaceAuthenticationStatus
@@ -71,6 +72,7 @@ import org.junit.runner.RunWith
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
@EnableFlags(Flags.FLAG_COMPOSE_BOUNCER)
class BouncerMessageViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
@@ -82,7 +84,6 @@ class BouncerMessageViewModelTest : SysuiTestCase() {
    @Before
    fun setUp() {
        kosmos.fakeUserRepository.setUserInfos(listOf(PRIMARY_USER))
        kosmos.fakeComposeBouncerFlags.composeBouncerEnabled = true
        overrideResource(
            R.array.config_face_acquire_device_entry_ignorelist,
            intArrayOf(ignoreHelpMessageId)
+2 −2
Original line number Diff line number Diff line
@@ -32,11 +32,11 @@ import com.android.systemui.authentication.shared.model.AuthenticationMethodMode
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel.Pin
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel.Sim
import com.android.systemui.authentication.shared.model.AuthenticationResultModel
import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.util.kotlin.onSubscriberAdded
@@ -254,7 +254,7 @@ constructor(
    override val hasLockoutOccurred: StateFlow<Boolean> = _hasLockoutOccurred.asStateFlow()

    init {
        if (SceneContainerFlag.isEnabled) {
        if (ComposeBouncerFlags.isComposeBouncerOrSceneContainerEnabled()) {
            // Hydrate failedAuthenticationAttempts initially and whenever the selected user
            // changes.
            applicationScope.launch {
+5 −29
Original line number Diff line number Diff line
@@ -17,18 +17,17 @@
package com.android.systemui.bouncer.shared.flag

import com.android.systemui.Flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import dagger.Module
import dagger.Provides

interface ComposeBouncerFlags {
object ComposeBouncerFlags {

    /**
     * Returns `true` if the Compose bouncer is enabled or if the scene container framework is
     * enabled; `false` otherwise.
     */
    fun isComposeBouncerOrSceneContainerEnabled(): Boolean
    fun isComposeBouncerOrSceneContainerEnabled(): Boolean {
        return SceneContainerFlag.isEnabled || Flags.composeBouncer()
    }

    /**
     * Returns `true` if only compose bouncer is enabled and scene container framework is not
@@ -39,30 +38,7 @@ interface ComposeBouncerFlags {
            "that includes compose bouncer in legacy keyguard.",
        replaceWith = ReplaceWith("isComposeBouncerOrSceneContainerEnabled()")
    )
    fun isOnlyComposeBouncerEnabled(): Boolean
}

class ComposeBouncerFlagsImpl() : ComposeBouncerFlags {

    override fun isComposeBouncerOrSceneContainerEnabled(): Boolean {
        return SceneContainerFlag.isEnabled || Flags.composeBouncer()
    }

    @Deprecated(
        "Avoid using this, this is meant to be used only by the glue code " +
            "that includes compose bouncer in legacy keyguard.",
        replaceWith = ReplaceWith("isComposeBouncerOrSceneContainerEnabled()")
    )
    override fun isOnlyComposeBouncerEnabled(): Boolean {
    fun isOnlyComposeBouncerEnabled(): Boolean {
        return !SceneContainerFlag.isEnabled && Flags.composeBouncer()
    }
}

@Module
object ComposeBouncerFlagsModule {
    @Provides
    @SysUISingleton
    fun impl(): ComposeBouncerFlags {
        return ComposeBouncerFlagsImpl()
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -55,12 +55,11 @@ constructor(
class BouncerViewBinder
@Inject
constructor(
    private val composeBouncerFlags: ComposeBouncerFlags,
    private val legacyBouncerDependencies: Lazy<LegacyBouncerDependencies>,
    private val composeBouncerDependencies: Lazy<ComposeBouncerDependencies>,
) {
    fun bind(view: ViewGroup) {
        if (composeBouncerFlags.isOnlyComposeBouncerEnabled()) {
        if (ComposeBouncerFlags.isOnlyComposeBouncerEnabled()) {
            val deps = composeBouncerDependencies.get()
            ComposeBouncerViewBinder.bind(
                view,
+2 −13
Original line number Diff line number Diff line
@@ -8,14 +8,12 @@ import androidx.compose.ui.platform.ComposeView
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.compose.theme.PlatformTheme
import com.android.keyguard.ViewMediatorCallback
import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.composable.BouncerContent
import com.android.systemui.bouncer.ui.composable.BouncerContainer
import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import kotlinx.coroutines.flow.collectLatest
@@ -49,16 +47,7 @@ object ComposeBouncerViewBinder {
                                    this@repeatWhenAttached.lifecycle
                            }
                        )
                        setContent {
                            PlatformTheme {
                                BouncerContent(
                                    rememberViewModel("ComposeBouncerViewBinder") {
                                        viewModelFactory.create()
                                    },
                                    dialogFactory,
                                )
                            }
                        }
                        setContent { BouncerContainer(viewModelFactory, dialogFactory) }
                    }
                }
            }
Loading