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();
}