Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8a3f1ee authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "Moving back button behavior to SharedInputHandler, and now handling ESC keys." into arc-apps

parents a341823e 0902f07d
Loading
Loading
Loading
Loading
+0 −19
Original line number Diff line number Diff line
@@ -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);
+86 −15
Original line number Diff line number Diff line
@@ -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;
    }
}
+0 −9
Original line number Diff line number Diff line
@@ -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);
+13 −6
Original line number Diff line number Diff line
@@ -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;
        }
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -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);

@@ -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