Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d06d734 authored by Taran Singh's avatar Taran Singh Committed by Automerger Merge Worker
Browse files

Merge "Refactor InkWindow lifetime" into udc-qpr-dev am: 1139a889 am: 03c53712

parents 165fa7fe 03c53712
Loading
Loading
Loading
Loading
+11 −14
Original line number Original line Diff line number Diff line
@@ -807,9 +807,11 @@ public class InputMethodService extends AbstractInputMethodService {
            onUnbindInput();
            onUnbindInput();
            mInputBinding = null;
            mInputBinding = null;
            mInputConnection = null;
            mInputConnection = null;
            // free-up cached InkWindow surface on detaching from current client.

            if (mInkWindow != null) {
            if (mInkWindow != null) {
                removeHandwritingInkWindow();
                finishStylusHandwriting();
                // free-up InkWindow surface after timeout.
                scheduleStylusWindowIdleTimeout();
            }
            }
        }
        }


@@ -1020,6 +1022,7 @@ public class InputMethodService extends AbstractInputMethodService {
                mOnPreparedStylusHwCalled = true;
                mOnPreparedStylusHwCalled = true;
            }
            }
            if (onStartStylusHandwriting()) {
            if (onStartStylusHandwriting()) {
                cancelStylusWindowIdleTimeout();
                mPrivOps.onStylusHandwritingReady(requestId, Process.myPid());
                mPrivOps.onStylusHandwritingReady(requestId, Process.myPid());
            } else {
            } else {
                Log.i(TAG, "IME is not ready. Can't start Stylus Handwriting");
                Log.i(TAG, "IME is not ready. Can't start Stylus Handwriting");
@@ -1109,7 +1112,7 @@ public class InputMethodService extends AbstractInputMethodService {
         */
         */
        @Override
        @Override
        public void removeStylusHandwritingWindow() {
        public void removeStylusHandwritingWindow() {
            InputMethodService.this.removeStylusHandwritingWindow();
            InputMethodService.this.finishAndRemoveStylusHandwritingWindow();
        }
        }


        /**
        /**
@@ -2667,21 +2670,15 @@ public class InputMethodService extends AbstractInputMethodService {
     * Typically, this is called when {@link InkWindow} should no longer be holding a surface in
     * Typically, this is called when {@link InkWindow} should no longer be holding a surface in
     * memory.
     * memory.
     */
     */
    private void removeStylusHandwritingWindow() {
    private void finishAndRemoveStylusHandwritingWindow() {
        cancelStylusWindowIdleTimeout();
        mOnPreparedStylusHwCalled = false;
        mStylusWindowIdleTimeoutRunnable = null;
        if (mInkWindow != null) {
        if (mInkWindow != null) {
            if (mHandwritingRequestId.isPresent()) {
            if (mHandwritingRequestId.isPresent()) {
                // if handwriting session is still ongoing. This shouldn't happen.
                // if handwriting session is still ongoing. This shouldn't happen.
                finishStylusHandwriting();
                finishStylusHandwriting();
            }
            }
            removeHandwritingInkWindow();
        }
    }

    private void removeHandwritingInkWindow() {
        cancelStylusWindowIdleTimeout();
        mOnPreparedStylusHwCalled = false;
        mStylusWindowIdleTimeoutRunnable = null;
        if (mInkWindow != null) {
            mInkWindow.hide(true /* remove */);
            mInkWindow.hide(true /* remove */);
            mInkWindow.destroy();
            mInkWindow.destroy();
            mInkWindow = null;
            mInkWindow = null;
@@ -2707,7 +2704,7 @@ public class InputMethodService extends AbstractInputMethodService {
    private Runnable getStylusWindowIdleTimeoutRunnable() {
    private Runnable getStylusWindowIdleTimeoutRunnable() {
        if (mStylusWindowIdleTimeoutRunnable == null) {
        if (mStylusWindowIdleTimeoutRunnable == null) {
            mStylusWindowIdleTimeoutRunnable = () -> {
            mStylusWindowIdleTimeoutRunnable = () -> {
                removeHandwritingInkWindow();
                finishAndRemoveStylusHandwritingWindow();
                mStylusWindowIdleTimeoutRunnable = null;
                mStylusWindowIdleTimeoutRunnable = null;
            };
            };
        }
        }