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

Commit 3d013165 authored by Selim Cinek's avatar Selim Cinek Committed by Android (Google) Code Review
Browse files

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

parents 2bf1f425 db9ee26a
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dreams.DreamOverlayStateController
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.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeStateEvents
@@ -93,6 +94,7 @@ constructor(
    private val keyguardStateController: KeyguardStateController,
    private val bypassController: KeyguardBypassController,
    private val mediaCarouselController: MediaCarouselController,
    private val mediaManager: MediaDataManager,
    private val keyguardViewController: KeyguardViewController,
    private val dreamOverlayStateController: DreamOverlayStateController,
    configurationController: ConfigurationController,
@@ -224,9 +226,9 @@ constructor(

    private var inSplitShade = false

    /** Is there any active media in the carousel? */
    private var hasActiveMedia: Boolean = false
        get() = mediaHosts.get(LOCATION_QQS)?.visible == true
    /** Is there any active media or recommendation in the carousel? */
    private var hasActiveMediaOrRecommendation: Boolean = false
        get() = mediaManager.hasActiveMediaOrRecommendation()

    /** Are we currently waiting on an animation to start? */
    private var animationPending: Boolean = false
@@ -582,12 +584,8 @@ constructor(
        val viewHost = createUniqueObjectHost()
        mediaObject.hostView = viewHost
        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
            updateDesiredLocation(forceNoAnimation = true, forceStateUpdate = stateUpdate)
            updateDesiredLocation(forceNoAnimation = true)
        }
        mediaHosts[mediaObject.location] = mediaObject
        if (mediaObject.location == desiredLocation) {
@@ -908,7 +906,7 @@ constructor(
    fun isCurrentlyInGuidedTransformation(): Boolean {
        return hasValidStartAndEndLocations() &&
            getTransformationProgress() >= 0 &&
            areGuidedTransitionHostsVisible()
            (areGuidedTransitionHostsVisible() || !hasActiveMediaOrRecommendation)
    }

    private fun hasValidStartAndEndLocations(): Boolean {
@@ -965,7 +963,7 @@ constructor(
    private fun getQSTransformationProgress(): Float {
        val currentHost = getHost(desiredLocation)
        val previousHost = getHost(previousLocation)
        if (hasActiveMedia && (currentHost?.location == LOCATION_QS && !inSplitShade)) {
        if (currentHost?.location == LOCATION_QS && !inSplitShade) {
            if (previousHost?.location == LOCATION_QQS) {
                if (previousHost.visible || statusbarState != StatusBarState.KEYGUARD) {
                    return qsExpansion
@@ -1028,7 +1026,8 @@ constructor(
    private fun updateHostAttachment() =
        traceSection("MediaHierarchyManager#updateHostAttachment") {
            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 (
                    getHost(newLocation)?.visible == true &&
@@ -1122,7 +1121,6 @@ constructor(
                dreamOverlayActive && dreamMediaComplicationActive -> LOCATION_DREAM_OVERLAY
                (qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS
                qsExpansion > 0.4f && onLockscreen -> LOCATION_QS
                !hasActiveMedia -> LOCATION_QS
                onLockscreen && isSplitShadeExpanding() -> LOCATION_QS
                onLockscreen && isTransformingToFullShadeAndInQQS() -> LOCATION_QQS
                onLockscreen && allowMediaPlayerOnLockScreen -> LOCATION_LOCKSCREEN
+18 −1
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
import com.android.systemui.util.LifecycleFragment;
import com.android.systemui.util.Utils;

import java.io.PrintWriter;
import java.util.Arrays;
@@ -683,7 +684,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
        } else {
            mQsMediaHost.setSquishFraction(mSquishinessFraction);
        }

        updateMediaPositions();
    }

    private void setAlphaAnimationProgress(float progress) {
@@ -758,6 +759,22 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
                        - 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() {
        return mStatusBarState == KEYGUARD && mShowCollapsedOnKeyguard && !isKeyguardState();
    }
+5 −5
Original line number Diff line number Diff line
@@ -372,18 +372,18 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
        if (mUsingHorizontalLayout) {
            // Only height remaining
            parameters.getDisappearSize().set(0.0f, 0.4f);
            // Disappearing on the right side on the bottom
            parameters.getGonePivot().set(1.0f, 1.0f);
            // Disappearing on the right side on the top
            parameters.getGonePivot().set(1.0f, 0.0f);
            // translating a bit horizontal
            parameters.getContentTranslationFraction().set(0.25f, 1.0f);
            parameters.setDisappearEnd(0.6f);
        } else {
            // Only width remaining
            parameters.getDisappearSize().set(1.0f, 0.0f);
            // Disappearing on the bottom
            parameters.getGonePivot().set(0.0f, 1.0f);
            // Disappearing on the top
            parameters.getGonePivot().set(0.0f, 0.0f);
            // translating a bit vertical
            parameters.getContentTranslationFraction().set(0.0f, 1.05f);
            parameters.getContentTranslationFraction().set(0.0f, 1f);
            parameters.setDisappearEnd(0.95f);
        }
        parameters.setFadeStartPosition(0.95f);
+19 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.controller.ControlsControllerImplTest.Companion.eq
import com.android.systemui.dreams.DreamOverlayStateController
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.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionStateManager
@@ -76,6 +77,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
    @Mock private lateinit var mediaCarouselScrollHandler: MediaCarouselScrollHandler
    @Mock private lateinit var wakefulnessLifecycle: WakefulnessLifecycle
    @Mock private lateinit var keyguardViewController: KeyguardViewController
    @Mock private lateinit var mediaDataManager: MediaDataManager
    @Mock private lateinit var uniqueObjectHostView: UniqueObjectHostView
    @Mock private lateinit var dreamOverlayStateController: DreamOverlayStateController
    @Captor
@@ -110,6 +112,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
                keyguardStateController,
                bypassController,
                mediaCarouselController,
                mediaDataManager,
                keyguardViewController,
                dreamOverlayStateController,
                configurationController,
@@ -125,6 +128,7 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
        setupHost(qsHost, MediaHierarchyManager.LOCATION_QS, QS_TOP)
        setupHost(qqsHost, MediaHierarchyManager.LOCATION_QQS, QQS_TOP)
        whenever(statusBarStateController.state).thenReturn(StatusBarState.SHADE)
        whenever(mediaDataManager.hasActiveMedia()).thenReturn(true)
        whenever(mediaCarouselController.mediaCarouselScrollHandler)
            .thenReturn(mediaCarouselScrollHandler)
        val observer = wakefullnessObserver.value
@@ -357,16 +361,30 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
    }

    @Test
    fun isCurrentlyInGuidedTransformation_hostNotVisible_returnsTrue() {
    fun isCurrentlyInGuidedTransformation_hostNotVisible_returnsFalse_with_active() {
        goToLockscreen()
        enterGuidedTransformation()
        whenever(lockHost.visible).thenReturn(false)
        whenever(qsHost.visible).thenReturn(true)
        whenever(qqsHost.visible).thenReturn(true)
        whenever(mediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true)

        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
    fun testDream() {
        goToDream()