Merge "Restored the appearing behavior of media hosts" into tm-qpr-dev

This commit is contained in:
Selim Cinek
2023-01-11 10:19:44 +00:00
committed by Android (Google) Code Review
4 changed files with 52 additions and 19 deletions

View File

@@ -41,6 +41,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dreams.DreamOverlayStateController import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.controls.pipeline.MediaDataManager
import com.android.systemui.media.dream.MediaDreamComplication import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeStateEvents import com.android.systemui.shade.ShadeStateEvents
@@ -93,6 +94,7 @@ constructor(
private val keyguardStateController: KeyguardStateController, private val keyguardStateController: KeyguardStateController,
private val bypassController: KeyguardBypassController, private val bypassController: KeyguardBypassController,
private val mediaCarouselController: MediaCarouselController, private val mediaCarouselController: MediaCarouselController,
private val mediaManager: MediaDataManager,
private val keyguardViewController: KeyguardViewController, private val keyguardViewController: KeyguardViewController,
private val dreamOverlayStateController: DreamOverlayStateController, private val dreamOverlayStateController: DreamOverlayStateController,
configurationController: ConfigurationController, configurationController: ConfigurationController,
@@ -224,9 +226,9 @@ constructor(
private var inSplitShade = false private var inSplitShade = false
/** Is there any active media in the carousel? */ /** Is there any active media or recommendation in the carousel? */
private var hasActiveMedia: Boolean = false private var hasActiveMediaOrRecommendation: Boolean = false
get() = mediaHosts.get(LOCATION_QQS)?.visible == true get() = mediaManager.hasActiveMediaOrRecommendation()
/** Are we currently waiting on an animation to start? */ /** Are we currently waiting on an animation to start? */
private var animationPending: Boolean = false private var animationPending: Boolean = false
@@ -582,12 +584,8 @@ constructor(
val viewHost = createUniqueObjectHost() val viewHost = createUniqueObjectHost()
mediaObject.hostView = viewHost mediaObject.hostView = viewHost
mediaObject.addVisibilityChangeListener { mediaObject.addVisibilityChangeListener {
// If QQS changes visibility, we need to force an update to ensure the transition
// goes into the correct state
val stateUpdate = mediaObject.location == LOCATION_QQS
// Never animate because of a visibility change, only state changes should do that // Never animate because of a visibility change, only state changes should do that
updateDesiredLocation(forceNoAnimation = true, forceStateUpdate = stateUpdate) updateDesiredLocation(forceNoAnimation = true)
} }
mediaHosts[mediaObject.location] = mediaObject mediaHosts[mediaObject.location] = mediaObject
if (mediaObject.location == desiredLocation) { if (mediaObject.location == desiredLocation) {
@@ -908,7 +906,7 @@ constructor(
fun isCurrentlyInGuidedTransformation(): Boolean { fun isCurrentlyInGuidedTransformation(): Boolean {
return hasValidStartAndEndLocations() && return hasValidStartAndEndLocations() &&
getTransformationProgress() >= 0 && getTransformationProgress() >= 0 &&
areGuidedTransitionHostsVisible() (areGuidedTransitionHostsVisible() || !hasActiveMediaOrRecommendation)
} }
private fun hasValidStartAndEndLocations(): Boolean { private fun hasValidStartAndEndLocations(): Boolean {
@@ -965,7 +963,7 @@ constructor(
private fun getQSTransformationProgress(): Float { private fun getQSTransformationProgress(): Float {
val currentHost = getHost(desiredLocation) val currentHost = getHost(desiredLocation)
val previousHost = getHost(previousLocation) val previousHost = getHost(previousLocation)
if (hasActiveMedia && (currentHost?.location == LOCATION_QS && !inSplitShade)) { if (currentHost?.location == LOCATION_QS && !inSplitShade) {
if (previousHost?.location == LOCATION_QQS) { if (previousHost?.location == LOCATION_QQS) {
if (previousHost.visible || statusbarState != StatusBarState.KEYGUARD) { if (previousHost.visible || statusbarState != StatusBarState.KEYGUARD) {
return qsExpansion return qsExpansion
@@ -1028,7 +1026,8 @@ constructor(
private fun updateHostAttachment() = private fun updateHostAttachment() =
traceSection("MediaHierarchyManager#updateHostAttachment") { traceSection("MediaHierarchyManager#updateHostAttachment") {
var newLocation = resolveLocationForFading() var newLocation = resolveLocationForFading()
var canUseOverlay = !isCurrentlyFading() // Don't use the overlay when fading or when we don't have active media
var canUseOverlay = !isCurrentlyFading() && hasActiveMediaOrRecommendation
if (isCrossFadeAnimatorRunning) { if (isCrossFadeAnimatorRunning) {
if ( if (
getHost(newLocation)?.visible == true && getHost(newLocation)?.visible == true &&
@@ -1122,7 +1121,6 @@ constructor(
dreamOverlayActive && dreamMediaComplicationActive -> LOCATION_DREAM_OVERLAY dreamOverlayActive && dreamMediaComplicationActive -> LOCATION_DREAM_OVERLAY
(qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS (qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS
qsExpansion > 0.4f && onLockscreen -> LOCATION_QS qsExpansion > 0.4f && onLockscreen -> LOCATION_QS
!hasActiveMedia -> LOCATION_QS
onLockscreen && isSplitShadeExpanding() -> LOCATION_QS onLockscreen && isSplitShadeExpanding() -> LOCATION_QS
onLockscreen && isTransformingToFullShadeAndInQQS() -> LOCATION_QQS onLockscreen && isTransformingToFullShadeAndInQQS() -> LOCATION_QQS
onLockscreen && allowMediaPlayerOnLockScreen -> LOCATION_LOCKSCREEN onLockscreen && allowMediaPlayerOnLockScreen -> LOCATION_LOCKSCREEN

View File

@@ -68,6 +68,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
import com.android.systemui.util.LifecycleFragment; import com.android.systemui.util.LifecycleFragment;
import com.android.systemui.util.Utils;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Arrays; import java.util.Arrays;
@@ -683,7 +684,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
} else { } else {
mQsMediaHost.setSquishFraction(mSquishinessFraction); mQsMediaHost.setSquishFraction(mSquishinessFraction);
} }
updateMediaPositions();
} }
private void setAlphaAnimationProgress(float progress) { private void setAlphaAnimationProgress(float progress) {
@@ -758,6 +759,22 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
- mQSPanelController.getPaddingBottom()); - mQSPanelController.getPaddingBottom());
} }
private void updateMediaPositions() {
if (Utils.useQsMediaPlayer(getContext())) {
View hostView = mQsMediaHost.getHostView();
// Make sure the media appears a bit from the top to make it look nicer
if (mLastQSExpansion > 0 && !isKeyguardState() && !mQqsMediaHost.getVisible()
&& !mQSPanelController.shouldUseHorizontalLayout() && !mInSplitShade) {
float interpolation = 1.0f - mLastQSExpansion;
interpolation = Interpolators.ACCELERATE.getInterpolation(interpolation);
float translationY = -hostView.getHeight() * 1.3f * interpolation;
hostView.setTranslationY(translationY);
} else {
hostView.setTranslationY(0);
}
}
}
private boolean headerWillBeAnimating() { private boolean headerWillBeAnimating() {
return mStatusBarState == KEYGUARD && mShowCollapsedOnKeyguard && !isKeyguardState(); return mStatusBarState == KEYGUARD && mShowCollapsedOnKeyguard && !isKeyguardState();
} }

View File

@@ -372,18 +372,18 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
if (mUsingHorizontalLayout) { if (mUsingHorizontalLayout) {
// Only height remaining // Only height remaining
parameters.getDisappearSize().set(0.0f, 0.4f); parameters.getDisappearSize().set(0.0f, 0.4f);
// Disappearing on the right side on the bottom // Disappearing on the right side on the top
parameters.getGonePivot().set(1.0f, 1.0f); parameters.getGonePivot().set(1.0f, 0.0f);
// translating a bit horizontal // translating a bit horizontal
parameters.getContentTranslationFraction().set(0.25f, 1.0f); parameters.getContentTranslationFraction().set(0.25f, 1.0f);
parameters.setDisappearEnd(0.6f); parameters.setDisappearEnd(0.6f);
} else { } else {
// Only width remaining // Only width remaining
parameters.getDisappearSize().set(1.0f, 0.0f); parameters.getDisappearSize().set(1.0f, 0.0f);
// Disappearing on the bottom // Disappearing on the top
parameters.getGonePivot().set(0.0f, 1.0f); parameters.getGonePivot().set(0.0f, 0.0f);
// translating a bit vertical // translating a bit vertical
parameters.getContentTranslationFraction().set(0.0f, 1.05f); parameters.getContentTranslationFraction().set(0.0f, 1f);
parameters.setDisappearEnd(0.95f); parameters.setDisappearEnd(0.95f);
} }
parameters.setFadeStartPosition(0.95f); parameters.setFadeStartPosition(0.95f);

View File

@@ -29,6 +29,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq
import com.android.systemui.dreams.DreamOverlayStateController import com.android.systemui.dreams.DreamOverlayStateController
import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.media.controls.pipeline.MediaDataManager
import com.android.systemui.media.dream.MediaDreamComplication import com.android.systemui.media.dream.MediaDreamComplication
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionStateManager import com.android.systemui.shade.ShadeExpansionStateManager
@@ -76,6 +77,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
@Mock private lateinit var mediaCarouselScrollHandler: MediaCarouselScrollHandler @Mock private lateinit var mediaCarouselScrollHandler: MediaCarouselScrollHandler
@Mock private lateinit var wakefulnessLifecycle: WakefulnessLifecycle @Mock private lateinit var wakefulnessLifecycle: WakefulnessLifecycle
@Mock private lateinit var keyguardViewController: KeyguardViewController @Mock private lateinit var keyguardViewController: KeyguardViewController
@Mock private lateinit var mediaDataManager: MediaDataManager
@Mock private lateinit var uniqueObjectHostView: UniqueObjectHostView @Mock private lateinit var uniqueObjectHostView: UniqueObjectHostView
@Mock private lateinit var dreamOverlayStateController: DreamOverlayStateController @Mock private lateinit var dreamOverlayStateController: DreamOverlayStateController
@Captor @Captor
@@ -110,6 +112,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
keyguardStateController, keyguardStateController,
bypassController, bypassController,
mediaCarouselController, mediaCarouselController,
mediaDataManager,
keyguardViewController, keyguardViewController,
dreamOverlayStateController, dreamOverlayStateController,
configurationController, configurationController,
@@ -125,6 +128,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
setupHost(qsHost, MediaHierarchyManager.LOCATION_QS, QS_TOP) setupHost(qsHost, MediaHierarchyManager.LOCATION_QS, QS_TOP)
setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS, QQS_TOP) setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS, QQS_TOP)
whenever(statusBarStateController.state).thenReturn(StatusBarState.SHADE) whenever(statusBarStateController.state).thenReturn(StatusBarState.SHADE)
whenever(mediaDataManager.hasActiveMedia()).thenReturn(true)
whenever(mediaCarouselController.mediaCarouselScrollHandler) whenever(mediaCarouselController.mediaCarouselScrollHandler)
.thenReturn(mediaCarouselScrollHandler) .thenReturn(mediaCarouselScrollHandler)
val observer = wakefullnessObserver.value val observer = wakefullnessObserver.value
@@ -357,16 +361,30 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
} }
@Test @Test
fun isCurrentlyInGuidedTransformation_hostNotVisible_returnsTrue() { fun isCurrentlyInGuidedTransformation_hostNotVisible_returnsFalse_with_active() {
goToLockscreen() goToLockscreen()
enterGuidedTransformation() enterGuidedTransformation()
whenever(lockHost.visible).thenReturn(false) whenever(lockHost.visible).thenReturn(false)
whenever(qsHost.visible).thenReturn(true) whenever(qsHost.visible).thenReturn(true)
whenever(qqsHost.visible).thenReturn(true) whenever(qqsHost.visible).thenReturn(true)
whenever(mediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true)
assertThat(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).isFalse() assertThat(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).isFalse()
} }
@Test
fun isCurrentlyInGuidedTransformation_hostNotVisible_returnsTrue_without_active() {
// To keep the appearing behavior, we need to be in a guided transition
goToLockscreen()
enterGuidedTransformation()
whenever(lockHost.visible).thenReturn(false)
whenever(qsHost.visible).thenReturn(true)
whenever(qqsHost.visible).thenReturn(true)
whenever(mediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(false)
assertThat(mediaHierarchyManager.isCurrentlyInGuidedTransformation()).isTrue()
}
@Test @Test
fun testDream() { fun testDream() {
goToDream() goToDream()