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

Commit 1c1de5b8 authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz
Browse files

Dump KeyguardMediaController state

This CL dumps state of KeyguardMediaController to provide more data in BR for b/298213983 and logs the event when the last received StatusBarState(by listener)  and current StatusBarState(directly checking mutable state) are different.

Flag: NONE
Bug: b/298213983
Test: BugReports
Change-Id: I8fd751cac25ebef1fde14f157b2ca82ee10ad0d7
parent b25fe0a8
Loading
Loading
Loading
Loading
+55 −3
Original line number Diff line number Diff line
@@ -23,11 +23,14 @@ import android.net.Uri
import android.os.Handler
import android.os.UserHandle
import android.provider.Settings
import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.annotation.VisibleForTesting
import com.android.systemui.Dumpable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.media.dagger.MediaModule.KEYGUARD
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.StatusBarState
@@ -36,7 +39,11 @@ import com.android.systemui.statusbar.notification.stack.MediaContainerView
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.SplitShadeStateController
import com.android.systemui.util.asIndenting
import com.android.systemui.util.println
import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.withIncreasedIndent
import java.io.PrintWriter
import javax.inject.Inject
import javax.inject.Named

@@ -55,13 +62,18 @@ constructor(
    private val secureSettings: SecureSettings,
    @Main private val handler: Handler,
    configurationController: ConfigurationController,
    private val splitShadeStateController: SplitShadeStateController
) {
    private val splitShadeStateController: SplitShadeStateController,
    dumpManager: DumpManager,
) : Dumpable {
    /** It's added for debugging purpose to directly see last received StatusBarState. */
    private var lastReceivedStatusBarState = -1

    init {
        dumpManager.registerDumpable(this)
        statusBarStateController.addCallback(
            object : StatusBarStateController.StateListener {
                override fun onStateChanged(newState: Int) {
                    lastReceivedStatusBarState = newState
                    refreshMediaPosition()
                }

@@ -206,7 +218,17 @@ constructor(
    }

    fun refreshMediaPosition() {
        val keyguardOrUserSwitcher = (statusBarStateController.state == StatusBarState.KEYGUARD)
        val currentState = statusBarStateController.state
        if (lastReceivedStatusBarState != -1 && currentState != lastReceivedStatusBarState) {
            Log.wtfStack(
                TAG,
                "currentState[${StatusBarState.toString(currentState)}] is " +
                    "different from the last " +
                    "received one[${StatusBarState.toString(lastReceivedStatusBarState)}]."
            )
        }

        val keyguardOrUserSwitcher = (currentState == StatusBarState.KEYGUARD)
        // mediaHost.visible required for proper animations handling
        visible =
            mediaHost.visible &&
@@ -263,4 +285,34 @@ constructor(
            visibilityChangedListener?.invoke(newVisibility == View.VISIBLE)
        }
    }

    override fun dump(pw: PrintWriter, args: Array<out String>) {
        pw.asIndenting().run {
            println("KeyguardMediaController")
            withIncreasedIndent {
                println("Self", this@KeyguardMediaController)
                println("visible", visible)
                println("useSplitShade", useSplitShade)
                println("allowMediaPlayerOnLockScreen", allowMediaPlayerOnLockScreen)
                println("bypassController.bypassEnabled", bypassController.bypassEnabled)
                println("isDozeWakeUpAnimationWaiting", isDozeWakeUpAnimationWaiting)
                println("singlePaneContainer", singlePaneContainer)
                println("splitShadeContainer", splitShadeContainer)
                if (lastReceivedStatusBarState != -1) {
                    println(
                        "lastReceivedStatusBarState",
                        StatusBarState.toString(lastReceivedStatusBarState)
                    )
                }
                println(
                    "statusBarStateController.state",
                    StatusBarState.toString(statusBarStateController.state)
                )
            }
        }
    }

    private companion object {
        private const val TAG = "KeyguardMediaController"
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.View.GONE
import android.view.View.VISIBLE
import android.widget.FrameLayout
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
@@ -32,6 +33,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
import com.android.systemui.util.animation.UniqueObjectHostView
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.settings.FakeSettings
import com.android.systemui.utils.os.FakeHandler
@@ -91,7 +93,8 @@ class KeyguardMediaControllerTest : SysuiTestCase() {
                settings,
                fakeHandler,
                configurationController,
                ResourcesSplitShadeStateController()
                ResourcesSplitShadeStateController(),
                mock<DumpManager>()
            )
        keyguardMediaController.attachSinglePaneContainer(mediaContainerView)
        keyguardMediaController.useSplitShade = false