blob: 5fcbe7b96f2841e53c50e3ec8df2ac999336a695 [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
17package com.android.documentsui;
18
Steve McKay92ae43d2016-11-08 12:06:58 -080019import android.view.KeyboardShortcutGroup;
Ben Lin7c35b032016-05-31 13:24:01 -070020import android.view.Menu;
Garfield Tan239ab972016-09-16 13:33:48 -070021import android.view.MenuInflater;
Ben Linebf2a172016-06-03 13:46:52 -070022import android.view.MenuItem;
Garfield Tan239ab972016-09-16 13:33:48 -070023import android.view.View;
Ben Lin7c35b032016-05-31 13:24:01 -070024
Tony Huangfdbab1a2019-04-08 18:10:27 +080025import androidx.annotation.VisibleForTesting;
26import androidx.fragment.app.Fragment;
27
Ben Lin8e912582016-09-23 14:25:14 -070028import com.android.documentsui.base.DocumentInfo;
Steve McKayd9caa6a2016-09-15 16:36:45 -070029import com.android.documentsui.base.Menus;
Steve McKayd0805062016-09-15 14:30:38 -070030import com.android.documentsui.base.RootInfo;
Steve McKayd9caa6a2016-09-15 16:36:45 -070031import com.android.documentsui.base.State;
Garfield Tan06c4b112016-09-14 11:05:58 -070032import com.android.documentsui.dirlist.DirectoryFragment;
Steve McKay3a268232016-10-19 11:15:47 -070033import com.android.documentsui.queries.SearchViewManager;
Garfield Tanb285b402016-09-21 17:12:18 -070034import com.android.documentsui.sidebar.RootsFragment;
Ben Lin5668b862016-06-28 17:12:52 -070035
Steve McKay92ae43d2016-11-08 12:06:58 -080036import java.util.List;
37import java.util.function.IntFunction;
38
Ben Linebf2a172016-06-03 13:46:52 -070039public abstract class MenuManager {
shawnlindbfc9c22018-09-25 14:26:52 +080040 private final static String TAG = "MenuManager";
Ben Lin7c35b032016-05-31 13:24:01 -070041
Garfield Tan25676032016-09-19 13:52:35 -070042 final protected SearchViewManager mSearchManager;
Steve McKaye5d6ca22016-09-19 20:27:24 -070043 final protected State mState;
44 final protected DirectoryDetails mDirDetails;
Ben Lin25679912016-06-17 11:48:57 -070045
shawnlindbfc9c22018-09-25 14:26:52 +080046 protected Menu mOptionMenu;
47
Steve McKaye5d6ca22016-09-19 20:27:24 -070048 public MenuManager(
49 SearchViewManager searchManager,
50 State displayState,
51 DirectoryDetails dirDetails) {
Ben Lin25679912016-06-17 11:48:57 -070052 mSearchManager = searchManager;
53 mState = displayState;
Steve McKaye5d6ca22016-09-19 20:27:24 -070054 mDirDetails = dirDetails;
Ben Lin25679912016-06-17 11:48:57 -070055 }
56
Garfield Tan06c4b112016-09-14 11:05:58 -070057 /** @see ActionModeController */
Ben Linebf2a172016-06-03 13:46:52 -070058 public void updateActionMenu(Menu menu, SelectionDetails selection) {
Ben Linff7f3ae2017-04-25 16:08:52 -070059 updateOpenWith(menu.findItem(R.id.action_menu_open_with), selection);
60 updateDelete(menu.findItem(R.id.action_menu_delete), selection);
61 updateShare(menu.findItem(R.id.action_menu_share), selection);
62 updateRename(menu.findItem(R.id.action_menu_rename), selection);
Bill Linfd235cf2018-05-23 18:48:31 +080063 updateSelect(menu.findItem(R.id.action_menu_select), selection);
Ben Linff7f3ae2017-04-25 16:08:52 -070064 updateSelectAll(menu.findItem(R.id.action_menu_select_all));
65 updateMoveTo(menu.findItem(R.id.action_menu_move_to), selection);
66 updateCopyTo(menu.findItem(R.id.action_menu_copy_to), selection);
67 updateCompress(menu.findItem(R.id.action_menu_compress), selection);
68 updateExtractTo(menu.findItem(R.id.action_menu_extract_to), selection);
Steve McKay0c7ad032017-08-09 11:50:10 -070069 updateInspect(menu.findItem(R.id.action_menu_inspect), selection);
Ben Linff7f3ae2017-04-25 16:08:52 -070070 updateViewInOwner(menu.findItem(R.id.action_menu_view_in_owner), selection);
Tony Huang243cf9c2018-10-16 16:15:18 +080071 updateSort(menu.findItem(R.id.action_menu_sort));
Ben Lin7c35b032016-05-31 13:24:01 -070072
Ben Linebf2a172016-06-03 13:46:52 -070073 Menus.disableHiddenItems(menu);
74 }
Ben Lin7c35b032016-05-31 13:24:01 -070075
Garfield Tan06c4b112016-09-14 11:05:58 -070076 /** @see BaseActivity#onPrepareOptionsMenu */
Steve McKaye5d6ca22016-09-19 20:27:24 -070077 public void updateOptionMenu(Menu menu) {
shawnlindbfc9c22018-09-25 14:26:52 +080078 mOptionMenu = menu;
79 updateOptionMenu();
80 }
81
82 public void updateOptionMenu() {
83 if (mOptionMenu == null) {
84 return;
85 }
86 updateCreateDir(mOptionMenu.findItem(R.id.option_menu_create_dir));
87 updateSettings(mOptionMenu.findItem(R.id.option_menu_settings));
88 updateSelectAll(mOptionMenu.findItem(R.id.option_menu_select_all));
89 updateNewWindow(mOptionMenu.findItem(R.id.option_menu_new_window));
shawnlindbfc9c22018-09-25 14:26:52 +080090 updateAdvanced(mOptionMenu.findItem(R.id.option_menu_advanced));
91 updateDebug(mOptionMenu.findItem(R.id.option_menu_debug));
92 updateInspect(mOptionMenu.findItem(R.id.option_menu_inspect));
Tony Huang243cf9c2018-10-16 16:15:18 +080093 updateSort(mOptionMenu.findItem(R.id.option_menu_sort));
94
shawnlindbfc9c22018-09-25 14:26:52 +080095 Menus.disableHiddenItems(mOptionMenu);
shawnlin142e27b2018-10-03 16:40:24 +080096 mSearchManager.updateMenu();
Ben Linebf2a172016-06-03 13:46:52 -070097 }
Ben Lin7c35b032016-05-31 13:24:01 -070098
Tony Huangadce72b2019-01-31 15:21:55 +080099 public void updateSubMenu(Menu menu) {
100 updateModePicker(menu.findItem(R.id.sub_menu_grid), menu.findItem(R.id.sub_menu_list));
101 }
102
Tony Huang166cd7c2019-03-11 16:31:57 +0800103 public void updateModel(Model model) {}
104
Garfield Tan06c4b112016-09-14 11:05:58 -0700105 /**
Garfield Tan239ab972016-09-16 13:33:48 -0700106 * Called when we needs {@link MenuManager} to ask Android to show context menu for us.
107 * {@link MenuManager} can choose to defeat this request.
108 *
109 * {@link #inflateContextMenuForDocs} and {@link #inflateContextMenuForContainer} are called
110 * afterwards when Android asks us to provide the content of context menus, so they're not
111 * correct locations to suppress context menus.
112 */
113 public void showContextMenu(Fragment f, View v, float x, float y) {
114 // Pickers don't have any context menu at this moment.
115 }
116
Steve McKayc6d63242017-08-14 11:29:42 -0700117 public void inflateContextMenuForContainer(Menu menu, MenuInflater inflater) {
Garfield Tan239ab972016-09-16 13:33:48 -0700118 throw new UnsupportedOperationException("Pickers don't allow context menu.");
119 }
120
121 public void inflateContextMenuForDocs(
122 Menu menu, MenuInflater inflater, SelectionDetails selectionDetails) {
123 throw new UnsupportedOperationException("Pickers don't allow context menu.");
124 }
125
126 /**
Garfield Tan06c4b112016-09-14 11:05:58 -0700127 * @see DirectoryFragment#onCreateContextMenu
Ben Linb2dfa122016-08-11 17:42:57 -0700128 *
Garfield Tan06c4b112016-09-14 11:05:58 -0700129 * Called when user tries to generate a context menu anchored to a file when the selection
130 * doesn't contain any folder.
131 *
132 * @param selectionDetails
133 * containsFiles may return false because this may be called when user right clicks on an
134 * unselectable item in pickers
135 */
Garfield Tan239ab972016-09-16 13:33:48 -0700136 @VisibleForTesting
Garfield Tan25676032016-09-19 13:52:35 -0700137 public void updateContextMenuForFiles(Menu menu, SelectionDetails selectionDetails) {
Steve McKay0c7ad032017-08-09 11:50:10 -0700138 assert selectionDetails != null;
Garfield Tan06c4b112016-09-14 11:05:58 -0700139
Ben Linff7f3ae2017-04-25 16:08:52 -0700140 MenuItem share = menu.findItem(R.id.dir_menu_share);
141 MenuItem open = menu.findItem(R.id.dir_menu_open);
142 MenuItem openWith = menu.findItem(R.id.dir_menu_open_with);
143 MenuItem rename = menu.findItem(R.id.dir_menu_rename);
144 MenuItem viewInOwner = menu.findItem(R.id.dir_menu_view_in_owner);
Garfield Tan06c4b112016-09-14 11:05:58 -0700145
146 updateShare(share, selectionDetails);
147 updateOpenInContextMenu(open, selectionDetails);
148 updateOpenWith(openWith, selectionDetails);
149 updateRename(rename, selectionDetails);
Jon Mann253a9922017-03-21 18:53:27 -0700150 updateViewInOwner(viewInOwner, selectionDetails);
Garfield Tan06c4b112016-09-14 11:05:58 -0700151
152 updateContextMenu(menu, selectionDetails);
153 }
154
155 /**
156 * @see DirectoryFragment#onCreateContextMenu
157 *
158 * Called when user tries to generate a context menu anchored to a folder when the selection
159 * doesn't contain any file.
160 *
161 * @param selectionDetails
162 * containDirectories may return false because this may be called when user right clicks on
163 * an unselectable item in pickers
164 */
Garfield Tan239ab972016-09-16 13:33:48 -0700165 @VisibleForTesting
Garfield Tan25676032016-09-19 13:52:35 -0700166 public void updateContextMenuForDirs(Menu menu, SelectionDetails selectionDetails) {
Steve McKay0c7ad032017-08-09 11:50:10 -0700167 assert selectionDetails != null;
Garfield Tan06c4b112016-09-14 11:05:58 -0700168
Ben Linff7f3ae2017-04-25 16:08:52 -0700169 MenuItem openInNewWindow = menu.findItem(R.id.dir_menu_open_in_new_window);
170 MenuItem rename = menu.findItem(R.id.dir_menu_rename);
171 MenuItem pasteInto = menu.findItem(R.id.dir_menu_paste_into_folder);
Garfield Tan06c4b112016-09-14 11:05:58 -0700172
173 updateOpenInNewWindow(openInNewWindow, selectionDetails);
174 updateRename(rename, selectionDetails);
175 updatePasteInto(pasteInto, selectionDetails);
176
177 updateContextMenu(menu, selectionDetails);
178 }
179
180 /**
181 * @see DirectoryFragment#onCreateContextMenu
182 *
183 * Update shared context menu items of both files and folders context menus.
184 */
Garfield Tan239ab972016-09-16 13:33:48 -0700185 @VisibleForTesting
Garfield Tan25676032016-09-19 13:52:35 -0700186 public void updateContextMenu(Menu menu, SelectionDetails selectionDetails) {
Steve McKay0c7ad032017-08-09 11:50:10 -0700187 assert selectionDetails != null;
Ben Linb2dfa122016-08-11 17:42:57 -0700188
Ben Linff7f3ae2017-04-25 16:08:52 -0700189 MenuItem cut = menu.findItem(R.id.dir_menu_cut_to_clipboard);
190 MenuItem copy = menu.findItem(R.id.dir_menu_copy_to_clipboard);
191 MenuItem delete = menu.findItem(R.id.dir_menu_delete);
Steve McKay0c7ad032017-08-09 11:50:10 -0700192 MenuItem inspect = menu.findItem(R.id.dir_menu_inspect);
Ben Linb2dfa122016-08-11 17:42:57 -0700193
Garfield Tan06c4b112016-09-14 11:05:58 -0700194 final boolean canCopy =
195 selectionDetails.size() > 0 && !selectionDetails.containsPartialFiles();
196 final boolean canDelete = selectionDetails.canDelete();
197 cut.setEnabled(canCopy && canDelete);
198 copy.setEnabled(canCopy);
199 delete.setEnabled(canDelete);
Steve McKay0c7ad032017-08-09 11:50:10 -0700200
201 inspect.setEnabled(selectionDetails.size() == 1);
Ben Linb2dfa122016-08-11 17:42:57 -0700202 }
203
Garfield Tan06c4b112016-09-14 11:05:58 -0700204 /**
205 * @see DirectoryFragment#onCreateContextMenu
Ben Linb2dfa122016-08-11 17:42:57 -0700206 *
207 * Called when user tries to generate a context menu anchored to an empty pane.
Garfield Tan06c4b112016-09-14 11:05:58 -0700208 */
Garfield Tan239ab972016-09-16 13:33:48 -0700209 @VisibleForTesting
Steve McKayc6d63242017-08-14 11:29:42 -0700210 public void updateContextMenuForContainer(Menu menu) {
Ben Linff7f3ae2017-04-25 16:08:52 -0700211 MenuItem paste = menu.findItem(R.id.dir_menu_paste_from_clipboard);
212 MenuItem selectAll = menu.findItem(R.id.dir_menu_select_all);
213 MenuItem createDir = menu.findItem(R.id.dir_menu_create_dir);
Steve McKay0c7ad032017-08-09 11:50:10 -0700214 MenuItem inspect = menu.findItem(R.id.dir_menu_inspect);
Ben Lin7c35b032016-05-31 13:24:01 -0700215
Steve McKaye5d6ca22016-09-19 20:27:24 -0700216 paste.setEnabled(mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc());
Garfield Tan06c4b112016-09-14 11:05:58 -0700217 updateSelectAll(selectAll);
Garfield Tand3307272016-10-10 13:33:25 -0700218 updateCreateDir(createDir);
Steve McKayc6d63242017-08-14 11:29:42 -0700219 updateInspect(inspect);
Ben Linebf2a172016-06-03 13:46:52 -0700220 }
Ben Lin7c35b032016-05-31 13:24:01 -0700221
Garfield Tan06c4b112016-09-14 11:05:58 -0700222 /**
223 * @see RootsFragment#onCreateContextMenu
224 */
Ben Lin8e912582016-09-23 14:25:14 -0700225 public void updateRootContextMenu(Menu menu, RootInfo root, DocumentInfo docInfo) {
Ben Linff7f3ae2017-04-25 16:08:52 -0700226 MenuItem eject = menu.findItem(R.id.root_menu_eject_root);
227 MenuItem pasteInto = menu.findItem(R.id.root_menu_paste_into_folder);
228 MenuItem openInNewWindow = menu.findItem(R.id.root_menu_open_in_new_window);
229 MenuItem settings = menu.findItem(R.id.root_menu_settings);
Ben Lin5668b862016-06-28 17:12:52 -0700230
Ben Lin5668b862016-06-28 17:12:52 -0700231 updateEject(eject, root);
Ben Lin8e912582016-09-23 14:25:14 -0700232 updatePasteInto(pasteInto, root, docInfo);
Garfield Tanb285b402016-09-21 17:12:18 -0700233 updateOpenInNewWindow(openInNewWindow, root);
234 updateSettings(settings, root);
Ben Lin5668b862016-06-28 17:12:52 -0700235 }
236
Steve McKay92ae43d2016-11-08 12:06:58 -0800237 public abstract void updateKeyboardShortcutsMenu(
238 List<KeyboardShortcutGroup> data, IntFunction<String> stringSupplier);
239
Steve McKaye5d6ca22016-09-19 20:27:24 -0700240 protected void updateModePicker(MenuItem grid, MenuItem list) {
Ben Lin25679912016-06-17 11:48:57 -0700241 grid.setVisible(mState.derivedMode != State.MODE_GRID);
242 list.setVisible(mState.derivedMode != State.MODE_LIST);
243 }
244
Steve McKaye5d6ca22016-09-19 20:27:24 -0700245 protected void updateAdvanced(MenuItem advanced) {
Steve McKay01996bc2016-10-21 13:38:49 -0700246 advanced.setVisible(mState.showDeviceStorageOption);
247 advanced.setTitle(mState.showDeviceStorageOption && mState.showAdvanced
Ben Lin25679912016-06-17 11:48:57 -0700248 ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
249 }
250
Tony Huang243cf9c2018-10-16 16:15:18 +0800251 protected void updateSort(MenuItem sort) {
252 sort.setVisible(true);
253 }
254
Jon Manneb1d11b2017-04-01 15:36:59 -0700255 protected void updateDebug(MenuItem debug) {
256 debug.setVisible(mState.debugMode);
257 }
258
Steve McKaye5d6ca22016-09-19 20:27:24 -0700259 protected void updateSettings(MenuItem settings) {
Ben Lin25679912016-06-17 11:48:57 -0700260 settings.setVisible(false);
261 }
262
Garfield Tan25676032016-09-19 13:52:35 -0700263 protected void updateSettings(MenuItem settings, RootInfo root) {
Ben Lin5668b862016-06-28 17:12:52 -0700264 settings.setVisible(false);
265 }
266
Garfield Tan25676032016-09-19 13:52:35 -0700267 protected void updateEject(MenuItem eject, RootInfo root) {
Ben Lin5668b862016-06-28 17:12:52 -0700268 eject.setVisible(false);
269 }
270
Steve McKaye5d6ca22016-09-19 20:27:24 -0700271 protected void updateNewWindow(MenuItem newWindow) {
Ben Lin25679912016-06-17 11:48:57 -0700272 newWindow.setVisible(false);
273 }
274
Bill Linfd235cf2018-05-23 18:48:31 +0800275 protected void updateSelect(MenuItem select, SelectionDetails selectionDetails) {
276 select.setVisible(false);
277 }
278
Garfield Tan25676032016-09-19 13:52:35 -0700279 protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
Garfield Tan06c4b112016-09-14 11:05:58 -0700280 openWith.setVisible(false);
281 }
282
Garfield Tan25676032016-09-19 13:52:35 -0700283 protected void updateOpenInNewWindow(
284 MenuItem openInNewWindow, SelectionDetails selectionDetails) {
Garfield Tan06c4b112016-09-14 11:05:58 -0700285 openInNewWindow.setVisible(false);
286 }
287
Garfield Tanb285b402016-09-21 17:12:18 -0700288 protected void updateOpenInNewWindow(
289 MenuItem openInNewWindow, RootInfo root) {
290 openInNewWindow.setVisible(false);
291 }
292
Garfield Tan25676032016-09-19 13:52:35 -0700293 protected void updateShare(MenuItem share, SelectionDetails selectionDetails) {
Ben Lin25679912016-06-17 11:48:57 -0700294 share.setVisible(false);
295 }
296
Garfield Tan25676032016-09-19 13:52:35 -0700297 protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
Ben Lin25679912016-06-17 11:48:57 -0700298 delete.setVisible(false);
299 }
300
Garfield Tan25676032016-09-19 13:52:35 -0700301 protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
Ben Lin25679912016-06-17 11:48:57 -0700302 rename.setVisible(false);
303 }
304
Steve McKayefd10ac2017-07-25 13:33:57 -0700305 /**
306 * This method is called for standard activity option menu as opposed
307 * to when there is a selection.
308 */
Steve McKayc6d63242017-08-14 11:29:42 -0700309 protected void updateInspect(MenuItem inspector) {
Steve McKayefd10ac2017-07-25 13:33:57 -0700310 inspector.setVisible(false);
311 }
312
313 /**
314 * This method is called for action mode, when a selection exists.
315 */
Steve McKay0c7ad032017-08-09 11:50:10 -0700316 protected void updateInspect(MenuItem inspect, SelectionDetails selectionDetails) {
317 inspect.setVisible(false);
Dooper3975fa22017-06-02 10:32:00 -0700318 }
319
Jon Mann253a9922017-03-21 18:53:27 -0700320 protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) {
321 view.setVisible(false);
322 }
323
Garfield Tan25676032016-09-19 13:52:35 -0700324 protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
Ben Lin25679912016-06-17 11:48:57 -0700325 moveTo.setVisible(false);
326 }
327
Garfield Tan25676032016-09-19 13:52:35 -0700328 protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
Ben Lin25679912016-06-17 11:48:57 -0700329 copyTo.setVisible(false);
330 }
331
Tomasz Mikolajewski26640ab2017-02-06 10:37:59 +0900332 protected void updateCompress(MenuItem compress, SelectionDetails selectionDetails) {
333 compress.setVisible(false);
334 }
335
Tomasz Mikolajewski5a8e3782017-01-24 12:40:55 +0900336 protected void updateExtractTo(MenuItem extractTo, SelectionDetails selectionDetails) {
337 extractTo.setVisible(false);
338 }
339
Garfield Tan25676032016-09-19 13:52:35 -0700340 protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
Garfield Tan06c4b112016-09-14 11:05:58 -0700341 pasteInto.setVisible(false);
Ben Linb2dfa122016-08-11 17:42:57 -0700342 }
343
Ben Lin8e912582016-09-23 14:25:14 -0700344 protected void updatePasteInto(MenuItem pasteInto, RootInfo root, DocumentInfo docInfo) {
Garfield Tanb285b402016-09-21 17:12:18 -0700345 pasteInto.setVisible(false);
346 }
347
wilsonshih08d4d052018-05-16 14:36:56 +0800348 protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
349 open.setVisible(false);
350 }
351
Garfield Tan25676032016-09-19 13:52:35 -0700352 protected abstract void updateSelectAll(MenuItem selectAll);
Steve McKaye5d6ca22016-09-19 20:27:24 -0700353 protected abstract void updateCreateDir(MenuItem createDir);
Ben Lin7c35b032016-05-31 13:24:01 -0700354
Ben Linebf2a172016-06-03 13:46:52 -0700355 /**
356 * Access to meta data about the selection.
357 */
358 public interface SelectionDetails {
359 boolean containsDirectories();
360
Garfield Tan06c4b112016-09-14 11:05:58 -0700361 boolean containsFiles();
362
363 int size();
364
Ben Linebf2a172016-06-03 13:46:52 -0700365 boolean containsPartialFiles();
366
Ben Lin7f7ee102017-05-26 14:22:58 -0700367 boolean containsFilesInArchive();
368
Ben Linebf2a172016-06-03 13:46:52 -0700369 // TODO: Update these to express characteristics instead of answering concrete questions,
370 // since the answer to those questions is (or can be) activity specific.
371 boolean canDelete();
372
373 boolean canRename();
Ben Linb2dfa122016-08-11 17:42:57 -0700374
375 boolean canPasteInto();
Tomasz Mikolajewski5a8e3782017-01-24 12:40:55 +0900376
377 boolean canExtract();
Tomasz Mikolajewskiac3e63e2017-02-13 10:08:58 +0900378
379 boolean canOpenWith();
Jon Mann253a9922017-03-21 18:53:27 -0700380
381 boolean canViewInOwner();
Ben Linebf2a172016-06-03 13:46:52 -0700382 }
383
384 public static class DirectoryDetails {
Steve McKay92ae43d2016-11-08 12:06:58 -0800385 private final BaseActivity mActivity;
Ben Linebf2a172016-06-03 13:46:52 -0700386
Steve McKay92ae43d2016-11-08 12:06:58 -0800387 public DirectoryDetails(BaseActivity activity) {
Ben Linebf2a172016-06-03 13:46:52 -0700388 mActivity = activity;
389 }
390
Ben Linebf2a172016-06-03 13:46:52 -0700391 public boolean hasRootSettings() {
392 return mActivity.getCurrentRoot().hasSettings();
393 }
394
395 public boolean hasItemsToPaste() {
396 return false;
397 }
398
Garfield Tan06c4b112016-09-14 11:05:58 -0700399 public boolean canCreateDoc() {
400 return isInRecents() ? false : mActivity.getCurrentDirectory().isCreateSupported();
401 }
402
Ben Linebf2a172016-06-03 13:46:52 -0700403 public boolean isInRecents() {
Tony Huangfdbab1a2019-04-08 18:10:27 +0800404 return mActivity.isInRecents();
Ben Linebf2a172016-06-03 13:46:52 -0700405 }
406
407 public boolean canCreateDirectory() {
408 return mActivity.canCreateDirectory();
409 }
Takamasa Kuramitsu59710522018-06-29 18:42:21 +0900410
411 public boolean canInspectDirectory() {
Tony Huangfdbab1a2019-04-08 18:10:27 +0800412 return mActivity.canInspectDirectory() && !isInRecents();
Takamasa Kuramitsu59710522018-06-29 18:42:21 +0900413 }
Ben Linebf2a172016-06-03 13:46:52 -0700414 }
415}