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

Commit 63b4fb28 authored by Darrell Shi's avatar Darrell Shi
Browse files

Do not force home status bar on dream

Currently when an ongoing call is active, the home status bar is forced
to be present to show the ongoing call state. However the dream overlay
renders its own status bar with ongoing call state. So this change
excludes dreaming with overlay case for the home status bar force-show.

Test: atest OngoingCallInteractorTest
Test: verified on device that the home status bar no longer shows on
      dream during a call
Bug: 422469252
Flag: com.android.systemui.ongoing_activity_chips_on_dream
Change-Id: Ie7808bbb229d3c969a48ff3b8038960b388bce27
parent 02e10010
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
@@ -17,12 +17,16 @@
package com.android.systemui.statusbar.phone.ongoingcall.domain.interactor

import android.app.PendingIntent
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.activity.data.repository.activityManagerRepository
import com.android.systemui.activity.data.repository.fake
import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
@@ -343,6 +347,62 @@ class OngoingCallInteractorTest : SysuiTestCase() {
            assertThat(requiresStatusBarVisibleInWindowController).isFalse()
        }

    @DisableFlags(OngoingActivityChipsOnDream.FLAG_NAME)
    @Test
    fun ongoingCallNotificationAndDreaming_flagDisabled_setsRequiresStatusBarVisibleTrue() =
        kosmos.runTest {
            val isStatusBarRequired by collectLastValue(underTest.isStatusBarRequiredForOngoingCall)
            val requiresStatusBarVisibleInRepository by
                collectLastValue(
                    kosmos.fakeStatusBarModeRepository.defaultDisplay
                        .ongoingProcessRequiresStatusBarVisible
                )
            val requiresStatusBarVisibleInWindowController by
                collectLastValue(
                    kosmos.fakeStatusBarWindowControllerStore.defaultDisplay
                        .ongoingProcessRequiresStatusBarVisible
                )
            addOngoingCallState()

            assertThat(isStatusBarRequired).isTrue()
            assertThat(requiresStatusBarVisibleInRepository).isTrue()
            assertThat(requiresStatusBarVisibleInWindowController).isTrue()

            kosmos.fakeKeyguardRepository.setDreamingWithOverlay(true)

            assertThat(isStatusBarRequired).isTrue()
            assertThat(requiresStatusBarVisibleInRepository).isTrue()
            assertThat(requiresStatusBarVisibleInWindowController).isTrue()
        }

    @EnableFlags(OngoingActivityChipsOnDream.FLAG_NAME)
    @Test
    fun ongoingCallNotificationAndDreaming_flagEnabled_setsRequiresStatusBarVisibleFalse() =
        kosmos.runTest {
            val isStatusBarRequired by collectLastValue(underTest.isStatusBarRequiredForOngoingCall)
            val requiresStatusBarVisibleInRepository by
                collectLastValue(
                    kosmos.fakeStatusBarModeRepository.defaultDisplay
                        .ongoingProcessRequiresStatusBarVisible
                )
            val requiresStatusBarVisibleInWindowController by
                collectLastValue(
                    kosmos.fakeStatusBarWindowControllerStore.defaultDisplay
                        .ongoingProcessRequiresStatusBarVisible
                )
            addOngoingCallState()

            assertThat(isStatusBarRequired).isTrue()
            assertThat(requiresStatusBarVisibleInRepository).isTrue()
            assertThat(requiresStatusBarVisibleInWindowController).isTrue()

            kosmos.fakeKeyguardRepository.setDreamingWithOverlay(true)

            assertThat(isStatusBarRequired).isFalse()
            assertThat(requiresStatusBarVisibleInRepository).isFalse()
            assertThat(requiresStatusBarVisibleInWindowController).isFalse()
        }

    companion object {
        private const val UID = 885
    }
+13 −3
Original line number Diff line number Diff line
@@ -19,8 +19,10 @@ package com.android.systemui.statusbar.phone.ongoingcall.domain.interactor
import androidx.annotation.VisibleForTesting
import com.android.systemui.CoreStartable
import com.android.systemui.activity.data.repository.ActivityManagerRepository
import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream
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.log.LogBuffer
import com.android.systemui.log.core.Logger
import com.android.systemui.statusbar.data.repository.StatusBarModeRepositoryStore
@@ -63,6 +65,7 @@ constructor(
    private val statusBarWindowControllerStore: StatusBarWindowControllerStore,
    private val swipeStatusBarAwayGestureHandler: SwipeStatusBarAwayGestureHandler,
    activeNotificationsInteractor: ActiveNotificationsInteractor,
    keyguardInteractor: KeyguardInteractor,
    @OngoingCallLog private val logBuffer: LogBuffer,
) : CoreStartable {
    private val logger = Logger(logBuffer, TAG)
@@ -86,9 +89,16 @@ constructor(
    // TODO(b/400720280): maybe put this inside [OngoingCallModel].
    @VisibleForTesting
    val isStatusBarRequiredForOngoingCall =
        combine(ongoingCallState, isChipSwipedAway) { callState, chipSwipedAway ->
        combine(ongoingCallState, isChipSwipedAway, keyguardInteractor.isDreamingWithOverlay) {
            callState,
            chipSwipedAway,
            isDreamingWithOverlay ->
            callState.willCallChipBeVisible() &&
                // Don't force-show the status bar if the user has already swiped it away.
            callState.willCallChipBeVisible() && !chipSwipedAway
                !chipSwipedAway &&
                // Don't force-show the status bar if currently dreaming with overlay, as the
                // overlay render its own status bar
                !(OngoingActivityChipsOnDream.isEnabled && isDreamingWithOverlay)
        }

    // TODO(b/400720280): maybe put this inside [OngoingCallModel].
+11 −9
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.phone.ongoingcall.domain.interactor

import com.android.systemui.activity.data.repository.activityManagerRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.log.logcatLogBuffer
@@ -34,6 +35,7 @@ val Kosmos.ongoingCallInteractor: OngoingCallInteractor by
            statusBarModeRepositoryStore = fakeStatusBarModeRepository,
            statusBarWindowControllerStore = fakeStatusBarWindowControllerStore,
            swipeStatusBarAwayGestureHandler = swipeStatusBarAwayGestureHandler,
            keyguardInteractor = keyguardInteractor,
            logBuffer = logcatLogBuffer("OngoingCallInteractorKosmos"),
        )
    }