diff options
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwContents.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 340e18cc61..03a87ed03c 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -236,6 +236,11 @@ public class AwContents { // through the resourcethrottle. This is only used for popup windows. private boolean mDeferredShouldOverrideUrlLoadingIsPendingForPopup; + // The framework may temporarily detach our container view, for example during layout if + // we are a child of a ListView. This may cause many toggles of View focus, which we suppress + // when in this state. + private boolean mTemporarilyDetached; + private static final class DestroyRunnable implements Runnable { private final long mNativeAwContents; private DestroyRunnable(long nativeAwContents) { @@ -1534,6 +1539,7 @@ public class AwContents { * @see android.view.View#onAttachedToWindow() */ public void onAttachedToWindow() { + mTemporarilyDetached = false; mAwViewMethods.onAttachedToWindow(); } @@ -1556,7 +1562,23 @@ public class AwContents { * @see android.view.View#onFocusChanged() */ public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { - mAwViewMethods.onFocusChanged(focused, direction, previouslyFocusedRect); + if (!mTemporarilyDetached) { + mAwViewMethods.onFocusChanged(focused, direction, previouslyFocusedRect); + } + } + + /** + * @see android.view.View#onStartTemporaryDetach() + */ + public void onStartTemporaryDetach() { + mTemporarilyDetached = true; + } + + /** + * @see android.view.View#onFinishTemporaryDetach() + */ + public void onFinishTemporaryDetach() { + mTemporarilyDetached = false; } /** |