diff options
| -rw-r--r-- | core/java/android/inputmethodservice/InkWindow.java | 3 | ||||
| -rw-r--r-- | core/java/android/inputmethodservice/InputMethodService.java | 31 |
2 files changed, 21 insertions, 13 deletions
diff --git a/core/java/android/inputmethodservice/InkWindow.java b/core/java/android/inputmethodservice/InkWindow.java index 6257d5307858..469b52bd9185 100644 --- a/core/java/android/inputmethodservice/InkWindow.java +++ b/core/java/android/inputmethodservice/InkWindow.java @@ -163,6 +163,9 @@ final class InkWindow extends PhoneWindow { mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { + if (mInkView == null) { + return; + } if (mInkView.isVisibleToUser()) { if (mInkViewVisibilityListener != null) { mInkViewVisibilityListener.onInkViewVisible(); diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 92088e9f0a33..85a8551cb23f 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -977,7 +977,7 @@ public class InputMethodService extends AbstractInputMethodService { Log.d(TAG, "Input should have started before starting Stylus handwriting."); return; } - maybeCreateInkWindow(); + maybeCreateAndInitInkWindow(); if (!mOnPreparedStylusHwCalled) { // prepare hasn't been called by Stylus HOVER. onPrepareStylusHandwriting(); @@ -1037,21 +1037,21 @@ public class InputMethodService extends AbstractInputMethodService { */ @Override public void initInkWindow() { - maybeCreateInkWindow(); - mInkWindow.initOnly(); + maybeCreateAndInitInkWindow(); onPrepareStylusHandwriting(); mOnPreparedStylusHwCalled = true; } /** - * Create and attach token to Ink window if it wasn't already created. + * Create, attach token and layout Ink window if it wasn't already created. */ - private void maybeCreateInkWindow() { + private void maybeCreateAndInitInkWindow() { if (mInkWindow == null) { mInkWindow = new InkWindow(mWindow.getContext()); mInkWindow.setToken(mToken); } // TODO(b/243571274): set an idle-timeout after which InkWindow is removed. + mInkWindow.initOnly(); } /** @@ -2487,21 +2487,26 @@ public class InputMethodService extends AbstractInputMethodService { * @param motionEvent {@link MotionEvent} from stylus. */ public void onStylusHandwritingMotionEvent(@NonNull MotionEvent motionEvent) { - if (mInkWindow.isInkViewVisible()) { + if (mInkWindow != null && mInkWindow.isInkViewVisible()) { mInkWindow.getDecorView().dispatchTouchEvent(motionEvent); } else { if (mPendingEvents == null) { mPendingEvents = new RingBuffer(MotionEvent.class, MAX_EVENTS_BUFFER); } mPendingEvents.append(motionEvent); - mInkWindow.setInkViewVisibilityListener(() -> { - if (mPendingEvents != null && !mPendingEvents.isEmpty()) { - for (MotionEvent event : mPendingEvents.toArray()) { - mInkWindow.getDecorView().dispatchTouchEvent(event); + if (mInkWindow != null) { + mInkWindow.setInkViewVisibilityListener(() -> { + if (mPendingEvents != null && !mPendingEvents.isEmpty()) { + for (MotionEvent event : mPendingEvents.toArray()) { + if (mInkWindow == null) { + break; + } + mInkWindow.getDecorView().dispatchTouchEvent(event); + } + mPendingEvents.clear(); } - mPendingEvents.clear(); - } - }); + }); + } } } |