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