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

Commit 39b52547 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Have NPVC act as BrightnessMirrorShowingInteractor

That way, it can intercept the flow and make sure that we don't dismiss
the mirror until the alpha 0 -> 1 animation has finished.

Test: manual
Fixes: 379324369
Flag: com.android.systemui.qs_ui_refactor_compose_fragment

Change-Id: I5c2cbb8081386a8ffa8757c6bc4b5127017cc863
parent fd9d81ca
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ 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.settings.brightness.data.repository.brightnessMirrorShowingRepository
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
@@ -34,8 +33,7 @@ class BrightnessMirrorShowingInteractorTest : SysuiTestCase() {

    private val kosmos = testKosmos()

    private val underTest =
        BrightnessMirrorShowingInteractor(kosmos.brightnessMirrorShowingRepository)
    private val underTest = kosmos.brightnessMirrorShowingInteractor

    @Test
    fun isShowing_setAndFlow() =
+4 −4
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.qs.QSFragmentLegacy;
import com.android.systemui.res.R;
import com.android.systemui.screenrecord.RecordingController;
import com.android.systemui.settings.brightness.domain.interactor.BrightnessMirrorShowingInteractor;
import com.android.systemui.settings.brightness.data.repository.BrightnessMirrorShowingRepository;
import com.android.systemui.shade.data.repository.FakeShadeRepository;
import com.android.systemui.shade.data.repository.ShadeAnimationRepository;
import com.android.systemui.shade.data.repository.ShadeRepository;
@@ -314,8 +314,8 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
    protected ShadeRepository mShadeRepository;
    protected FakeMSDLPlayer mMSDLPlayer = mKosmos.getMsdlPlayer();

    protected BrightnessMirrorShowingInteractor mBrightnessMirrorShowingInteractor =
            mKosmos.getBrightnessMirrorShowingInteractor();
    protected BrightnessMirrorShowingRepository mBrightnessMirrorShowingRepository =
            mKosmos.getBrightnessMirrorShowingRepository();

    protected final FalsingManagerFake mFalsingManager = new FalsingManagerFake();
    protected final Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
@@ -588,7 +588,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
                mPowerInteractor,
                mKeyguardClockPositionAlgorithm,
                mMSDLPlayer,
                mBrightnessMirrorShowingInteractor,
                mBrightnessMirrorShowingRepository,
                new BlurConfig(0f, 0f));
        mNotificationPanelViewController.initDependencies(
                mCentralSurfaces,
+2 −2
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.res.R
import com.android.systemui.settings.brightness.data.repository.BrightnessMirrorShowingRepository
import com.android.systemui.settings.brightness.domain.interactor.BrightnessMirrorShowingInteractor
import com.android.systemui.settings.brightness.domain.interactor.BrightnessMirrorShowingInteractorPassThrough
import com.android.systemui.shade.NotificationShadeWindowView.InteractionEventHandler
import com.android.systemui.shade.data.repository.ShadeAnimationRepository
import com.android.systemui.shade.data.repository.ShadeRepositoryImpl
@@ -143,7 +143,7 @@ class NotificationShadeWindowViewTest : SysuiTestCase() {

    private val brightnessMirrorShowingRepository = BrightnessMirrorShowingRepository()
    private val brightnessMirrorShowingInteractor =
        BrightnessMirrorShowingInteractor(brightnessMirrorShowingRepository)
        BrightnessMirrorShowingInteractorPassThrough(brightnessMirrorShowingRepository)

    private lateinit var underTest: NotificationShadeWindowView
    private lateinit var controller: NotificationShadeWindowViewController
+3 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.scene.domain.startable

import androidx.annotation.VisibleForTesting
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.compose.animation.scene.ContentKey
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.OverlayKey
@@ -35,7 +36,7 @@ import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.brightness.domain.interactor.BrightnessMirrorShowingInteractor
import com.android.systemui.settings.brightness.domain.interactor.BrightnessMirrorShowingInteractorPassThrough
import com.android.systemui.statusbar.phone.DozeServiceHost
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.ScrimState
@@ -49,7 +50,6 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import com.android.app.tracing.coroutines.launchTraced as launch

@SysUISingleton
class ScrimStartable
@@ -64,7 +64,7 @@ constructor(
    biometricUnlockInteractor: BiometricUnlockInteractor,
    private val statusBarKeyguardViewManager: StatusBarKeyguardViewManager,
    private val alternateBouncerInteractor: AlternateBouncerInteractor,
    brightnessMirrorShowingInteractor: BrightnessMirrorShowingInteractor,
    brightnessMirrorShowingInteractor: BrightnessMirrorShowingInteractorPassThrough,
    private val dozeServiceHost: DozeServiceHost,
) : CoreStartable {

+13 −4
Original line number Diff line number Diff line
@@ -19,19 +19,28 @@ package com.android.systemui.settings.brightness.domain.interactor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.settings.brightness.data.repository.BrightnessMirrorShowingRepository
import javax.inject.Inject
import kotlinx.coroutines.flow.StateFlow

interface BrightnessMirrorShowingInteractor {
    val isShowing: StateFlow<Boolean>

    fun setMirrorShowing(showing: Boolean)
}

/** This interactor is just a passthrough of the [BrightnessMirrorShowingRepository]. */
@SysUISingleton
class BrightnessMirrorShowingInteractor
class BrightnessMirrorShowingInteractorPassThrough
@Inject
constructor(private val brightnessMirrorShowingRepository: BrightnessMirrorShowingRepository) {
constructor(private val brightnessMirrorShowingRepository: BrightnessMirrorShowingRepository) :
    BrightnessMirrorShowingInteractor {
    /**
     * Whether a brightness mirror is showing (either as a compose overlay or as a separate mirror).
     *
     * This can be used to determine whether other views/composables have to be hidden.
     */
    val isShowing = brightnessMirrorShowingRepository.isShowing
    override val isShowing = brightnessMirrorShowingRepository.isShowing

    fun setMirrorShowing(showing: Boolean) {
    override fun setMirrorShowing(showing: Boolean) {
        brightnessMirrorShowingRepository.setMirrorShowing(showing)
    }
}
Loading