Merge "Dispatch KEYCODE_BACK to the full input pipeline in compat callback." into tm-dev
This commit is contained in:
@@ -6407,6 +6407,24 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
return FINISH_HANDLED;
|
return FINISH_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the new back dispatch is enabled, intercept KEYCODE_BACK before it reaches the
|
||||||
|
// view tree and invoke the appropriate {@link OnBackInvokedCallback}.
|
||||||
|
if (isBack(event)
|
||||||
|
&& mContext != null
|
||||||
|
&& WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mContext)) {
|
||||||
|
OnBackInvokedCallback topCallback =
|
||||||
|
getOnBackInvokedDispatcher().getTopCallback();
|
||||||
|
if (event.getAction() == KeyEvent.ACTION_UP) {
|
||||||
|
if (topCallback != null) {
|
||||||
|
topCallback.onBackInvoked();
|
||||||
|
return FINISH_HANDLED;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Drop other actions such as {@link KeyEvent.ACTION_DOWN}.
|
||||||
|
return FINISH_NOT_HANDLED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Deliver the key to the view hierarchy.
|
// Deliver the key to the view hierarchy.
|
||||||
if (mView.dispatchKeyEvent(event)) {
|
if (mView.dispatchKeyEvent(event)) {
|
||||||
return FINISH_HANDLED;
|
return FINISH_HANDLED;
|
||||||
@@ -6416,19 +6434,6 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
return FINISH_NOT_HANDLED;
|
return FINISH_NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isBack(event)
|
|
||||||
&& mContext != null
|
|
||||||
&& WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mContext)) {
|
|
||||||
// Invoke the appropriate {@link OnBackInvokedCallback} if the new back
|
|
||||||
// navigation should be used, and the key event is not handled by anything else.
|
|
||||||
OnBackInvokedCallback topCallback =
|
|
||||||
getOnBackInvokedDispatcher().getTopCallback();
|
|
||||||
if (topCallback != null) {
|
|
||||||
topCallback.onBackInvoked();
|
|
||||||
return FINISH_HANDLED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This dispatch is for windows that don't have a Window.Callback. Otherwise,
|
// This dispatch is for windows that don't have a Window.Callback. Otherwise,
|
||||||
// the Window.Callback usually will have already called this (see
|
// the Window.Callback usually will have already called this (see
|
||||||
// DecorView.superDispatchKeyEvent) leaving this call a no-op.
|
// DecorView.superDispatchKeyEvent) leaving this call a no-op.
|
||||||
@@ -10766,11 +10771,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /* scancode */,
|
KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /* scancode */,
|
||||||
KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
|
KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
|
||||||
InputDevice.SOURCE_KEYBOARD);
|
InputDevice.SOURCE_KEYBOARD);
|
||||||
|
enqueueInputEvent(ev);
|
||||||
ev.setDisplayId(mContext.getDisplay().getDisplayId());
|
|
||||||
if (mView != null) {
|
|
||||||
mView.dispatchKeyEvent(ev);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCompatOnBackInvokedCallback() {
|
private void registerCompatOnBackInvokedCallback() {
|
||||||
|
|||||||
Reference in New Issue
Block a user