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

Commit 28d3c245 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Cancel or drop key events if activity is stopped." into lmp-mr1-dev

parents 136f5415 c3672cd3
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -195,6 +195,13 @@ public abstract class InputEvent implements Parcelable {
     */
    public abstract long getEventTimeNano();

    /**
     * Marks the input event as being canceled.
     *
     * @hide
     */
    public abstract void cancel();

    /**
     * Gets the unique sequence number of this event.
     * Every input event that is created or received by a process has a
+10 −0
Original line number Diff line number Diff line
@@ -2303,6 +2303,16 @@ public class KeyEvent extends InputEvent implements Parcelable {
        return (mFlags&FLAG_CANCELED) != 0;
    }

    /**
     * Set {@link #FLAG_CANCELED} flag for the key event.
     *
     * @hide
     */
    @Override
    public final void cancel() {
        mFlags |= FLAG_CANCELED;
    }

    /**
     * Call this during {@link Callback#onKeyDown} to have the system track
     * the key through its final up (possibly including a long press).  Note
+6 −0
Original line number Diff line number Diff line
@@ -3168,6 +3168,12 @@ public final class MotionEvent extends InputEvent implements Parcelable {
        return ev;
    }

    /** @hide */
    @Override
    public final void cancel() {
        setAction(ACTION_CANCEL);
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(PARCEL_TOKEN_MOTION_EVENT);
        nativeWriteToParcel(mNativePtr, out);
+13 −6
Original line number Diff line number Diff line
@@ -3596,12 +3596,19 @@ public final class ViewRootImpl implements ViewParent,
            if (mView == null || !mAdded) {
                Slog.w(TAG, "Dropping event due to root view being removed: " + q.mEvent);
                return true;
            } else if (!mAttachInfo.mHasWindowFocus &&
                  !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER) &&
                  !isTerminalInputEvent(q.mEvent)) {
                // If this is a focused event and the window doesn't currently have input focus,
                // then drop this event.  This could be an event that came back from the previous
                // stage but the window has lost focus in the meantime.
            } else if ((!mAttachInfo.mHasWindowFocus || mStopped)
                    && !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
                // This is a focus event and the window doesn't currently have input focus or
                // has stopped. This could be an event that came back from the previous stage
                // but the window has lost focus or stopped in the meantime.
                if (isTerminalInputEvent(q.mEvent)) {
                    // Don't drop terminal input events, however mark them as canceled.
                    q.mEvent.cancel();
                    Slog.w(TAG, "Cancelling event due to no window focus: " + q.mEvent);
                    return false;
                }

                // Drop non-terminal input events.
                Slog.w(TAG, "Dropping event due to no window focus: " + q.mEvent);
                return true;
            }