Loading src/com/android/documentsui/BaseActivity.java +0 −19 Original line number Diff line number Diff line Loading @@ -546,25 +546,6 @@ public abstract class BaseActivity return mState.stack.peek(); } @Override public void onBackPressed() { // While action bar is expanded, the state stack UI is hidden. if (mSearchManager.cancelSearch()) { return; } DirectoryFragment dir = getDirectoryFragment(); if (dir != null && dir.onBackPressed()) { return; } if (popDir()) { return; } super.onBackPressed(); } @VisibleForTesting public void addEventListener(EventListener listener) { mEventListeners.add(listener); Loading src/com/android/documentsui/SharedInputHandler.java +86 −15 Original line number Diff line number Diff line Loading @@ -15,43 +15,114 @@ */ package com.android.documentsui; import static com.android.documentsui.base.Shared.DEBUG; import android.util.Log; import android.view.KeyEvent; import com.android.documentsui.base.Events; import com.android.documentsui.base.Features; import com.android.documentsui.base.Procedure; import com.android.documentsui.dirlist.FocusHandler; import com.android.documentsui.selection.SelectionManager; public class SharedInputHandler { private final FocusManager mFocusManager; private static final String TAG = "SharedInputHandler"; private final FocusHandler mFocusManager; private final Procedure mSearchCanceler; private final Procedure mDirPopper; private final Features mFeatures; private final SelectionManager mSelectionMgr; public SharedInputHandler(FocusManager focusManager, Procedure dirPopper, Features features) { mFocusManager = focusManager; public SharedInputHandler( FocusHandler focusHandler, SelectionManager selectionMgr, Procedure searchCanceler, Procedure dirPopper, Features features) { mFocusManager = focusHandler; mSearchCanceler = searchCanceler; mSelectionMgr = selectionMgr; mDirPopper = dirPopper; mFeatures = features; } public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { // Unhandled ESC keys end up being rethrown back at us as BACK keys. So by returning // true, we make sure it always does no-op. case KeyEvent.KEYCODE_ESCAPE: return onEscape(); case KeyEvent.KEYCODE_DEL: return onDelete(); // This is the Android back button, not backspace. case KeyEvent.KEYCODE_BACK: return onBack(); case KeyEvent.KEYCODE_TAB: return onTab(); default: // Instead of duplicating the switch-case in #isNavigationKeyCode, best just to // leave it here. if (Events.isNavigationKeyCode(keyCode)) { // Forward all unclaimed navigation keystrokes to the directory list. // This causes any stray navigation keystrokes to focus the content pane, // which is probably what the user is trying to do. mFocusManager.focusDirectoryList(); return true; } else if (keyCode == KeyEvent.KEYCODE_TAB && !mFeatures.isSystemKeyboardNavigationEnabled()) { } return false; } } private boolean onTab() { if (!mFeatures.isSystemKeyboardNavigationEnabled()) { // Tab toggles focus on the navigation drawer. // This should only be called in pre-O devices, since O has built-in keyboard navigation // This should only be called in pre-O devices, since O has built-in keyboard // navigation // support. mFocusManager.advanceFocusArea(); return true; } else if (keyCode == KeyEvent.KEYCODE_DEL) { } return false; } private boolean onDelete() { mDirPopper.run(); return true; } return false; private boolean onBack() { if (mSearchCanceler.run()) { return true; } if (mSelectionMgr.hasSelection()) { if (DEBUG) Log.d(TAG, "Back pressed. Clearing existing selection."); mSelectionMgr.clearSelection(); return true; } return mDirPopper.run(); } private boolean onEscape() { if (mSearchCanceler.run()) { return true; } if (mSelectionMgr.hasSelection()) { if (DEBUG) Log.d(TAG, "ESC pressed. Clearing existing selection."); mSelectionMgr.clearSelection(); return true; } return true; } } src/com/android/documentsui/dirlist/DirectoryFragment.java +0 −9 Original line number Diff line number Diff line Loading @@ -693,15 +693,6 @@ public class DirectoryFragment extends Fragment } } public final boolean onBackPressed() { if (mSelectionMgr.hasSelection()) { if (DEBUG) Log.d(TAG, "Clearing selection on selection manager."); mSelectionMgr.clearSelection(); return true; } return false; } private boolean onAccessibilityClick(View child) { DocumentDetails doc = getDocumentHolder(child); mActions.openDocument(doc); Loading src/com/android/documentsui/files/ActivityInputHandler.java +13 −6 Original line number Diff line number Diff line Loading @@ -30,11 +30,18 @@ final class ActivityInputHandler { } boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_DEL && event.isAltPressed()) || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) { switch (keyCode) { case KeyEvent.KEYCODE_FORWARD_DEL: mDeleteHandler.run(); return true; case KeyEvent.KEYCODE_DEL: if (event.isAltPressed()) { mDeleteHandler.run(); return true; } return false; default: return false; } } } src/com/android/documentsui/files/FilesActivity.java +9 −2 Original line number Diff line number Diff line Loading @@ -132,7 +132,12 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons mActivityInputHandler = new ActivityInputHandler(mInjector.actions::deleteSelectedDocuments); mSharedInputHandler = new SharedInputHandler(mInjector.focusManager, this::popDir, mInjector.features); new SharedInputHandler( mInjector.focusManager, mInjector.selectionMgr, mInjector.searchManager::cancelSearch, this::popDir, mInjector.features); RootsFragment.show(getFragmentManager(), null); Loading Loading @@ -302,7 +307,9 @@ 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); } Loading Loading
src/com/android/documentsui/BaseActivity.java +0 −19 Original line number Diff line number Diff line Loading @@ -546,25 +546,6 @@ public abstract class BaseActivity return mState.stack.peek(); } @Override public void onBackPressed() { // While action bar is expanded, the state stack UI is hidden. if (mSearchManager.cancelSearch()) { return; } DirectoryFragment dir = getDirectoryFragment(); if (dir != null && dir.onBackPressed()) { return; } if (popDir()) { return; } super.onBackPressed(); } @VisibleForTesting public void addEventListener(EventListener listener) { mEventListeners.add(listener); Loading
src/com/android/documentsui/SharedInputHandler.java +86 −15 Original line number Diff line number Diff line Loading @@ -15,43 +15,114 @@ */ package com.android.documentsui; import static com.android.documentsui.base.Shared.DEBUG; import android.util.Log; import android.view.KeyEvent; import com.android.documentsui.base.Events; import com.android.documentsui.base.Features; import com.android.documentsui.base.Procedure; import com.android.documentsui.dirlist.FocusHandler; import com.android.documentsui.selection.SelectionManager; public class SharedInputHandler { private final FocusManager mFocusManager; private static final String TAG = "SharedInputHandler"; private final FocusHandler mFocusManager; private final Procedure mSearchCanceler; private final Procedure mDirPopper; private final Features mFeatures; private final SelectionManager mSelectionMgr; public SharedInputHandler(FocusManager focusManager, Procedure dirPopper, Features features) { mFocusManager = focusManager; public SharedInputHandler( FocusHandler focusHandler, SelectionManager selectionMgr, Procedure searchCanceler, Procedure dirPopper, Features features) { mFocusManager = focusHandler; mSearchCanceler = searchCanceler; mSelectionMgr = selectionMgr; mDirPopper = dirPopper; mFeatures = features; } public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { // Unhandled ESC keys end up being rethrown back at us as BACK keys. So by returning // true, we make sure it always does no-op. case KeyEvent.KEYCODE_ESCAPE: return onEscape(); case KeyEvent.KEYCODE_DEL: return onDelete(); // This is the Android back button, not backspace. case KeyEvent.KEYCODE_BACK: return onBack(); case KeyEvent.KEYCODE_TAB: return onTab(); default: // Instead of duplicating the switch-case in #isNavigationKeyCode, best just to // leave it here. if (Events.isNavigationKeyCode(keyCode)) { // Forward all unclaimed navigation keystrokes to the directory list. // This causes any stray navigation keystrokes to focus the content pane, // which is probably what the user is trying to do. mFocusManager.focusDirectoryList(); return true; } else if (keyCode == KeyEvent.KEYCODE_TAB && !mFeatures.isSystemKeyboardNavigationEnabled()) { } return false; } } private boolean onTab() { if (!mFeatures.isSystemKeyboardNavigationEnabled()) { // Tab toggles focus on the navigation drawer. // This should only be called in pre-O devices, since O has built-in keyboard navigation // This should only be called in pre-O devices, since O has built-in keyboard // navigation // support. mFocusManager.advanceFocusArea(); return true; } else if (keyCode == KeyEvent.KEYCODE_DEL) { } return false; } private boolean onDelete() { mDirPopper.run(); return true; } return false; private boolean onBack() { if (mSearchCanceler.run()) { return true; } if (mSelectionMgr.hasSelection()) { if (DEBUG) Log.d(TAG, "Back pressed. Clearing existing selection."); mSelectionMgr.clearSelection(); return true; } return mDirPopper.run(); } private boolean onEscape() { if (mSearchCanceler.run()) { return true; } if (mSelectionMgr.hasSelection()) { if (DEBUG) Log.d(TAG, "ESC pressed. Clearing existing selection."); mSelectionMgr.clearSelection(); return true; } return true; } }
src/com/android/documentsui/dirlist/DirectoryFragment.java +0 −9 Original line number Diff line number Diff line Loading @@ -693,15 +693,6 @@ public class DirectoryFragment extends Fragment } } public final boolean onBackPressed() { if (mSelectionMgr.hasSelection()) { if (DEBUG) Log.d(TAG, "Clearing selection on selection manager."); mSelectionMgr.clearSelection(); return true; } return false; } private boolean onAccessibilityClick(View child) { DocumentDetails doc = getDocumentHolder(child); mActions.openDocument(doc); Loading
src/com/android/documentsui/files/ActivityInputHandler.java +13 −6 Original line number Diff line number Diff line Loading @@ -30,11 +30,18 @@ final class ActivityInputHandler { } boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_DEL && event.isAltPressed()) || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) { switch (keyCode) { case KeyEvent.KEYCODE_FORWARD_DEL: mDeleteHandler.run(); return true; case KeyEvent.KEYCODE_DEL: if (event.isAltPressed()) { mDeleteHandler.run(); return true; } return false; default: return false; } } }
src/com/android/documentsui/files/FilesActivity.java +9 −2 Original line number Diff line number Diff line Loading @@ -132,7 +132,12 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons mActivityInputHandler = new ActivityInputHandler(mInjector.actions::deleteSelectedDocuments); mSharedInputHandler = new SharedInputHandler(mInjector.focusManager, this::popDir, mInjector.features); new SharedInputHandler( mInjector.focusManager, mInjector.selectionMgr, mInjector.searchManager::cancelSearch, this::popDir, mInjector.features); RootsFragment.show(getFragmentManager(), null); Loading Loading @@ -302,7 +307,9 @@ 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); } Loading