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

Commit 36e1d8eb authored by Christian Göllner's avatar Christian Göllner
Browse files

Motion: tweak split shade expansion on lockscreen with media.

Changes the transformation from fade to transition.

Bug: 200806458
Bug: 218833796
Bug: 218833458
Test: Manually + Unit tests
Change-Id: I762c9888bcb8fc62358b6c4ab8a70a4ece464e43
parent 7f7b20e0
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -42,4 +42,8 @@
         the shade (in alpha) -->
         the shade (in alpha) -->
    <dimen name="lockscreen_shade_scrim_transition_distance">200dp</dimen>
    <dimen name="lockscreen_shade_scrim_transition_distance">200dp</dimen>


    <!-- Distance that the full shade transition takes in order for media to fully transition to
     the shade -->
    <dimen name="lockscreen_shade_media_transition_distance">200dp</dimen>

</resources>
</resources>
+16 −0
Original line number Original line Diff line number Diff line
@@ -795,6 +795,9 @@ class MediaHierarchyManager @Inject constructor(
    @TransformationType
    @TransformationType
    fun calculateTransformationType(): Int {
    fun calculateTransformationType(): Int {
        if (isTransitioningToFullShade) {
        if (isTransitioningToFullShade) {
            if (inSplitShade) {
                return TRANSFORMATION_TYPE_TRANSITION
            }
            return TRANSFORMATION_TYPE_FADE
            return TRANSFORMATION_TYPE_FADE
        }
        }
        if (previousLocation == LOCATION_LOCKSCREEN && desiredLocation == LOCATION_QS ||
        if (previousLocation == LOCATION_LOCKSCREEN && desiredLocation == LOCATION_QS ||
@@ -961,6 +964,7 @@ class MediaHierarchyManager @Inject constructor(
            (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
            !hasActiveMedia -> LOCATION_QS
            onLockscreen && isSplitShadeExpanding() -> LOCATION_QS
            onLockscreen && isTransformingToFullShadeAndInQQS() -> LOCATION_QQS
            onLockscreen && isTransformingToFullShadeAndInQQS() -> LOCATION_QQS
            onLockscreen && allowedOnLockscreen -> LOCATION_LOCKSCREEN
            onLockscreen && allowedOnLockscreen -> LOCATION_LOCKSCREEN
            else -> LOCATION_QQS
            else -> LOCATION_QQS
@@ -986,6 +990,10 @@ class MediaHierarchyManager @Inject constructor(
        return location
        return location
    }
    }


    private fun isSplitShadeExpanding(): Boolean {
        return inSplitShade && isTransitioningToFullShade
    }

    /**
    /**
     * Are we currently transforming to the full shade and already in QQS
     * Are we currently transforming to the full shade and already in QQS
     */
     */
@@ -993,6 +1001,10 @@ class MediaHierarchyManager @Inject constructor(
        if (!isTransitioningToFullShade) {
        if (!isTransitioningToFullShade) {
            return false
            return false
        }
        }
        if (inSplitShade) {
            // Split shade doesn't use QQS.
            return false
        }
        return fullShadeTransitionProgress > 0.5f
        return fullShadeTransitionProgress > 0.5f
    }
    }


@@ -1000,6 +1012,10 @@ class MediaHierarchyManager @Inject constructor(
     * Is the current transformationType fading
     * Is the current transformationType fading
     */
     */
    private fun isCurrentlyFading(): Boolean {
    private fun isCurrentlyFading(): Boolean {
        if (isSplitShadeExpanding()) {
            // Split shade always uses transition instead of fade.
            return false
        }
        if (isTransitioningToFullShade) {
        if (isTransitioningToFullShade) {
            return true
            return true
        }
        }
+3 −1
Original line number Original line Diff line number Diff line
@@ -513,7 +513,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
        mContainer.setExpansion(expansion);
        mContainer.setExpansion(expansion);
        final float translationScaleY = (mInSplitShade
        final float translationScaleY = (mInSplitShade
                ? 1 : QSAnimator.SHORT_PARALLAX_AMOUNT) * (expansion - 1);
                ? 1 : QSAnimator.SHORT_PARALLAX_AMOUNT) * (expansion - 1);
        boolean onKeyguardAndExpanded = isKeyguardState() && !mShowCollapsedOnKeyguard;
        boolean onKeyguard = isKeyguardState();
        boolean onKeyguardAndExpanded = onKeyguard && !mShowCollapsedOnKeyguard;
        if (!mHeaderAnimating && !headerWillBeAnimating()) {
        if (!mHeaderAnimating && !headerWillBeAnimating()) {
            getView().setTranslationY(
            getView().setTranslationY(
                    onKeyguardAndExpanded
                    onKeyguardAndExpanded
@@ -547,6 +548,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
                mHeader.updateResources();
                mHeader.updateResources();
            }
            }
        }
        }
        mQSPanelController.setIsOnKeyguard(onKeyguard);
        mFooter.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mFooter.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mQSFooterActionController.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mQSFooterActionController.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mQSPanelController.setRevealExpansion(expansion);
        mQSPanelController.setRevealExpansion(expansion);
+24 −2
Original line number Original line Diff line number Diff line
@@ -110,6 +110,8 @@ public class QSPanel extends LinearLayout implements Tunable {
    private final ArrayMap<View, Integer> mChildrenLayoutTop = new ArrayMap<>();
    private final ArrayMap<View, Integer> mChildrenLayoutTop = new ArrayMap<>();
    private final Rect mClippingRect = new Rect();
    private final Rect mClippingRect = new Rect();
    private boolean mUseNewFooter = false;
    private boolean mUseNewFooter = false;
    private ViewGroup mMediaHostView;
    private boolean mShouldMoveMediaOnExpansion = true;


    public QSPanel(Context context, AttributeSet attrs) {
    public QSPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        super(context, attrs);
@@ -289,9 +291,15 @@ public class QSPanel extends LinearLayout implements Tunable {
        for (int i = 0; i < getChildCount(); i++) {
        for (int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            View child = getChildAt(i);
            if (move) {
            if (move) {
                int topOffset;
                if (child == mMediaHostView && !mShouldMoveMediaOnExpansion) {
                    topOffset = 0;
                } else {
                    topOffset = tileHeightOffset;
                }
                int top = Objects.requireNonNull(mChildrenLayoutTop.get(child));
                int top = Objects.requireNonNull(mChildrenLayoutTop.get(child));
                child.setLeftTopRightBottom(child.getLeft(), top + tileHeightOffset,
                child.setLeftTopRightBottom(child.getLeft(), top + topOffset,
                        child.getRight(), top + tileHeightOffset + child.getHeight());
                        child.getRight(), top + topOffset + child.getHeight());
            }
            }
            if (child == mTileLayout) {
            if (child == mTileLayout) {
                move = true;
                move = true;
@@ -463,6 +471,7 @@ public class QSPanel extends LinearLayout implements Tunable {
        if (!mUsingMediaPlayer) {
        if (!mUsingMediaPlayer) {
            return;
            return;
        }
        }
        mMediaHostView = hostView;
        ViewGroup newParent = horizontal ? mHorizontalLinearLayout : this;
        ViewGroup newParent = horizontal ? mHorizontalLinearLayout : this;
        ViewGroup currentParent = (ViewGroup) hostView.getParent();
        ViewGroup currentParent = (ViewGroup) hostView.getParent();
        if (currentParent != newParent) {
        if (currentParent != newParent) {
@@ -656,6 +665,19 @@ public class QSPanel extends LinearLayout implements Tunable {
        updatePadding();
        updatePadding();
    }
    }


    /**
     * Sets whether the media container should move during the expansion of the QS Panel.
     *
     * As the QS Panel expands and the QS unsquish, the views below the QS tiles move to adapt to
     * the new height of the QS tiles.
     *
     * In some cases this might not be wanted for media. One example is when there is a transition
     * animation of the media container happening on split shade lock screen.
     */
    public void setShouldMoveMediaOnExpansion(boolean shouldMoveMediaOnExpansion) {
        mShouldMoveMediaOnExpansion = shouldMoveMediaOnExpansion;
    }

    private class H extends Handler {
    private class H extends Handler {
        private static final int ANNOUNCE_FOR_ACCESSIBILITY = 1;
        private static final int ANNOUNCE_FOR_ACCESSIBILITY = 1;


+10 −0
Original line number Original line Diff line number Diff line
@@ -419,6 +419,16 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
        return mView.getBrightnessView();
        return mView.getBrightnessView();
    }
    }


    /** Sets whether we are currently on lock screen. */
    public void setIsOnKeyguard(boolean isOnKeyguard) {
        boolean isOnSplitShadeLockscreen = mShouldUseSplitNotificationShade && isOnKeyguard;
        // When the split shade is expanding on lockscreen, the media container transitions from the
        // lockscreen to QS.
        // We have to prevent the media container position from moving during the transition to have
        // a smooth translation animation without stuttering.
        mView.setShouldMoveMediaOnExpansion(!isOnSplitShadeLockscreen);
    }

    /** */
    /** */
    public static final class TileRecord {
    public static final class TileRecord {
        public TileRecord(QSTile tile, com.android.systemui.plugins.qs.QSTileView tileView) {
        public TileRecord(QSTile tile, com.android.systemui.plugins.qs.QSTileView tileView) {
Loading