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

Commit d6ac7272 authored by John Reck's avatar John Reck
Browse files

Fix determining find on page overlap

 Bug: 5572138

Change-Id: Ie528e1cf9df363307018e01a898e8d9dfff1cd45
parent 99015a24
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.webkit;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.Rect;
import android.text.Editable;
import android.text.Selection;
import android.text.Spannable;
@@ -254,13 +256,18 @@ class FindActionModeCallback implements ActionMode.Callback, TextWatcher,
        // Does nothing.  Needed to implement TextWatcher.
    }

    public int getActionModeHeight() {
    private Rect mGlobalVisibleRect = new Rect();
    private Point mGlobalVisibleOffset = new Point();
    public int getActionModeGlobalBottom() {
        if (mActionMode == null) {
            return 0;
        }
        View parent = (View) mCustomView.getParent();
        return parent != null ? parent.getMeasuredHeight()
                : mCustomView.getMeasuredHeight();
        View view = (View) mCustomView.getParent();
        if (view == null) {
            view = mCustomView;
        }
        view.getGlobalVisibleRect(mGlobalVisibleRect, mGlobalVisibleOffset);
        return mGlobalVisibleRect.bottom;
    }

}
+18 −1
Original line number Diff line number Diff line
@@ -1484,7 +1484,21 @@ public class WebView extends AbsoluteLayout
    private int getVisibleTitleHeightImpl() {
        // need to restrict mScrollY due to over scroll
        return Math.max(getTitleHeight() - Math.max(0, mScrollY),
                mFindCallback != null ? mFindCallback.getActionModeHeight() : 0);
                getOverlappingActionModeHeight());
    }

    private int mCachedOverlappingActionModeHeight = -1;

    private int getOverlappingActionModeHeight() {
        if (mFindCallback == null) {
            return 0;
        }
        if (mCachedOverlappingActionModeHeight < 0) {
            getGlobalVisibleRect(mGlobalVisibleRect, mGlobalVisibleOffset);
            mCachedOverlappingActionModeHeight = Math.max(0,
                    mFindCallback.getActionModeGlobalBottom() - mGlobalVisibleRect.top);
        }
        return mCachedOverlappingActionModeHeight;
    }

    /*
@@ -3375,6 +3389,7 @@ public class WebView extends AbsoluteLayout
            // Could not start the action mode, so end Find on page
            return false;
        }
        mCachedOverlappingActionModeHeight = -1;
        mFindCallback = callback;
        setFindIsUp(true);
        mFindCallback.setWebView(this);
@@ -3492,6 +3507,7 @@ public class WebView extends AbsoluteLayout
     */
    void notifyFindDialogDismissed() {
        mFindCallback = null;
        mCachedOverlappingActionModeHeight = -1;
        if (mWebViewCore == null) {
            return;
        }
@@ -4341,6 +4357,7 @@ public class WebView extends AbsoluteLayout

    @Override
    protected void onConfigurationChanged(Configuration newConfig) {
        mCachedOverlappingActionModeHeight = -1;
        if (mSelectingText && mOrientation != newConfig.orientation) {
            selectionDone();
        }