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

Commit 9ad194d4 authored by Lucas Dupin's avatar Lucas Dupin Committed by Android (Google) Code Review
Browse files

Merge "Dump internal state to bug reports" into main

parents 41cba494 193b698a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.systemui.ambientcue.data.repository.AmbientCueRepositoryImpl.
import com.android.systemui.ambientcue.data.repository.AmbientCueRepositoryImpl.Companion.EXTRA_AUTOFILL_ID
import com.android.systemui.ambientcue.shared.model.ActionModel
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.dump.DumpManager
import com.android.systemui.kosmos.advanceTimeBy
import com.android.systemui.kosmos.advanceUntilIdle
import com.android.systemui.kosmos.backgroundScope
@@ -72,6 +73,7 @@ class AmbientCueRepositoryTest : SysuiTestCase() {
    private val autofillManager = mock<AutofillManager>()
    private val activityStarter = mock<ActivityStarter>()
    private val launcherProxyService = mock<LauncherProxyService>()
    private val dumpManager = mock<DumpManager>()
    private val navigationModeController = mock<NavigationModeController>()
    private val smartSpaceManager =
        mock<SmartspaceManager>() {
@@ -88,6 +90,7 @@ class AmbientCueRepositoryTest : SysuiTestCase() {
            activityStarter = activityStarter,
            launcherProxyService = launcherProxyService,
            navigationModeController = navigationModeController,
            dumpManager = dumpManager,
            executor = kosmos.fakeExecutor,
            applicationContext = kosmos.testableContext,
            focusdDisplayRepository = kosmos.fakeFocusedDisplayRepository,
+18 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.view.autofill.AutofillId
import android.view.autofill.AutofillManager
import androidx.annotation.VisibleForTesting
import androidx.tracing.trace
import com.android.systemui.Dumpable
import com.android.systemui.LauncherProxyService
import com.android.systemui.LauncherProxyService.LauncherProxyListener
import com.android.systemui.ambientcue.shared.model.ActionModel
@@ -38,11 +39,13 @@ 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.utils.coroutines.flow.conflatedCallbackFlow
import java.io.PrintWriter
import java.util.concurrent.Executor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -95,11 +98,12 @@ constructor(
    private val autofillManager: AutofillManager?,
    private val activityStarter: ActivityStarter,
    private val navigationModeController: NavigationModeController,
    dumpManager: DumpManager,
    @Background executor: Executor,
    @Application applicationContext: Context,
    focusdDisplayRepository: FocusedDisplayRepository,
    launcherProxyService: LauncherProxyService,
) : AmbientCueRepository {
) : AmbientCueRepository, Dumpable {

    init {
        val callback =
@@ -113,6 +117,7 @@ constructor(
                }
            }
        launcherProxyService.addCallback(callback)
        dumpManager.registerNormalDumpable(this)
    }

    override val actions: StateFlow<List<ActionModel>> =
@@ -288,6 +293,18 @@ constructor(
                initialValue = false,
            )

    override fun dump(pw: PrintWriter, args: Array<out String>) {
        pw.println("isRootViewAttached: ${isRootViewAttached.value}")
        pw.println("targetTaskId: ${targetTaskId.value}")
        pw.println("globallyFocusedTaskId: ${globallyFocusedTaskId.value}")
        pw.println("isDeactivated: ${isDeactivated.value}")
        pw.println("isImeVisible: ${isImeVisible.value}")
        pw.println("recentsButtonPosition: ${recentsButtonPosition.value}")
        pw.println("isTaskBarVisible: ${isTaskBarVisible.value}")
        pw.println("isGestureNav: ${isGestureNav.value}")
        pw.println("actions: ${actions.value}")
    }

    companion object {
        // Surface that PCC wants to push cards into
        @VisibleForTesting const val AMBIENT_CUE_SURFACE = "ambientcue"
+24 −1
Original line number Diff line number Diff line
@@ -22,12 +22,17 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.toComposeRect
import com.android.app.tracing.coroutines.coroutineScopeTraced
import com.android.systemui.Dumpable
import com.android.systemui.ambientcue.domain.interactor.AmbientCueInteractor
import com.android.systemui.dump.DumpManager
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.Hydrator
import com.android.systemui.util.kotlin.launchAndDispose
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.io.PrintWriter
import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.Job
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.delay
@@ -38,7 +43,11 @@ import kotlinx.coroutines.launch

class AmbientCueViewModel
@AssistedInject
constructor(private val ambientCueInteractor: AmbientCueInteractor) : ExclusiveActivatable() {
constructor(
    private val ambientCueInteractor: AmbientCueInteractor,
    private val dumpManager: DumpManager,
) : ExclusiveActivatable(), Dumpable {

    private val hydrator = Hydrator("AmbientCueViewModel.hydrator")

    private val isRootViewAttached: Boolean by
@@ -159,10 +168,24 @@ constructor(private val ambientCueInteractor: AmbientCueInteractor) : ExclusiveA
                    delayAndDeactivateCueBar()
                }
            }
            launchAndDispose {
                dumpManager.registerNormalDumpable(TAG, this@AmbientCueViewModel)
                DisposableHandle { dumpManager.unregisterDumpable(TAG) }
            }
            awaitCancellation()
        }
    }

    override fun dump(pw: PrintWriter, args: Array<out String>) {
        pw.println("isRootViewAttached: $isRootViewAttached")
        pw.println("isImeVisible: $isImeVisible")
        pw.println("isVisible: $isVisible")
        pw.println("isExpanded: $isExpanded")
        pw.println("pillStyle: $pillStyle")
        pw.println("deactivateCueBarJob: $deactivateCueBarJob")
        pw.println("actions: $actions")
    }

    @AssistedFactory
    interface Factory {
        fun create(): AmbientCueViewModel
+4 −1
Original line number Diff line number Diff line
@@ -17,10 +17,13 @@
package com.android.systemui.ambientcue.ui.viewmodel

import com.android.systemui.ambientcue.domain.interactor.ambientCueInteractor
import com.android.systemui.dump.dumpManager
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture

private val Kosmos.ambientCueViewModel by Fixture { AmbientCueViewModel(ambientCueInteractor) }
private val Kosmos.ambientCueViewModel by Fixture {
    AmbientCueViewModel(ambientCueInteractor, dumpManager)
}

val Kosmos.ambientCueViewModelFactory by Fixture {
    object : AmbientCueViewModel.Factory {