From de023c1dddbad3812d5695d5ddf375db06a237d2 Mon Sep 17 00:00:00 2001 From: Cary Clark Date: Wed, 3 Mar 2010 10:05:16 -0500 Subject: [PATCH] refactor find state and scrolling Separate out state when find is up and is empty. Request a scroll when setting a match, rather than when drawing. Don't draw if there's no match. Companion fix in external/webkit and packages/apps/Browser http://b/2370069 --- core/java/android/webkit/WebView.java | 44 ++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 72791fb830e7..7d4ef7d1c310 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -2480,20 +2480,30 @@ public class WebView extends AbsoluteLayout */ public int findAll(String find) { if (0 == mNativeClass) return 0; // client isn't initialized - if (mFindIsUp == false) { - recordNewContentSize(mContentWidth, mContentHeight + mFindHeight, - false); - mFindIsUp = true; - } - int result = nativeFindAll(find.toLowerCase(), find.toUpperCase()); + int result = find != null ? nativeFindAll(find.toLowerCase(), + find.toUpperCase()) : 0; invalidate(); mLastFind = find; return result; } + /* + * @hide + */ + public void setFindIsUp(boolean isUp) { + mFindIsUp = isUp; + if (isUp) { + recordNewContentSize(mContentWidth, mContentHeight + mFindHeight, + false); + } + if (0 == mNativeClass) return; // client isn't initialized + nativeSetFindIsUp(isUp); + } + // Used to know whether the find dialog is open. Affects whether // or not we draw the highlights for matches. private boolean mFindIsUp; + private int mFindHeight; // Keep track of the last string sent, so we can search again after an // orientation change or the dismissal of the soft keyboard. @@ -2553,14 +2563,21 @@ public class WebView extends AbsoluteLayout * Clear the highlighting surrounding text matches created by findAll. */ public void clearMatches() { + mLastFind = ""; if (mNativeClass == 0) return; - if (mFindIsUp) { - recordNewContentSize(mContentWidth, mContentHeight - mFindHeight, - false); - mFindIsUp = false; - } - nativeSetFindIsUp(); + nativeSetFindIsEmpty(); + invalidate(); + } + + /** + * @hide + */ + public void notifyFindDialogDismissed() { + clearMatches(); + setFindIsUp(false); + recordNewContentSize(mContentWidth, mContentHeight - mFindHeight, + false); // Now that the dialog has been removed, ensure that we scroll to a // location that is not beyond the end of the page. pinScrollTo(mScrollX, mScrollY, false, 0); @@ -6863,7 +6880,8 @@ public class WebView extends AbsoluteLayout private native void nativeRecordButtons(boolean focused, boolean pressed, boolean invalidate); private native void nativeSelectBestAt(Rect rect); - private native void nativeSetFindIsUp(); + private native void nativeSetFindIsEmpty(); + private native void nativeSetFindIsUp(boolean isUp); private native void nativeSetFollowedLink(boolean followed); private native void nativeSetHeightCanMeasure(boolean measure); private native void nativeSetRootLayer(int layer); -- 2.11.0