Dispatch hover events through the input consumer proxy
- Touch explore uses hover events to focus views for accessibility, but we were dropping these events when handling them through the input consumer proxy. The reason this changed is that in sc-v2 we moved the recents input consumer to the top of the task display area to ensure that it was always above any of the tasks in splitscreen, but by doing so, it was always above launcher even after settling in overview. The existing path for handling motion events is heavily tied to touch handling (action down/move/up) so we just add a separate path for dispatching hover events through the normal mechanism to launcher via the consumer. Bug: 197043796 Change-Id: I5f8cfd357ff13971fe172ce1d0179535479cd26c
This commit is contained in:
parent
88c671ee71
commit
eff9a120c6
|
@ -99,6 +99,8 @@ public interface InputConsumer {
|
|||
|
||||
default void onMotionEvent(MotionEvent ev) { }
|
||||
|
||||
default void onHoverEvent(MotionEvent ev) { }
|
||||
|
||||
default void onKeyEvent(KeyEvent ev) { }
|
||||
|
||||
default void onInputEvent(InputEvent ev) {
|
||||
|
|
|
@ -100,6 +100,13 @@ public class OverviewInputConsumer<S extends BaseState<S>, T extends StatefulAct
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHoverEvent(MotionEvent ev) {
|
||||
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
|
||||
mActivity.dispatchGenericMotionEvent(ev);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyEvent(KeyEvent ev) {
|
||||
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
|
||||
|
|
|
@ -71,7 +71,16 @@ public class InputConsumerProxy {
|
|||
|
||||
private boolean onInputConsumerEvent(InputEvent ev) {
|
||||
if (ev instanceof MotionEvent) {
|
||||
onInputConsumerMotionEvent((MotionEvent) ev);
|
||||
MotionEvent event = (MotionEvent) ev;
|
||||
int action = event.getActionMasked();
|
||||
boolean isHoverEvent = action == MotionEvent.ACTION_HOVER_ENTER
|
||||
|| action == MotionEvent.ACTION_HOVER_MOVE
|
||||
|| action == MotionEvent.ACTION_HOVER_EXIT;
|
||||
if (isHoverEvent) {
|
||||
onInputConsumerHoverEvent(event);
|
||||
} else {
|
||||
onInputConsumerMotionEvent(event);
|
||||
}
|
||||
} else if (ev instanceof KeyEvent) {
|
||||
initInputConsumerIfNeeded();
|
||||
mInputConsumer.onKeyEvent((KeyEvent) ev);
|
||||
|
@ -113,6 +122,15 @@ public class InputConsumerProxy {
|
|||
return true;
|
||||
}
|
||||
|
||||
private void onInputConsumerHoverEvent(MotionEvent ev) {
|
||||
initInputConsumerIfNeeded();
|
||||
if (mInputConsumer != null) {
|
||||
SimpleOrientationTouchTransformer.INSTANCE.get(mContext).transform(ev,
|
||||
mRotationSupplier.get());
|
||||
mInputConsumer.onHoverEvent(ev);
|
||||
}
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
if (mTouchInProgress) {
|
||||
mDestroyPending = true;
|
||||
|
|
Loading…
Reference in New Issue