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

Commit 529bfe6f authored by felkachang's avatar felkachang
Browse files

Fix EditText show wrong position when ime show

In landscape and largest density, the area that could show the heads
up notification is smaller than normal density. To handle the heads
up notification should be different with the normal notification in
both of targetScrollForView and getScrollRange because
StackScrollAlgorithm translation heads up notification as
mHeadsUpInset but neither targetScrollForView nor getScrollRange has
have the same consideration.

The solution make the StackScrollAlgorithm to considerate scroll
value to move up the heads up notification.

The getScrollRange need to consider more about the difference
between heads up showing and non-heads up showing. The top padding
and the total content height are the major considerations.

Test: manual test
Test: atest SystemUITests
Change-Id: I46bb960a81f6ab5be4d8e39738e8fb64245dd4eb
Fixes: 110388615
parent 690c13b5
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -1425,7 +1425,8 @@ public class NotificationStackScrollLayout extends ViewGroup
     */
    private int targetScrollForView(ExpandableView v, int positionInLinearLayout) {
        return positionInLinearLayout + v.getIntrinsicHeight() +
                getImeInset() - getHeight() + getTopPadding();
                getImeInset() - getHeight()
                + ((!isExpanded() && isPinnedHeadsUp(v)) ? mHeadsUpInset : getTopPadding());
    }

    @Override
@@ -2056,9 +2057,15 @@ public class NotificationStackScrollLayout extends ViewGroup
    }

    private int getScrollRange() {
        int scrollRange = Math.max(0, mContentHeight - mMaxLayoutHeight);
        // In current design, it only use the top HUN to treat all of HUNs
        // although there are more than one HUNs
        int contentHeight = mContentHeight;
        if (!isExpanded() && mHeadsUpManager.hasPinnedHeadsUp()) {
            contentHeight = mHeadsUpInset + getTopHeadsUpPinnedHeight();
        }
        int scrollRange = Math.max(0, contentHeight - mMaxLayoutHeight);
        int imeInset = getImeInset();
        scrollRange += Math.min(imeInset, Math.max(0, mContentHeight - (getHeight() - imeInset)));
        scrollRange += Math.min(imeInset, Math.max(0, contentHeight - (getHeight() - imeInset)));
        return scrollRange;
    }

+9 −0
Original line number Diff line number Diff line
@@ -473,6 +473,15 @@ public class StackScrollAlgorithm {
                    childState.yTranslation = topState.yTranslation + topState.height
                            - childState.height;
                }

                // heads up notification show and this row is the top entry of heads up
                // notifications. i.e. this row should be the only one row that has input field
                // To check if the row need to do translation according to scroll Y
                // heads up show full of row's content and any scroll y indicate that the
                // translationY need to move up the HUN.
                if (!mIsExpanded && isTopEntry && ambientState.getScrollY() > 0) {
                    childState.yTranslation -= ambientState.getScrollY();
                }
            }
            if (row.isHeadsUpAnimatingAway()) {
                childState.hidden = false;