Loading core/java/android/webkit/FindActionModeCallback.java +11 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } } core/java/android/webkit/WebView.java +18 −1 Original line number Diff line number Diff line Loading @@ -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; } /* Loading Loading @@ -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); Loading Loading @@ -3492,6 +3507,7 @@ public class WebView extends AbsoluteLayout */ void notifyFindDialogDismissed() { mFindCallback = null; mCachedOverlappingActionModeHeight = -1; if (mWebViewCore == null) { return; } Loading Loading @@ -4341,6 +4357,7 @@ public class WebView extends AbsoluteLayout @Override protected void onConfigurationChanged(Configuration newConfig) { mCachedOverlappingActionModeHeight = -1; if (mSelectingText && mOrientation != newConfig.orientation) { selectionDone(); } Loading Loading
core/java/android/webkit/FindActionModeCallback.java +11 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } }
core/java/android/webkit/WebView.java +18 −1 Original line number Diff line number Diff line Loading @@ -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; } /* Loading Loading @@ -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); Loading Loading @@ -3492,6 +3507,7 @@ public class WebView extends AbsoluteLayout */ void notifyFindDialogDismissed() { mFindCallback = null; mCachedOverlappingActionModeHeight = -1; if (mWebViewCore == null) { return; } Loading Loading @@ -4341,6 +4357,7 @@ public class WebView extends AbsoluteLayout @Override protected void onConfigurationChanged(Configuration newConfig) { mCachedOverlappingActionModeHeight = -1; if (mSelectingText && mOrientation != newConfig.orientation) { selectionDone(); } Loading