am 0e17f653: am 36a7f2a9: Merge "Fix determining find on page overlap" into ics-mr1

* commit '0e17f65312e57c7f1489010284987c505142b778':
  Fix determining find on page overlap
diff --git a/core/java/android/webkit/FindActionModeCallback.java b/core/java/android/webkit/FindActionModeCallback.java
index b85fd17..fffa90b 100644
--- a/core/java/android/webkit/FindActionModeCallback.java
+++ b/core/java/android/webkit/FindActionModeCallback.java
@@ -18,6 +18,8 @@
 
 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 @@
         // 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;
     }
 
 }
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 31df889..9dfb74b 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1484,7 +1484,21 @@
     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 @@
             // 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 @@
      */
     void notifyFindDialogDismissed() {
         mFindCallback = null;
+        mCachedOverlappingActionModeHeight = -1;
         if (mWebViewCore == null) {
             return;
         }
@@ -4346,6 +4362,7 @@
 
     @Override
     protected void onConfigurationChanged(Configuration newConfig) {
+        mCachedOverlappingActionModeHeight = -1;
         if (mSelectingText && mOrientation != newConfig.orientation) {
             selectionDone();
         }