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

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

Merge "Hide ambient cue on shade or keyguard" into main

parents 6b3b23c1 7974f606
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import com.android.systemui.ambientcue.data.repository.ambientCueRepository
import com.android.systemui.ambientcue.data.repository.fake
import com.android.systemui.ambientcue.shared.model.ActionModel
import com.android.systemui.ambientcue.shared.model.IconModel
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.res.R
@@ -125,4 +127,30 @@ class AmbientCueInteractorTest : SysuiTestCase() {
            ambientCueRepository.fake.setTaskBarVisible(false)
            assertThat(isTaskBarVisible).isFalse()
        }

    @Test
    fun isOccludedBySystemUi_collapsedShade_noKeyguard_false() =
        kosmos.runTest {
            val isOccludedBySystemUi by collectLastValue(ambientCueInteractor.isOccludedBySystemUi)
            fakeKeyguardRepository.setKeyguardShowing(false)
            fakeKeyguardRepository.setStatusBarState(StatusBarState.SHADE)
            assertThat(isOccludedBySystemUi).isFalse()
        }

    @Test
    fun isOccludedBySystemUi_whenKeyguardVisible_true() =
        kosmos.runTest {
            val isOccludedBySystemUi by collectLastValue(ambientCueInteractor.isOccludedBySystemUi)
            fakeKeyguardRepository.setKeyguardShowing(true)
            assertThat(isOccludedBySystemUi).isTrue()
        }

    @Test
    fun isOccludedBySystemUi_whenExpandedShade_true() =
        kosmos.runTest {
            val isOccludedBySystemUi by collectLastValue(ambientCueInteractor.isOccludedBySystemUi)
            // SHADE_LOCKED forces the expansion to 1f in ShadeInteractor
            fakeKeyguardRepository.setStatusBarState(StatusBarState.SHADE_LOCKED)
            assertThat(isOccludedBySystemUi).isTrue()
        }
}
+25 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.ambientcue.data.repository.fake
import com.android.systemui.ambientcue.domain.interactor.ambientCueInteractor
import com.android.systemui.ambientcue.shared.model.ActionModel
import com.android.systemui.ambientcue.shared.model.IconModel
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.advanceTimeBy
import com.android.systemui.kosmos.runCurrent
@@ -96,6 +97,30 @@ class AmbientCueViewModelTest : SysuiTestCase() {
            assertThat(viewModel.isVisible).isFalse()
        }

    @Test
    fun isVisible_isOccludedBySystemUi_true() =
        kosmos.runTest {
            initializeIsVisible()
            assertThat(viewModel.isVisible).isTrue()

            fakeKeyguardRepository.setKeyguardShowing(false)
            runCurrent()

            assertThat(viewModel.isVisible).isTrue()
        }

    @Test
    fun isVisible_isOccludedBySystemUi_false() =
        kosmos.runTest {
            initializeIsVisible()
            assertThat(viewModel.isVisible).isTrue()

            fakeKeyguardRepository.setKeyguardShowing(true)
            runCurrent()

            assertThat(viewModel.isVisible).isFalse()
        }

    @Test
    fun onClick_collapses() =
        kosmos.runTest {
+17 −1
Original line number Diff line number Diff line
@@ -19,14 +19,30 @@ package com.android.systemui.ambientcue.domain.interactor
import android.graphics.Rect
import com.android.systemui.ambientcue.data.repository.AmbientCueRepository
import com.android.systemui.ambientcue.shared.model.ActionModel
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.update

class AmbientCueInteractor @Inject constructor(private val repository: AmbientCueRepository) {
class AmbientCueInteractor
@Inject
constructor(
    private val repository: AmbientCueRepository,
    shadeInteractor: ShadeInteractor,
    keyguardInteractor: KeyguardInteractor,
) {
    val isRootViewAttached: StateFlow<Boolean> = repository.isRootViewAttached
    val actions: StateFlow<List<ActionModel>> = repository.actions
    val isImeVisible: StateFlow<Boolean> = repository.isImeVisible
    val isOccludedBySystemUi: Flow<Boolean> =
        combine(shadeInteractor.isShadeFullyCollapsed, keyguardInteractor.isKeyguardVisible) {
            isShadeFullyCollapsed,
            isKeyguardVisible ->
            !isShadeFullyCollapsed || isKeyguardVisible
        }
    val isGestureNav: StateFlow<Boolean> = repository.isGestureNav
    val recentsButtonPosition: StateFlow<Rect?> = repository.recentsButtonPosition
    val isTaskBarVisible: StateFlow<Boolean> = repository.isTaskBarVisible
+8 −1
Original line number Diff line number Diff line
@@ -64,8 +64,15 @@ constructor(
            source = ambientCueInteractor.isImeVisible,
        )

    private val isOccludedBySystemUi: Boolean by
        hydrator.hydratedStateOf(
            traceName = "isOccludedBySystemUi",
            initialValue = false,
            source = ambientCueInteractor.isOccludedBySystemUi,
        )

    val isVisible: Boolean
        get() = isRootViewAttached && !isImeVisible
        get() = isRootViewAttached && !isImeVisible && !isOccludedBySystemUi

    var isExpanded: Boolean by mutableStateOf(false)
        private set
+5 −1
Original line number Diff line number Diff line
@@ -17,7 +17,11 @@
package com.android.systemui.ambientcue.domain.interactor

import com.android.systemui.ambientcue.data.repository.ambientCueRepository
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.shade.domain.interactor.shadeInteractor

val Kosmos.ambientCueInteractor by Fixture { AmbientCueInteractor(ambientCueRepository) }
val Kosmos.ambientCueInteractor by Fixture {
    AmbientCueInteractor(ambientCueRepository, shadeInteractor, keyguardInteractor)
}