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

* commit '36a7f2a9adfa21ec31f00d496fef82e68931c860':
  Fix determining find on page overlap
This commit is contained in:
John Reck
2011-11-09 17:30:39 +00:00
committed by Android Git Automerger
2 changed files with 29 additions and 5 deletions

View File

@@ -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;
}
}

View File

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