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

Commit 10f2dc2a authored by Kai Li's avatar Kai Li Committed by Android (Google) Code Review
Browse files

Merge "Replace FocusedDisplayRepository with TaskStackChangeListener." into main

parents 850a6b2b 3f0407de
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.systemui.navigationbar.NavigationModeController
import com.android.systemui.navigationbar.NavigationModeController.ModeChangedListener
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.shade.data.repository.fakeFocusedDisplayRepository
import com.android.systemui.shared.system.taskStackChangeListeners
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.update
@@ -93,7 +94,7 @@ class AmbientCueRepositoryTest : SysuiTestCase() {
            dumpManager = dumpManager,
            executor = kosmos.fakeExecutor,
            applicationContext = kosmos.testableContext,
            focusdDisplayRepository = kosmos.fakeFocusedDisplayRepository,
            taskStackChangeListeners = kosmos.taskStackChangeListeners,
        )

    @Test
@@ -105,7 +106,9 @@ class AmbientCueRepositoryTest : SysuiTestCase() {
            verify(smartSpaceSession)
                .addOnTargetsAvailableListener(any(), onTargetsAvailableListenerCaptor.capture())

            fakeFocusedDisplayRepository.setGlobalTask(RunningTaskInfo().apply { taskId = TASK_ID })
            taskStackChangeListeners.listenerImpl.onTaskMovedToFront(
                RunningTaskInfo().apply { taskId = TASK_ID }
            )
            advanceTimeBy(DEBOUNCE_DELAY_MS)
            onTargetsAvailableListenerCaptor.firstValue.onTargetsAvailable(listOf(autofillTarget))
            advanceUntilIdle()
@@ -197,8 +200,11 @@ class AmbientCueRepositoryTest : SysuiTestCase() {
    fun globallyFocusedTaskId_whenFocusedTaskChange_taskIdUpdated() =
        kosmos.runTest {
            val globallyFocusedTaskId by collectLastValue(underTest.globallyFocusedTaskId)
            runCurrent()

            fakeFocusedDisplayRepository.setGlobalTask(RunningTaskInfo().apply { taskId = TASK_ID })
            taskStackChangeListeners.listenerImpl.onTaskMovedToFront(
                RunningTaskInfo().apply { taskId = TASK_ID }
            )
            advanceTimeBy(DEBOUNCE_DELAY_MS)

            assertThat(globallyFocusedTaskId).isEqualTo(TASK_ID)
+15 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.ambientcue.data.repository

import android.app.ActivityManager.RunningTaskInfo
import android.app.ActivityOptions
import android.app.ActivityTaskManager
import android.app.BroadcastOptions
@@ -38,12 +39,13 @@ import com.android.systemui.ambientcue.shared.model.ActionModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.data.repository.FocusedDisplayRepository
import com.android.systemui.dump.DumpManager
import com.android.systemui.navigationbar.NavigationModeController
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.shared.system.QuickStepContract
import com.android.systemui.shared.system.TaskStackChangeListener
import com.android.systemui.shared.system.TaskStackChangeListeners
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import java.io.PrintWriter
import java.util.concurrent.Executor
@@ -101,8 +103,8 @@ constructor(
    dumpManager: DumpManager,
    @Background executor: Executor,
    @Application applicationContext: Context,
    focusdDisplayRepository: FocusedDisplayRepository,
    launcherProxyService: LauncherProxyService,
    private val taskStackChangeListeners: TaskStackChangeListeners,
) : AmbientCueRepository, Dumpable {

    init {
@@ -263,8 +265,17 @@ constructor(

    @OptIn(FlowPreview::class)
    override val globallyFocusedTaskId: StateFlow<Int> =
        focusdDisplayRepository.globallyFocusedTask
            .map { it?.taskId ?: INVALID_TASK_ID }
        conflatedCallbackFlow {
                val taskListener =
                    object : TaskStackChangeListener {
                        override fun onTaskMovedToFront(runningTaskInfo: RunningTaskInfo) {
                            trySend(runningTaskInfo.taskId)
                        }
                    }

                taskStackChangeListeners.registerTaskStackListener(taskListener)
                awaitClose { taskStackChangeListeners.unregisterTaskStackListener(taskListener) }
            }
            .distinctUntilChanged()
            // Filter out focused task quick change. For example, when user clicks ambient cue, the
            // click event will also be sent to NavBar, so it will cause a quick change of focused