Merge "Remove some logging from camera operations. Bug 2346606."
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 92da456..9a36798 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -84,12 +84,6 @@
     // True if the most recent drag event has caused either the TextView to
     // scroll or the web page to scroll.  Gets reset after a touch down.
     private boolean         mScrolled;
-    // Gets set to true any time the WebTextView has focus, but the navigation
-    // cache does not yet know that the focus has been changed.  This happens
-    // if the user presses "Next", if the user moves the cursor to a textfield
-    // and starts typing or clicks the trackball/center key, and when the user
-    // touches a textfield.
-    boolean                 mOkayForFocusNotToMatch;
     // Whether or not a selection change was generated from webkit.  If it was,
     // we do not need to pass the selection back to webkit.
     private boolean         mFromWebKit;
@@ -151,22 +145,6 @@
                 break;
         }
 
-        if (down) {
-            if (mOkayForFocusNotToMatch) {
-                if (mWebView.nativeFocusNodePointer() == mNodePointer) {
-                    mOkayForFocusNotToMatch = false;
-                }
-            } else if (mWebView.nativeFocusNodePointer() != mNodePointer
-                    && !isArrowKey) {
-                mWebView.nativeClearCursor();
-                // Do not call remove() here, which hides the soft keyboard.  If
-                // the soft keyboard is being displayed, the user will still want
-                // it there.
-                mWebView.removeView(this);
-                mWebView.requestFocus();
-                return mWebView.dispatchKeyEvent(event);
-            }
-        }
         Spannable text = (Spannable) getText();
         int oldLength = text.length();
         // Normally the delete key's dom events are sent via onTextChanged.
@@ -324,7 +302,6 @@
             // focus, set the focus controller back to inactive
             mWebView.setFocusControllerInactive();
             mWebView.nativeMoveCursorToNextTextInput();
-            mOkayForFocusNotToMatch = true;
             // Preemptively rebuild the WebTextView, so that the action will
             // be set properly.
             mWebView.rebuildWebTextView();
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index fb8148b..28a3404 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -493,6 +493,7 @@
     static final int DO_MOTION_UP                       = 28;
     static final int SHOW_FULLSCREEN                    = 29;
     static final int HIDE_FULLSCREEN                    = 30;
+    static final int DOM_FOCUS_CHANGED                  = 31;
 
     static final String[] HandlerDebugString = {
         "REMEMBER_PASSWORD", //              = 1;
@@ -524,7 +525,8 @@
         "REQUEST_KEYBOARD", //               = 27;
         "DO_MOTION_UP", //                   = 28;
         "SHOW_FULLSCREEN", //                = 29;
-        "HIDE_FULLSCREEN" //                 = 30;
+        "HIDE_FULLSCREEN", //                = 30;
+        "DOM_FOCUS_CHANGED" //               = 31;
     };
 
     // If the site doesn't use the viewport meta tag to specify the viewport,
@@ -1726,6 +1728,13 @@
         return result;
     }
 
+    // Called by JNI when the DOM has changed the focus.  Clear the focus so
+    // that new keys will go to the newly focused field
+    private void domChangedFocus() {
+        if (inEditingMode()) {
+            mPrivateHandler.obtainMessage(DOM_FOCUS_CHANGED).sendToTarget();
+        }
+    }
     /**
      * Request the href of an anchor element due to getFocusNodePath returning
      * "href." If hrefMsg is null, this method returns immediately and does not
@@ -3191,16 +3200,6 @@
         imm.hideSoftInputFromWindow(this.getWindowToken(), 0);
     }
 
-    /**
-     * Only for calling from JNI.  Allows a click on an unfocused textfield to
-     * put the textfield in focus.
-     */
-    private void setOkayNotToMatch() {
-        if (inEditingMode()) {
-            mWebTextView.mOkayForFocusNotToMatch = true;
-        }
-    }
-
     /*
      * This method checks the current focus and cursor and potentially rebuilds
      * mWebTextView to have the appropriate properties, such as password,
@@ -3462,7 +3461,6 @@
             // Now we need to pass the event to it
             if (inEditingMode()) {
                 mWebTextView.setDefaultSelection();
-                mWebTextView.mOkayForFocusNotToMatch = true;
                 return mWebTextView.dispatchKeyEvent(event);
             }
         } else if (nativeHasFocusNode()) {
@@ -3559,7 +3557,6 @@
                 centerKeyPressOnTextField();
                 if (inEditingMode()) {
                     mWebTextView.setDefaultSelection();
-                    mWebTextView.mOkayForFocusNotToMatch = true;
                 }
                 return true;
             }
@@ -5311,7 +5308,7 @@
             // exclude INVAL_RECT_MSG_ID since it is frequently output
             if (DebugFlags.WEB_VIEW && msg.what != INVAL_RECT_MSG_ID) {
                 Log.v(LOGTAG, msg.what < REMEMBER_PASSWORD || msg.what
-                        > HIDE_FULLSCREEN ? Integer.toString(msg.what)
+                        > DOM_FOCUS_CHANGED ? Integer.toString(msg.what)
                         : HandlerDebugString[msg.what - REMEMBER_PASSWORD]);
             }
             if (mWebViewCore == null) {
@@ -5736,6 +5733,13 @@
                     }
                     break;
 
+                case DOM_FOCUS_CHANGED:
+                    if (inEditingMode()) {
+                        nativeClearCursor();
+                        rebuildWebTextView();
+                    }
+                    break;
+
                 default:
                     super.handleMessage(msg);
                     break;