summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Beth Thibodeau <ethibodeau@google.com> 2025-03-24 11:49:29 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-24 11:49:29 -0700
commit0690b03fd027219694d938494da38b02edd535fc (patch)
tree7ff814d1424b0a5de7a88177b7e5d8cbc9591197
parenta3edf74286e3de5c8b5a3b67cfb8aadbaca645c1 (diff)
parent6e44fbbf665a2f1688c662dcbc2c12da9e7e02c0 (diff)
Merge "Update crossfade status when animation is canceled" into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManager.kt24
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java1
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaViewControllerTest.kt5
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManagerKosmos.kt3
8 files changed, 38 insertions, 7 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
index 0846b06cce03..a9ea481b449d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
@@ -314,6 +314,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
+ " " + mockTileString + "\n"
+ " " + mockTileViewString + "\n"
+ " media bounds: null\n"
+ + " media visibility: false\n"
+ " horizontal layout: false\n"
+ " last orientation: 0\n"
+ " mShouldUseSplitNotificationShade: false\n";
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt
index 365389107648..d9174d3969b5 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerLogger.kt
@@ -77,7 +77,7 @@ constructor(@MediaCarouselControllerLog private val buffer: LogBuffer) {
bool1 = visible
bool2 = oldState
},
- { "media host visibility changed location=$location, visible:$visible, was:$oldState" },
+ { "media host visibility changed location=$int1, visible:$bool1, was:$bool2" },
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
index ec7d3328a2fd..133b029731f2 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
@@ -208,6 +208,7 @@ constructor(
cancelled = true
animationPending = false
rootView?.removeCallbacks(startAnimation)
+ isCrossFadeAnimatorRunning = false
}
override fun onAnimationEnd(animation: Animator) {
@@ -768,6 +769,7 @@ constructor(
if (!willFade || isCurrentlyInGuidedTransformation() || !animate) {
// if we're fading, we want the desired location / measurement only to change
// once fully faded. This is happening in the host attachment
+ logger.logMediaLocation("no fade", currentAttachmentLocation, desiredLocation)
mediaCarouselController.onDesiredLocationChanged(
desiredLocation,
host,
@@ -1188,8 +1190,8 @@ constructor(
// immediately
// when the desired location changes. This callback will update the measurement
// of the carousel, only once we've faded out at the old location and then
- // reattach
- // to fade it in at the new location.
+ // reattach to fade it in at the new location.
+ logger.logMediaLocation("crossfade", currentAttachmentLocation, newLocation)
mediaCarouselController.onDesiredLocationChanged(
newLocation,
getHost(newLocation),
@@ -1204,6 +1206,7 @@ constructor(
* should remain in the previous location, while after the switch it should be at the desired
* location.
*/
+ @MediaLocation
private fun resolveLocationForFading(): Int {
if (isCrossFadeAnimatorRunning) {
// When animating between two hosts with a fade, let's keep ourselves in the old
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManager.kt
index 782da4bd6a41..3b8ef6adf2dd 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManager.kt
@@ -17,19 +17,24 @@
package com.android.systemui.media.controls.ui.controller
import com.android.app.tracing.traceSection
+import com.android.systemui.Dumpable
import com.android.systemui.Flags.mediaControlsUmoInflationInBackground
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dump.DumpManager
import com.android.systemui.media.controls.ui.view.MediaHostState
import com.android.systemui.util.animation.MeasurementOutput
+import java.io.PrintWriter
import javax.inject.Inject
+private val TAG = "MediaHostStatesManager"
+
/**
* A class responsible for managing all media host states of the various host locations and
* coordinating the heights among different players. This class can be used to get the most up to
* date state for any location.
*/
@SysUISingleton
-class MediaHostStatesManager @Inject constructor() {
+class MediaHostStatesManager @Inject constructor(dumpManager: DumpManager) : Dumpable {
private val callbacks: MutableSet<Callback> = mutableSetOf()
private val controllers: MutableSet<MediaViewController> = mutableSetOf()
@@ -43,6 +48,10 @@ class MediaHostStatesManager @Inject constructor() {
/** A map with all media states of all locations. */
val mediaHostStates: MutableMap<Int, MediaHostState> = mutableMapOf()
+ init {
+ dumpManager.registerNormalDumpable(TAG, this)
+ }
+
/**
* Notify that a media state for a given location has changed. Should only be called from Media
* hosts themselves.
@@ -125,6 +134,19 @@ class MediaHostStatesManager @Inject constructor() {
controllers.remove(controller)
}
+ override fun dump(pw: PrintWriter, args: Array<out String>) {
+ pw.apply {
+ println("Controllers: $controllers")
+ println("Callbacks: $callbacks")
+ for ((location, size) in carouselSizes) {
+ println("Size $location: ${size.measuredWidth} x ${size.measuredHeight}")
+ }
+ for ((location, state) in mediaHostStates) {
+ println("Host $location: visible ${state.visible}")
+ }
+ }
+ }
+
interface Callback {
/**
* Notify the callbacks that a media state for a host has changed, and that the
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt
index 089d16b98de8..357091bea1a1 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewLogger.kt
@@ -73,7 +73,7 @@ class MediaViewLogger @Inject constructor(@MediaViewLog private val buffer: LogB
bool1 = shadeVisible
bool2 = mediaVisible
},
- { "User visibility shade: $shadeVisible media: $mediaVisible" },
+ { "User visibility shade: $bool1 media: $bool2" },
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
index b0b02fa28390..4d5366ca79a1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
@@ -584,6 +584,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
}
if (mMediaHost != null) {
pw.println(" media bounds: " + mMediaHost.getCurrentBounds());
+ pw.println(" media visibility: " + mMediaHost.getVisible());
pw.println(" horizontal layout: " + mUsingHorizontalLayout);
pw.println(" last orientation: " + mLastOrientation);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaViewControllerTest.kt
index 760f73c726a2..8ab8364c9c67 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaViewControllerTest.kt
@@ -38,6 +38,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.widget.CachingIconView
import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.media.controls.ui.view.GutsViewHolder
import com.android.systemui.media.controls.ui.view.MediaHost
@@ -74,11 +75,11 @@ import org.mockito.MockitoAnnotations
@RunWith(AndroidJUnit4::class)
class MediaViewControllerTest : SysuiTestCase() {
private val mediaHostStateHolder = MediaHost.MediaHostStateHolder()
- private val mediaHostStatesManager = MediaHostStatesManager()
private val configurationController =
com.android.systemui.statusbar.phone.ConfigurationControllerImpl(context)
private var player = TransitionLayout(context, /* attrs */ null, /* defStyleAttr */ 0)
private val clock = FakeSystemClock()
+ private lateinit var mediaHostStatesManager: MediaHostStatesManager
private lateinit var mainExecutor: FakeExecutor
private lateinit var seekBar: SeekBar
private lateinit var multiRippleView: MultiRippleView
@@ -101,6 +102,7 @@ class MediaViewControllerTest : SysuiTestCase() {
private lateinit var actionPlayPause: ImageButton
private lateinit var actionNext: ImageButton
private lateinit var actionPrev: ImageButton
+ @Mock private lateinit var dumpManager: DumpManager
@Mock private lateinit var seamlessBackground: RippleDrawable
@Mock private lateinit var albumView: ImageView
@Mock lateinit var logger: MediaViewLogger
@@ -124,6 +126,7 @@ class MediaViewControllerTest : SysuiTestCase() {
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
+ mediaHostStatesManager = MediaHostStatesManager(dumpManager)
mainExecutor = FakeExecutor(clock)
mediaViewController =
object :
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManagerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManagerKosmos.kt
index 8b02c579d91d..e91433b820a8 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManagerKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/controller/MediaHostStatesManagerKosmos.kt
@@ -16,6 +16,7 @@
package com.android.systemui.media.controls.ui.controller
+import com.android.systemui.dump.dumpManager
import com.android.systemui.kosmos.Kosmos
-val Kosmos.mediaHostStatesManager by Kosmos.Fixture { MediaHostStatesManager() }
+val Kosmos.mediaHostStatesManager by Kosmos.Fixture { MediaHostStatesManager(dumpManager) }