blob: 7b611ac5b07fc4bad3e91fcf032e6a48a069fd8b [file] [log] [blame]
Ben Lin7c35b032016-05-31 13:24:01 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Garfield Tan25676032016-09-19 13:52:35 -070017package com.android.documentsui.manager;
Ben Lin7c35b032016-05-31 13:24:01 -070018
Garfield Tan239ab972016-09-16 13:33:48 -070019import android.app.Fragment;
Ben Lin7c35b032016-05-31 13:24:01 -070020import android.view.Menu;
Garfield Tan239ab972016-09-16 13:33:48 -070021import android.view.MenuInflater;
Ben Lin7c35b032016-05-31 13:24:01 -070022import android.view.MenuItem;
Garfield Tan239ab972016-09-16 13:33:48 -070023import android.view.View;
Ben Lin7c35b032016-05-31 13:24:01 -070024
Garfield Tan25676032016-09-19 13:52:35 -070025import com.android.documentsui.R;
26import com.android.documentsui.SearchViewManager;
Steve McKayd0805062016-09-15 14:30:38 -070027import com.android.documentsui.base.RootInfo;
Steve McKayd9caa6a2016-09-15 16:36:45 -070028import com.android.documentsui.base.State;
Ben Lin25679912016-06-17 11:48:57 -070029
Garfield Tan25676032016-09-19 13:52:35 -070030public final class MenuManager extends com.android.documentsui.MenuManager {
Ben Lin7c35b032016-05-31 13:24:01 -070031
Steve McKaye5d6ca22016-09-19 20:27:24 -070032 public MenuManager(
33 SearchViewManager searchManager,
34 State displayState,
35 DirectoryDetails dirDetails) {
36 super(searchManager, displayState, dirDetails);
Ben Lin7c35b032016-05-31 13:24:01 -070037 }
38
39 @Override
Steve McKaye5d6ca22016-09-19 20:27:24 -070040 public void updateOptionMenu(Menu menu) {
41 super.updateOptionMenu(menu);
Ben Lin7c35b032016-05-31 13:24:01 -070042
43 // It hides icon if searching in progress
44 mSearchManager.updateMenu();
45 }
46
Ben Linebf2a172016-06-03 13:46:52 -070047 @Override
Garfield Tan239ab972016-09-16 13:33:48 -070048 public void showContextMenu(Fragment f, View v, float x, float y) {
49 // Register context menu here so long-press doesn't trigger this context floating menu.
50 f.registerForContextMenu(v);
51 v.showContextMenu(x, y);
52 f.unregisterForContextMenu(v);
53 }
54
55 @Override
Steve McKaye5d6ca22016-09-19 20:27:24 -070056 public void inflateContextMenuForContainer(Menu menu, MenuInflater inflater) {
Garfield Tan239ab972016-09-16 13:33:48 -070057 inflater.inflate(R.menu.container_context_menu, menu);
Steve McKaye5d6ca22016-09-19 20:27:24 -070058 updateContextMenuForContainer(menu);
Garfield Tan239ab972016-09-16 13:33:48 -070059 }
60
61 @Override
62 public void inflateContextMenuForDocs(
63 Menu menu, MenuInflater inflater, SelectionDetails selectionDetails) {
64 final boolean hasDir = selectionDetails.containsDirectories();
65 final boolean hasFile = selectionDetails.containsFiles();
66
67 assert(hasDir || hasFile);
68 if (!hasDir) {
69 inflater.inflate(R.menu.file_context_menu, menu);
70 updateContextMenuForFiles(menu, selectionDetails);
71 return;
72 }
73
74 if (!hasFile) {
75 inflater.inflate(R.menu.dir_context_menu, menu);
76 updateContextMenuForDirs(menu, selectionDetails);
77 return;
78 }
79
80 inflater.inflate(R.menu.mixed_context_menu, menu);
81 updateContextMenu(menu, selectionDetails);
82 }
83
84 @Override
Garfield Tan25676032016-09-19 13:52:35 -070085 protected void updateSettings(MenuItem settings, RootInfo root) {
Ben Lin5668b862016-06-28 17:12:52 -070086 settings.setVisible(true);
87 settings.setEnabled(root.hasSettings());
88 }
89
90 @Override
Garfield Tan25676032016-09-19 13:52:35 -070091 protected void updateEject(MenuItem eject, RootInfo root) {
Ben Lin5668b862016-06-28 17:12:52 -070092 eject.setVisible(true);
Ben Lin821727a2016-07-08 10:49:53 -070093 eject.setEnabled(root.supportsEject() && !root.ejecting);
Ben Lin5668b862016-06-28 17:12:52 -070094 }
95
96 @Override
Steve McKaye5d6ca22016-09-19 20:27:24 -070097 protected void updateSettings(MenuItem settings) {
98 settings.setVisible(mDirDetails.hasRootSettings());
Ben Linebf2a172016-06-03 13:46:52 -070099 }
100
101 @Override
Steve McKaye5d6ca22016-09-19 20:27:24 -0700102 protected void updateNewWindow(MenuItem newWindow) {
103 newWindow.setVisible(mDirDetails.shouldShowFancyFeatures());
Ben Linebf2a172016-06-03 13:46:52 -0700104 }
105
106 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700107 protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
Garfield Tan06c4b112016-09-14 11:05:58 -0700108 open.setEnabled(selectionDetails.size() == 1
109 && !selectionDetails.containsPartialFiles());
110 }
111
112 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700113 protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
Garfield Tan06c4b112016-09-14 11:05:58 -0700114 openWith.setEnabled(selectionDetails.size() == 1
115 && !selectionDetails.containsPartialFiles());
116 }
117
118 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700119 protected void updateOpenInNewWindow(
120 MenuItem openInNewWindow, SelectionDetails selectionDetails) {
Garfield Tan06c4b112016-09-14 11:05:58 -0700121 openInNewWindow.setEnabled(selectionDetails.size() == 1
122 && !selectionDetails.containsPartialFiles());
123 }
124
125 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700126 protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
Ben Linebf2a172016-06-03 13:46:52 -0700127 moveTo.setVisible(true);
128 moveTo.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canDelete());
129 }
130
131 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700132 protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
Ben Linebf2a172016-06-03 13:46:52 -0700133 copyTo.setVisible(true);
134 copyTo.setEnabled(!selectionDetails.containsPartialFiles());
135 }
136
137 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700138 protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
Ben Linb2dfa122016-08-11 17:42:57 -0700139 pasteInto.setEnabled(selectionDetails.canPasteInto());
140 }
141
142 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700143 protected void updateSelectAll(MenuItem selectAll) {
Ben Lin25679912016-06-17 11:48:57 -0700144 selectAll.setVisible(true);
Ben Linebf2a172016-06-03 13:46:52 -0700145 }
146
147 @Override
Steve McKaye5d6ca22016-09-19 20:27:24 -0700148 protected void updateCreateDir(MenuItem createDir) {
Ben Linebf2a172016-06-03 13:46:52 -0700149 createDir.setVisible(true);
Steve McKaye5d6ca22016-09-19 20:27:24 -0700150 createDir.setEnabled(mDirDetails.canCreateDirectory());
Ben Linebf2a172016-06-03 13:46:52 -0700151 }
152
153 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700154 protected void updateShare(MenuItem share, SelectionDetails selectionDetails) {
Ben Linebf2a172016-06-03 13:46:52 -0700155 share.setVisible(!selectionDetails.containsDirectories()
156 && !selectionDetails.containsPartialFiles());
157 }
158
159 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700160 protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
Ben Linebf2a172016-06-03 13:46:52 -0700161 delete.setVisible(selectionDetails.canDelete());
162 }
163
164 @Override
Garfield Tan25676032016-09-19 13:52:35 -0700165 protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
Ben Linebf2a172016-06-03 13:46:52 -0700166 rename.setVisible(true);
167 rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename());
168 }
Steve McKaye5d6ca22016-09-19 20:27:24 -0700169}