Merge "Fix monkey NullPointerException"
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 092e2b5..33f84a5 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -768,9 +768,13 @@
             imm.hideSoftInputFromWindow(getWindowToken(), 0);
         }
         mInsideRemove = true;
+        boolean isFocused = hasFocus();
         mWebView.removeView(this);
-        mWebView.requestFocus();
+        if (isFocused) {
+            mWebView.requestFocus();
+        }
         mInsideRemove = false;
+        mHandler.removeCallbacksAndMessages(null);
     }
 
     @Override
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index eaed9fe..89f21d7 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1581,6 +1581,11 @@
             mListBoxDialog.dismiss();
             mListBoxDialog = null;
         }
+        // remove so that it doesn't cause events
+        if (mWebTextView != null) {
+            mWebTextView.remove();
+            mWebTextView = null;
+        }
         if (mNativeClass != 0) nativeStopGL();
         if (mWebViewCore != null) {
             // Set the handlers to null before destroying WebViewCore so no
@@ -7636,6 +7641,10 @@
     }
 
     /* package */ void passToJavaScript(String currentText, KeyEvent event) {
+        // check if mWebViewCore has been destroyed
+        if (mWebViewCore == null) {
+            return;
+        }
         WebViewCore.JSKeyData arg = new WebViewCore.JSKeyData();
         arg.mEvent = event;
         arg.mCurrentText = currentText;