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

Commit ee02d76c authored by Yining Liu's avatar Yining Liu Committed by Automerger Merge Worker
Browse files

Merge "Revert "Remove obsolete shadow logic from StackScrollAlgorithm...

Merge "Revert "Remove obsolete shadow logic from StackScrollAlgorithm updateChildZValue"" into tm-qpr-dev am: 83e97973

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21407165



Change-Id: I70bc474b13d2c2c49865b9b0683a4ddb5ac707ff
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 29a62609 83e97973
Loading
Loading
Loading
Loading
+28 −16
Original line number Original line Diff line number Diff line
@@ -870,7 +870,8 @@ public class StackScrollAlgorithm {
        }
        }


        for (int i = childCount - 1; i >= 0; i--) {
        for (int i = childCount - 1; i >= 0; i--) {
            updateChildZValue(i, algorithmState, ambientState, i == topHunIndex);
            childrenOnTop = updateChildZValue(i, childrenOnTop,
                    algorithmState, ambientState, i == topHunIndex);
        }
        }
    }
    }


@@ -880,8 +881,12 @@ public class StackScrollAlgorithm {
     *
     *
     * @param isTopHun      Whether the child is a top HUN. A top HUN means a HUN that shows on the
     * @param isTopHun      Whether the child is a top HUN. A top HUN means a HUN that shows on the
     *                      vertically top of screen. Top HUNs should have drop shadows
     *                      vertically top of screen. Top HUNs should have drop shadows
     * @param childrenOnTop It is greater than 0 when there's an existing HUN that is elevated
     * @return childrenOnTop The decimal part represents the fraction of the elevated HUN's height
     *                      that overlaps with QQS Panel. The integer part represents the count of
     *                      previous HUNs whose Z positions are greater than 0.
     */
     */
    protected void updateChildZValue(int i,
    protected float updateChildZValue(int i, float childrenOnTop,
                                      StackScrollAlgorithmState algorithmState,
                                      StackScrollAlgorithmState algorithmState,
                                      AmbientState ambientState,
                                      AmbientState ambientState,
                                      boolean isTopHun) {
                                      boolean isTopHun) {
@@ -898,16 +903,22 @@ public class StackScrollAlgorithm {
            // Handles HUN shadow when Shade is opened, and AmbientState.mScrollY > 0
            // Handles HUN shadow when Shade is opened, and AmbientState.mScrollY > 0
            // Calculate the HUN's z-value based on its overlapping fraction with QQS Panel.
            // Calculate the HUN's z-value based on its overlapping fraction with QQS Panel.
            // When scrolling down shade to make HUN back to in-position in Notification Panel,
            // When scrolling down shade to make HUN back to in-position in Notification Panel,
            // the overlapFraction goes to 0, and the pinned HUN's shadows hides gradually.
            // The over-lapping fraction goes to 0, and shadows hides gradually.
            if (childrenOnTop != 0.0f) {
                // To elevate the later HUN over previous HUN
                childrenOnTop++;
            } else {
                float overlap = ambientState.getTopPadding()
                float overlap = ambientState.getTopPadding()
                        + ambientState.getStackTranslation() - childViewState.getYTranslation();
                        + ambientState.getStackTranslation() - childViewState.getYTranslation();

                // To prevent over-shadow during HUN entry
            if (childViewState.height > 0) { // To avoid 0/0 problems
                childrenOnTop += Math.min(
                // To prevent over-shadow
                        1.0f,
                float overlapFraction = MathUtils.saturate(overlap / childViewState.height);
                        overlap / childViewState.height
                childViewState.setZTranslation(baseZ
                );
                        + overlapFraction * mPinnedZTranslationExtra);
                MathUtils.saturate(childrenOnTop);
            }
            }
            childViewState.setZTranslation(baseZ
                    + childrenOnTop * mPinnedZTranslationExtra);
        } else if (isTopHun) {
        } else if (isTopHun) {
            // In case this is a new view that has never been measured before, we don't want to
            // In case this is a new view that has never been measured before, we don't want to
            // elevate if we are currently expanded more than the notification
            // elevate if we are currently expanded more than the notification
@@ -935,14 +946,15 @@ public class StackScrollAlgorithm {
        }
        }


        // Handles HUN shadow when shade is closed.
        // Handles HUN shadow when shade is closed.
        // While shade is closed, and during HUN's entry: headerVisibleAmount stays 0, shadow stays.
        // While HUN is showing and Shade is closed: headerVisibleAmount stays 0, shadow stays.
        // While shade is closed, and HUN is showing: headerVisibleAmount stays 0, shadow stays.
        // During HUN-to-Shade (eg. dragging down HUN to open Shade): headerVisibleAmount goes
        // During HUN-to-Shade (eg. dragging down HUN to open Shade): headerVisibleAmount goes
        // gradually from 0 to 1, shadow hides gradually.
        // gradually from 0 to 1, shadow hides gradually.
        // Header visibility is a deprecated concept, we are using headerVisibleAmount only because
        // Header visibility is a deprecated concept, we are using headerVisibleAmount only because
        // this value nicely goes from 0 to 1 during the HUN-to-Shade process.
        // this value nicely goes from 0 to 1 during the HUN-to-Shade process.

        childViewState.setZTranslation(childViewState.getZTranslation()
        childViewState.setZTranslation(childViewState.getZTranslation()
                + (1.0f - child.getHeaderVisibleAmount()) * mPinnedZTranslationExtra);
                + (1.0f - child.getHeaderVisibleAmount()) * mPinnedZTranslationExtra);
        return childrenOnTop;
    }
    }


    public void setIsExpanded(boolean isExpanded) {
    public void setIsExpanded(boolean isExpanded) {
+12 −10
Original line number Original line Diff line number Diff line
@@ -518,7 +518,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
        val childHunView = createHunViewMock(
                isShadeOpen = true,
                isShadeOpen = true,
                fullyVisible = false,
                fullyVisible = false,
                headerVisibleAmount = 1f,
                headerVisibleAmount = 1f
        )
        )
        val algorithmState = StackScrollAlgorithm.StackScrollAlgorithmState()
        val algorithmState = StackScrollAlgorithm.StackScrollAlgorithmState()
        algorithmState.visibleChildren.add(childHunView)
        algorithmState.visibleChildren.add(childHunView)
@@ -526,6 +526,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
                /* shouldElevateHun= */ true
@@ -545,7 +546,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
        val childHunView = createHunViewMock(
                isShadeOpen = true,
                isShadeOpen = true,
                fullyVisible = false,
                fullyVisible = false,
                headerVisibleAmount = 1f,
                headerVisibleAmount = 1f
        )
        )
        // Use half of the HUN's height as overlap
        // Use half of the HUN's height as overlap
        childHunView.viewState.yTranslation = (childHunView.viewState.height + 1 shr 1).toFloat()
        childHunView.viewState.yTranslation = (childHunView.viewState.height + 1 shr 1).toFloat()
@@ -555,6 +556,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
                /* shouldElevateHun= */ true
@@ -578,7 +580,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
        val childHunView = createHunViewMock(
                isShadeOpen = true,
                isShadeOpen = true,
                fullyVisible = true,
                fullyVisible = true,
                headerVisibleAmount = 1f,
                headerVisibleAmount = 1f
        )
        )
        // HUN doesn't overlap with QQS Panel
        // HUN doesn't overlap with QQS Panel
        childHunView.viewState.yTranslation = ambientState.topPadding +
        childHunView.viewState.yTranslation = ambientState.topPadding +
@@ -589,6 +591,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
                /* shouldElevateHun= */ true
@@ -608,7 +611,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
        val childHunView = createHunViewMock(
                isShadeOpen = false,
                isShadeOpen = false,
                fullyVisible = false,
                fullyVisible = false,
                headerVisibleAmount = 0f,
                headerVisibleAmount = 0f
        )
        )
        childHunView.viewState.yTranslation = 0f
        childHunView.viewState.yTranslation = 0f
        // Shade is closed, thus childHunView's headerVisibleAmount is 0
        // Shade is closed, thus childHunView's headerVisibleAmount is 0
@@ -619,6 +622,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
                /* shouldElevateHun= */ true
@@ -638,7 +642,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        val childHunView = createHunViewMock(
        val childHunView = createHunViewMock(
                isShadeOpen = false,
                isShadeOpen = false,
                fullyVisible = false,
                fullyVisible = false,
                headerVisibleAmount = 0.5f,
                headerVisibleAmount = 0.5f
        )
        )
        childHunView.viewState.yTranslation = 0f
        childHunView.viewState.yTranslation = 0f
        // Shade is being opened, thus childHunView's headerVisibleAmount is between 0 and 1
        // Shade is being opened, thus childHunView's headerVisibleAmount is between 0 and 1
@@ -650,6 +654,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
        // When: updateChildZValue() is called for the top HUN
        // When: updateChildZValue() is called for the top HUN
        stackScrollAlgorithm.updateChildZValue(
        stackScrollAlgorithm.updateChildZValue(
                /* i= */ 0,
                /* i= */ 0,
                /* childrenOnTop= */ 0.0f,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* StackScrollAlgorithmState= */ algorithmState,
                /* ambientState= */ ambientState,
                /* ambientState= */ ambientState,
                /* shouldElevateHun= */ true
                /* shouldElevateHun= */ true
@@ -664,7 +669,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
    private fun createHunViewMock(
    private fun createHunViewMock(
            isShadeOpen: Boolean,
            isShadeOpen: Boolean,
            fullyVisible: Boolean,
            fullyVisible: Boolean,
            headerVisibleAmount: Float,
            headerVisibleAmount: Float
    ) =
    ) =
            mock<ExpandableNotificationRow>().apply {
            mock<ExpandableNotificationRow>().apply {
                val childViewStateMock = createHunChildViewState(isShadeOpen, fullyVisible)
                val childViewStateMock = createHunChildViewState(isShadeOpen, fullyVisible)
@@ -675,10 +680,7 @@ class StackScrollAlgorithmTest : SysuiTestCase() {
            }
            }




    private fun createHunChildViewState(
    private fun createHunChildViewState(isShadeOpen: Boolean, fullyVisible: Boolean) =
            isShadeOpen: Boolean,
            fullyVisible: Boolean,
    ) =
            ExpandableViewState().apply {
            ExpandableViewState().apply {
                // Mock the HUN's height with ambientState.topPadding +
                // Mock the HUN's height with ambientState.topPadding +
                // ambientState.stackTranslation
                // ambientState.stackTranslation