Merge "Cancel or drop key events if activity is stopped." into lmp-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
28d3c245a1
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user