17c35b036cb0de801a093df62da92c4a94399c26cBen Lin/*
27c35b036cb0de801a093df62da92c4a94399c26cBen Lin * Copyright (C) 2016 The Android Open Source Project
37c35b036cb0de801a093df62da92c4a94399c26cBen Lin *
47c35b036cb0de801a093df62da92c4a94399c26cBen Lin * Licensed under the Apache License, Version 2.0 (the "License");
57c35b036cb0de801a093df62da92c4a94399c26cBen Lin * you may not use this file except in compliance with the License.
67c35b036cb0de801a093df62da92c4a94399c26cBen Lin * You may obtain a copy of the License at
77c35b036cb0de801a093df62da92c4a94399c26cBen Lin *
87c35b036cb0de801a093df62da92c4a94399c26cBen Lin *      http://www.apache.org/licenses/LICENSE-2.0
97c35b036cb0de801a093df62da92c4a94399c26cBen Lin *
107c35b036cb0de801a093df62da92c4a94399c26cBen Lin * Unless required by applicable law or agreed to in writing, software
117c35b036cb0de801a093df62da92c4a94399c26cBen Lin * distributed under the License is distributed on an "AS IS" BASIS,
127c35b036cb0de801a093df62da92c4a94399c26cBen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c35b036cb0de801a093df62da92c4a94399c26cBen Lin * See the License for the specific language governing permissions and
147c35b036cb0de801a093df62da92c4a94399c26cBen Lin * limitations under the License.
157c35b036cb0de801a093df62da92c4a94399c26cBen Lin */
167c35b036cb0de801a093df62da92c4a94399c26cBen Lin
172567603749ff84946a888ffbd698c1381b26b5b1Garfield Tanpackage com.android.documentsui.picker;
187c35b036cb0de801a093df62da92c4a94399c26cBen Lin
19d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport static com.android.documentsui.base.State.ACTION_CREATE;
20d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport static com.android.documentsui.base.State.ACTION_GET_CONTENT;
21d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport static com.android.documentsui.base.State.ACTION_OPEN;
22d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport static com.android.documentsui.base.State.ACTION_OPEN_TREE;
23d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport static com.android.documentsui.base.State.ACTION_PICK_COPY_DESTINATION;
247c35b036cb0de801a093df62da92c4a94399c26cBen Lin
2592ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKayimport android.view.KeyboardShortcutGroup;
267c35b036cb0de801a093df62da92c4a94399c26cBen Linimport android.view.Menu;
277c35b036cb0de801a093df62da92c4a94399c26cBen Linimport android.view.MenuItem;
287c35b036cb0de801a093df62da92c4a94399c26cBen Lin
29d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport com.android.documentsui.base.State;
303a2682362481d1af4ec437775610a1f11e9faa24Steve McKayimport com.android.documentsui.queries.SearchViewManager;
31d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKay
3292ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKayimport java.util.List;
3392ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKayimport java.util.function.IntFunction;
3492ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay
352567603749ff84946a888ffbd698c1381b26b5b1Garfield Tanpublic final class MenuManager extends com.android.documentsui.MenuManager {
367c35b036cb0de801a093df62da92c4a94399c26cBen Lin
37e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay    public MenuManager(SearchViewManager searchManager, State displayState, DirectoryDetails dirDetails) {
38e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        super(searchManager, displayState, dirDetails);
39ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin
40e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay    }
417c35b036cb0de801a093df62da92c4a94399c26cBen Lin
4292ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay    @Override
4392ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay    public void updateKeyboardShortcutsMenu(
4492ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay            List<KeyboardShortcutGroup> data, IntFunction<String> stringSupplier) {
4592ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay        // None as of yet.
4692ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay    }
4792ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay
48e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay    private boolean picking() {
49e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        return mState.action == ACTION_CREATE
507c35b036cb0de801a093df62da92c4a94399c26cBen Lin                || mState.action == ACTION_OPEN_TREE
517c35b036cb0de801a093df62da92c4a94399c26cBen Lin                || mState.action == ACTION_PICK_COPY_DESTINATION;
52ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    }
537c35b036cb0de801a093df62da92c4a94399c26cBen Lin
54ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    @Override
55e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay    public void updateOptionMenu(Menu menu) {
56e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        super.updateOptionMenu(menu);
57e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        if (picking()) {
587c35b036cb0de801a093df62da92c4a94399c26cBen Lin            // May already be hidden because the root
597c35b036cb0de801a093df62da92c4a94399c26cBen Lin            // doesn't support search.
609e047855cfd82fbac8ef07a93be27ab55cd8b4e8Tomasz Mikolajewski            mSearchManager.showMenu(null);
617c35b036cb0de801a093df62da92c4a94399c26cBen Lin        }
62ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    }
637c35b036cb0de801a093df62da92c4a94399c26cBen Lin
64ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    @Override
65e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay    protected void updateModePicker(MenuItem grid, MenuItem list) {
6625679910d49d20d926f44a5baf73e9dfa7f274d3Ben Lin        // No display options in recent directories
67e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        if (picking() && mDirDetails.isInRecents()) {
687c35b036cb0de801a093df62da92c4a94399c26cBen Lin            grid.setVisible(false);
697c35b036cb0de801a093df62da92c4a94399c26cBen Lin            list.setVisible(false);
7025679910d49d20d926f44a5baf73e9dfa7f274d3Ben Lin        } else {
71e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay            super.updateModePicker(grid, list);
727c35b036cb0de801a093df62da92c4a94399c26cBen Lin        }
73ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    }
747c35b036cb0de801a093df62da92c4a94399c26cBen Lin
75ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    @Override
762567603749ff84946a888ffbd698c1381b26b5b1Garfield Tan    protected void updateSelectAll(MenuItem selectAll) {
77bcc79b353628591617f7982f8173214a74d7eeecGarfield Tan        boolean enabled = mState.allowMultiple;
78bcc79b353628591617f7982f8173214a74d7eeecGarfield Tan        selectAll.setVisible(enabled);
79bcc79b353628591617f7982f8173214a74d7eeecGarfield Tan        selectAll.setEnabled(enabled);
80ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    }
81ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin
82ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    @Override
83e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay    protected void updateCreateDir(MenuItem createDir) {
84e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        createDir.setVisible(picking());
85e5d6ca2c7a32c826607d826bdc18f90ca8e8b7daSteve McKay        createDir.setEnabled(picking() && mDirDetails.canCreateDirectory());
86ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    }
87ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin
88ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    @Override
892567603749ff84946a888ffbd698c1381b26b5b1Garfield Tan    protected void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
9006c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan        updateOpen(open, selectionDetails);
9106c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan    }
9206c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan
9306c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan    @Override
942567603749ff84946a888ffbd698c1381b26b5b1Garfield Tan    protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
9506c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan        updateOpen(open, selectionDetails);
9606c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan    }
9706c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan
9806c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan    private void updateOpen(MenuItem open, SelectionDetails selectionDetails) {
99ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin        open.setVisible(mState.action == ACTION_GET_CONTENT
100ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin                || mState.action == ACTION_OPEN);
10106c4b1111ec49bb70ec6977e86322f1c8f9bbe58Garfield Tan        open.setEnabled(selectionDetails.size() > 0);
102ebf2a172b69cfa9105cb5807e7b76f58425be76cBen Lin    }
1037c35b036cb0de801a093df62da92c4a94399c26cBen Lin}
104