@Override public boolean injectKeyEvent(KeyEvent event) throws InjectEventSecurityException { checkNotNull(event); checkState(Looper.myLooper() == Looper.getMainLooper(), "Expecting to be on main thread!"); loopMainThreadUntilIdle(); // TODO: temporarily restrict to one view root for now getOnlyElement(getViewRoots()).getView().dispatchKeyEvent(event); loopMainThreadUntilIdle(); return true; }
class ItemOnClickListener implements View.OnClickListener { private View _parent; public ItemOnClickListener(ViewGroup parent) { _parent = parent; } @Override public void onClick(View view) { //....... // close the dropdown View root = _parent.getRootView(); root.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); root.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); } }
@Override public boolean injectKeyEvent(KeyEvent event) throws InjectEventSecurityException { checkNotNull(event); checkState(Looper.myLooper() == Looper.getMainLooper(), "Expecting to be on main thread!"); loopMainThreadUntilIdle(); // TODO: temporarily restrict to one view root for now getOnlyElement(getViewRoots()).getView().dispatchKeyEvent(event); loopMainThreadUntilIdle(); return true; }
@Override public boolean dispatchKeyEvent(KeyEvent event) { return (mAccessibilityDelegate != null && mAccessibilityDelegate.dispatchKeyEvent(event)) || super.dispatchKeyEvent(event); }
@Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_DPAD_RIGHT: lineByLineMoveTo(1); return true; case KeyEvent.KEYCODE_DPAD_LEFT: lineByLineMoveTo(-1); return true; case KeyEvent.KEYCODE_DPAD_DOWN: verticalDpadScroll(1); return true; case KeyEvent.KEYCODE_DPAD_UP: verticalDpadScroll(-1); return true; } } return super.dispatchKeyEvent(event); }