summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java24
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;
}
/**