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

Commit 06766900 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 26323 into eclair

* changes:
  Fix bug with ScrollView so that text entry fields are not hidden by virtual keyboard.
parents d58ccff7 7d4200d0
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -743,7 +743,7 @@ public class ScrollView extends FrameLayout {

        final int maxJump = getMaxScrollAmount();

        if (nextFocused != null && isWithinDeltaOfScreen(nextFocused, maxJump)) {
        if (nextFocused != null && isWithinDeltaOfScreen(nextFocused, maxJump, getHeight())) {
            nextFocused.getDrawingRect(mTempRect);
            offsetDescendantRectToMyCoords(nextFocused, mTempRect);
            int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect);
@@ -792,19 +792,19 @@ public class ScrollView extends FrameLayout {
     *  screen.
     */
    private boolean isOffScreen(View descendant) {
        return !isWithinDeltaOfScreen(descendant, 0);
        return !isWithinDeltaOfScreen(descendant, 0, getHeight());
    }

    /**
     * @return whether the descendant of this scroll view is within delta
     *  pixels of being on the screen.
     */
    private boolean isWithinDeltaOfScreen(View descendant, int delta) {
    private boolean isWithinDeltaOfScreen(View descendant, int delta, int height) {
        descendant.getDrawingRect(mTempRect);
        offsetDescendantRectToMyCoords(descendant, mTempRect);

        return (mTempRect.bottom + delta) >= getScrollY()
                && (mTempRect.top - delta) <= (getScrollY() + getHeight());
                && (mTempRect.top - delta) <= (getScrollY() + height);
    }

    /**
@@ -1124,9 +1124,10 @@ public class ScrollView extends FrameLayout {
        if (null == currentFocused || this == currentFocused)
            return;

        final int maxJump = mBottom - mTop;

        if (isWithinDeltaOfScreen(currentFocused, maxJump)) {
        // If the currently-focused view was visible on the screen when the
        // screen was at the old height, then scroll the screen to make that
        // view visible with the new screen height.
        if (isWithinDeltaOfScreen(currentFocused, 0, oldh)) {
            currentFocused.getDrawingRect(mTempRect);
            offsetDescendantRectToMyCoords(currentFocused, mTempRect);
            int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect);