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

Commit fcb74a62 authored by Yining Liu's avatar Yining Liu
Browse files

Remove obsolete shadow logic from StackScrollAlgorithm updateChildZValue

Removed childrenOnTop. When you send a bunch of delayed HUNs, the newest HUN pushes the previously pinned HUN downwards, so there's always a max of one pinned HUN. Thus childrenOnTop is no longer needed.

Bug: 259278944
Test: StackScrollAlgorithmTest
Change-Id: I47446170c3199769e78521f80ed3982e2e8554a4
parent aa031de7
Loading
Loading
Loading
Loading
+16 −28
Original line number Diff line number Diff line
@@ -871,8 +871,7 @@ public class StackScrollAlgorithm {
        }

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

@@ -882,12 +881,8 @@ public class StackScrollAlgorithm {
     *
     * @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
     * @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 float updateChildZValue(int i, float childrenOnTop,
    protected void updateChildZValue(int i,
                                     StackScrollAlgorithmState algorithmState,
                                     AmbientState ambientState,
                                     boolean isTopHun) {
@@ -904,22 +899,16 @@ public class StackScrollAlgorithm {
            // 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.
            // When scrolling down shade to make HUN back to in-position in Notification Panel,
            // 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 {
            // the overlapFraction goes to 0, and the pinned HUN's shadows hides gradually.
            float overlap = ambientState.getTopPadding()
                    + ambientState.getStackTranslation() - childViewState.getYTranslation();
                // To prevent over-shadow during HUN entry
                childrenOnTop += Math.min(
                        1.0f,
                        overlap / childViewState.height
                );
                MathUtils.saturate(childrenOnTop);
            }

            if (childViewState.height > 0) { // To avoid 0/0 problems
                // To prevent over-shadow
                float overlapFraction = MathUtils.saturate(overlap / childViewState.height);
                childViewState.setZTranslation(baseZ
                    + childrenOnTop * mPinnedZTranslationExtra);
                        + overlapFraction * mPinnedZTranslationExtra);
            }
        } else if (isTopHun) {
            // 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
@@ -947,15 +936,14 @@ public class StackScrollAlgorithm {
        }

        // Handles HUN shadow when shade is closed.
        // While HUN is showing and Shade is closed: headerVisibleAmount stays 0, shadow stays.
        // While shade is closed, and during HUN's entry: 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
        // gradually from 0 to 1, shadow hides gradually.
        // 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.

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

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


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