From 1c1de5b81f35a5ed243d139fc6a0b20c669ad4c4 Mon Sep 17 00:00:00 2001 From: Ibrahim Yilmaz Date: Thu, 9 Nov 2023 11:20:15 +0000 Subject: 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 --- .../media/controls/ui/KeyguardMediaController.kt | 58 ++++++++++++++++++++-- .../controls/ui/KeyguardMediaControllerTest.kt | 5 +- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/KeyguardMediaController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/KeyguardMediaController.kt index 83a6e58cc444..773c292befcf 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/KeyguardMediaController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/KeyguardMediaController.kt @@ -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) { + 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" + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/KeyguardMediaControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/KeyguardMediaControllerTest.kt index 7ad2ce8ae110..f4293f035cd1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/KeyguardMediaControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/KeyguardMediaControllerTest.kt @@ -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() ) keyguardMediaController.attachSinglePaneContainer(mediaContainerView) keyguardMediaController.useSplitShade = false -- cgit v1.2.3-59-g8ed1b