From 1fa26cbfc883ef76a46234d104906a1a9a515fc5 Mon Sep 17 00:00:00 2001 From: George Mount Date: Mon, 3 Oct 2011 10:56:28 -0700 Subject: [PATCH] Fix monkey NullPointerException bug: 5385775 Check mWebViewCore has been destroyed Remove mWebTextView from WebView when WebView is destroyed Clear WebTextView's handler when it is removed from WebView Change-Id: I9c62292d693109e692c341e3e4dba3e04af81fe4 --- core/java/android/webkit/WebTextView.java | 6 +++++- core/java/android/webkit/WebView.java | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java index 217ad7c4367e8..18eb1edddd7c6 100644 --- a/core/java/android/webkit/WebTextView.java +++ b/core/java/android/webkit/WebTextView.java @@ -768,9 +768,13 @@ import junit.framework.Assert; 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 370cce40b704d..a38d521d590f3 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -1581,6 +1581,11 @@ public class WebView extends AbsoluteLayout 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 @@ public class WebView extends AbsoluteLayout } /* 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;