summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tarandeep Singh <tarandeep@google.com> 2020-03-02 10:41:14 -0800
committer Taran Singh <tarandeep@google.com> 2020-03-03 23:43:37 +0000
commit7bbce8ee6b647e48e4fedcb8851b7cce1dac01a9 (patch)
treed40a0f94bff9ed322c4f9066d0cd34b2db353791
parent81866d41499c496758048fa559f4cc7dbc67160f (diff)
Ignore unchecked IME show/hide when no root
Both showSoftInputUnchecked() and closeCurrenInput() rely on rootView to obtain window token. If view root is null, window has already gone away and IME control had been revoked. Trying to show or hide at this time would be a no-op. Bug: 149900693 Test: Manually using the steps mentioned in bug and verify that there is no NPE. Change-Id: I294bb2ec5395d7502a855bafbac672af069e9b4a Merged-In: I294bb2ec5395d7502a855bafbac672af069e9b4a (cherry picked from commit ba9b716a7092f97997fa4c2389d393e605d1c8ab)
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java38
1 files changed, 25 insertions, 13 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index aca265b1f59a..482d5b25e9da 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -1634,14 +1634,20 @@ public final class InputMethodManager {
@Deprecated
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768499)
public void showSoftInputUnchecked(int flags, ResultReceiver resultReceiver) {
- try {
- Log.w(TAG, "showSoftInputUnchecked() is a hidden method, which will be removed "
- + "soon. If you are using android.support.v7.widget.SearchView, please update "
- + "to version 26.0 or newer version.");
- mService.showSoftInput(
- mClient, mCurRootView.getView().getWindowToken(), flags, resultReceiver);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
+ synchronized (mH) {
+ try {
+ Log.w(TAG, "showSoftInputUnchecked() is a hidden method, which will be"
+ + " removed soon. If you are using android.support.v7.widget.SearchView,"
+ + " please update to version 26.0 or newer version.");
+ if (mCurRootView == null || mCurRootView.getView() == null) {
+ Log.w(TAG, "No current root view, ignoring showSoftInputUnchecked()");
+ return;
+ }
+ mService.showSoftInput(
+ mClient, mCurRootView.getView().getWindowToken(), flags, resultReceiver);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}
@@ -1986,11 +1992,17 @@ public final class InputMethodManager {
@UnsupportedAppUsage
void closeCurrentInput() {
- try {
- mService.hideSoftInput(
- mClient, mCurRootView.getView().getWindowToken(), HIDE_NOT_ALWAYS, null);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
+ synchronized (mH) {
+ if (mCurRootView == null || mCurRootView.getView() == null) {
+ Log.w(TAG, "No current root view, ignoring closeCurrentInput()");
+ return;
+ }
+ try {
+ mService.hideSoftInput(
+ mClient, mCurRootView.getView().getWindowToken(), HIDE_NOT_ALWAYS, null);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}