diff options
author | 2019-08-05 16:09:53 +0800 | |
---|---|---|
committer | 2019-09-11 06:44:46 +0000 | |
commit | 35bfbefed39d4b10a0e959dbfee5a7256d4e7947 (patch) | |
tree | e5af2f309a67a3f25ea8a696b249c04355203bec | |
parent | 83e49f470f6145fcdd682baf526891e4425e3b05 (diff) |
Intercept KeyDown Event to monitor KEYCODE_SEARCH
Intercept onKeyDown through BaseActivity.java
Reuqest focusd for SearchView if KEYCODE_SEARCH trigger
Test: atest DocumentsUIGoogleTests
Test: adb shell input keyevent 84, then SearchView focued
Bug: 137053191
Change-Id: I0b96c081901ef486ccb3cc75fca2b33319c87dc4
4 files changed, 37 insertions, 15 deletions
diff --git a/src/com/android/documentsui/SharedInputHandler.java b/src/com/android/documentsui/SharedInputHandler.java index 28eba70c9..a70a805dd 100644 --- a/src/com/android/documentsui/SharedInputHandler.java +++ b/src/com/android/documentsui/SharedInputHandler.java @@ -37,6 +37,7 @@ public class SharedInputHandler { private final FocusHandler mFocusManager; private final Procedure mSearchCanceler; private final Procedure mDirPopper; + private final Runnable mSearchExecutor; private final Features mFeatures; private final SelectionTracker<String> mSelectionMgr; private final DrawerController mDrawer; @@ -47,13 +48,15 @@ public class SharedInputHandler { Procedure searchCanceler, Procedure dirPopper, Features features, - DrawerController drawer) { + DrawerController drawer, + Runnable searchExcutor) { mFocusManager = focusHandler; mSearchCanceler = searchCanceler; mSelectionMgr = selectionMgr; mDirPopper = dirPopper; mFeatures = features; mDrawer = drawer; + mSearchExecutor = searchExcutor; } public boolean onKeyDown(int keyCode, KeyEvent event) { @@ -73,6 +76,10 @@ public class SharedInputHandler { case KeyEvent.KEYCODE_TAB: return onTab(); + case KeyEvent.KEYCODE_SEARCH: + mSearchExecutor.run(); + return true; + default: // Instead of duplicating the switch-case in #isNavigationKeyCode, best just to // leave it here. diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java index 9547961ed..7308272ca 100644 --- a/src/com/android/documentsui/files/FilesActivity.java +++ b/src/com/android/documentsui/files/FilesActivity.java @@ -159,7 +159,8 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons mInjector.searchManager::cancelSearch, this::popDir, mInjector.features, - mDrawer); + mDrawer, + mInjector.searchManager::onSearchBarClicked); RootsFragment.show(getSupportFragmentManager(), null); @@ -360,9 +361,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mActivityInputHandler.onKeyDown(keyCode, event) - || mSharedInputHandler.onKeyDown( - keyCode, - event) + || mSharedInputHandler.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event); } diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java index 48ebc0bed..9530ae82f 100644 --- a/src/com/android/documentsui/picker/PickActivity.java +++ b/src/com/android/documentsui/picker/PickActivity.java @@ -146,7 +146,8 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { mInjector.searchManager::cancelSearch, this::popDir, mInjector.features, - mDrawer); + mDrawer, + mInjector.searchManager::onSearchBarClicked); setupLayout(intent); mInjector.actions.initLocation(intent); Metrics.logPickerLaunchedFrom(Shared.getCallingPackageName(this)); @@ -389,9 +390,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { @CallSuper @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - return mSharedInputHandler.onKeyDown( - keyCode, - event) + return mSharedInputHandler.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event); } diff --git a/tests/unit/com/android/documentsui/SharedInputHandlerTest.java b/tests/unit/com/android/documentsui/SharedInputHandlerTest.java index d774b85f8..6546117eb 100644 --- a/tests/unit/com/android/documentsui/SharedInputHandlerTest.java +++ b/tests/unit/com/android/documentsui/SharedInputHandlerTest.java @@ -47,6 +47,7 @@ public class SharedInputHandlerTest { private TestDrawerController mDrawer = TestDrawerController.create(); private boolean mDirPopHappened; private boolean mCanceledSearch; + private boolean mSearchExecuted; private Procedure mDirPopper = new Procedure() { @Override public boolean run() { @@ -54,6 +55,12 @@ public class SharedInputHandlerTest { return true; } }; + private Runnable mSearchExecutor = new Runnable() { + @Override + public void run() { + mSearchExecuted = true; + } + }; @Before public void setUp() { @@ -61,12 +68,11 @@ public class SharedInputHandlerTest { mSharedInputHandler = new SharedInputHandler( mFocusHandler, mSelectionMgr, - () -> { - return false; - }, + () -> false, mDirPopper, mFeatures, - mDrawer); + mDrawer, + mSearchExecutor); } @Test @@ -88,7 +94,8 @@ public class SharedInputHandlerTest { }, mDirPopper, new TestFeatures(), - mDrawer); + mDrawer, + mSearchExecutor); KeyEvent backEvent = new KeyEvent(0, 0, MotionEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK, 0, 0); assertTrue(mSharedInputHandler.onKeyDown(backEvent.getKeyCode(), backEvent)); @@ -146,7 +153,8 @@ public class SharedInputHandlerTest { }, mDirPopper, new TestFeatures(), - mDrawer); + mDrawer, + mSearchExecutor); KeyEvent escapeEvent = new KeyEvent(0, 0, MotionEvent.ACTION_DOWN, KeyEvent.KEYCODE_ESCAPE, 0, 0); assertTrue(mSharedInputHandler.onKeyDown(escapeEvent.getKeyCode(), escapeEvent)); @@ -208,4 +216,13 @@ public class SharedInputHandlerTest { assertTrue(mFocusHandler.focusDirectoryCalled); } + + @Test + public void testSearchKey_LaunchSearchView() { + KeyEvent searchEvent = + new KeyEvent(0, 0, MotionEvent.ACTION_DOWN, KeyEvent.KEYCODE_SEARCH, 0, 0); + assertTrue(mSharedInputHandler.onKeyDown(searchEvent.getKeyCode(), searchEvent)); + + assertTrue(mSearchExecuted); + } } |