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

Commit 25676037 authored by Garfield Tan's avatar Garfield Tan
Browse files

Move menu managers to respective packages.

Also add some unit tests to cover mixed docs in context menus.

Change-Id: I764383daed21afa5e355d85f807ad4ef1710593e
parent e5edf047
Loading
Loading
Loading
Loading
+27 −24
Original line number Diff line number Diff line
@@ -31,8 +31,8 @@ import com.android.internal.annotations.VisibleForTesting;

public abstract class MenuManager {

    final State mState;
    final SearchViewManager mSearchManager;
    final protected State mState;
    final protected SearchViewManager mSearchManager;

    public MenuManager(SearchViewManager searchManager, State displayState) {
        mSearchManager = searchManager;
@@ -98,7 +98,7 @@ public abstract class MenuManager {
     *      unselectable item in pickers
     */
    @VisibleForTesting
    void updateContextMenuForFiles(Menu menu, SelectionDetails selectionDetails) {
    public void updateContextMenuForFiles(Menu menu, SelectionDetails selectionDetails) {
        assert(selectionDetails != null);

        MenuItem share = menu.findItem(R.id.menu_share);
@@ -125,7 +125,7 @@ public abstract class MenuManager {
     *      an unselectable item in pickers
     */
    @VisibleForTesting
    void updateContextMenuForDirs(Menu menu, SelectionDetails selectionDetails) {
    public void updateContextMenuForDirs(Menu menu, SelectionDetails selectionDetails) {
        assert(selectionDetails != null);

        MenuItem openInNewWindow = menu.findItem(R.id.menu_open_in_new_window);
@@ -145,7 +145,7 @@ public abstract class MenuManager {
     * Update shared context menu items of both files and folders context menus.
     */
    @VisibleForTesting
    void updateContextMenu(Menu menu, SelectionDetails selectionDetails) {
    public void updateContextMenu(Menu menu, SelectionDetails selectionDetails) {
        assert(selectionDetails != null);

        MenuItem cut = menu.findItem(R.id.menu_cut_to_clipboard);
@@ -166,7 +166,7 @@ public abstract class MenuManager {
     * Called when user tries to generate a context menu anchored to an empty pane.
     */
    @VisibleForTesting
    void updateContextMenuForContainer(Menu menu, DirectoryDetails directoryDetails) {
    public void updateContextMenuForContainer(Menu menu, DirectoryDetails directoryDetails) {
        MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
        MenuItem selectAll = menu.findItem(R.id.menu_select_all);

@@ -185,72 +185,75 @@ public abstract class MenuManager {
        updateEject(eject, root);
    }

    void updateModePicker(MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
    protected void updateModePicker(
            MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
        grid.setVisible(mState.derivedMode != State.MODE_GRID);
        list.setVisible(mState.derivedMode != State.MODE_LIST);
    }

    void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
    protected void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
        advanced.setVisible(mState.showAdvancedOption);
        advanced.setTitle(mState.showAdvancedOption && mState.showAdvanced
                ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
    }

    void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
    protected void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
        settings.setVisible(false);
    }

    void updateSettings(MenuItem settings, RootInfo root) {
    protected void updateSettings(MenuItem settings, RootInfo root) {
        settings.setVisible(false);
    }

    void updateEject(MenuItem eject, RootInfo root) {
    protected void updateEject(MenuItem eject, RootInfo root) {
        eject.setVisible(false);
    }

    void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
    protected void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
        newWindow.setVisible(false);
    }

    void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
    protected void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
        open.setVisible(false);
    }

    void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
    protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
        openWith.setVisible(false);
    }

    void updateOpenInNewWindow(MenuItem openInNewWindow, SelectionDetails selectionDetails) {
    protected void updateOpenInNewWindow(
            MenuItem openInNewWindow, SelectionDetails selectionDetails) {
        openInNewWindow.setVisible(false);
    }

    void updateShare(MenuItem share, SelectionDetails selectionDetails) {
    protected void updateShare(MenuItem share, SelectionDetails selectionDetails) {
        share.setVisible(false);
    }

    void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
    protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
        delete.setVisible(false);
    }

    void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
    protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
        rename.setVisible(false);
    }

    void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
    protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
        moveTo.setVisible(false);
    }

    void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
    protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
        copyTo.setVisible(false);
    }

    void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
    protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
        pasteInto.setVisible(false);
    }

    abstract void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails);
    abstract void updateSelectAll(MenuItem selectAll);
    abstract void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails);
    protected abstract void updateOpenInContextMenu(
            MenuItem open, SelectionDetails selectionDetails);
    protected abstract void updateSelectAll(MenuItem selectAll);
    protected abstract void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails);

    /**
     * Access to meta data about the selection.
+1 −1
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ public class SearchViewManager implements
                && ((root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0));
    }

    protected void showMenu(boolean visible) {
    public void showMenu(boolean visible) {
        if (mMenuItem == null) {
            if (DEBUG) Log.d(TAG, "showMenu called before Search MenuItem installed.");
            return;
+2 −4
Original line number Diff line number Diff line
@@ -37,8 +37,6 @@ import android.view.MenuItem;

import com.android.documentsui.BaseActivity;
import com.android.documentsui.DocumentsApplication;
import com.android.documentsui.FilesMenuManager;
import com.android.documentsui.MenuManager;
import com.android.documentsui.MenuManager.DirectoryDetails;
import com.android.documentsui.Metrics;
import com.android.documentsui.OperationDialogFragment;
@@ -82,7 +80,7 @@ public class ManageActivity extends BaseActivity {
    // We use the time gap to figure out whether to close app or reopen the drawer.
    private long mDrawerLastFiddled;
    private DocumentClipper mClipper;
    private FilesMenuManager mMenuManager;
    private MenuManager mMenuManager;
    private DirectoryDetails mDetails;

    public ManageActivity() {
@@ -94,7 +92,7 @@ public class ManageActivity extends BaseActivity {
        super.onCreate(icicle);

        mClipper = DocumentsApplication.getDocumentClipper(this);
        mMenuManager = new FilesMenuManager(mSearchManager, getDisplayState());
        mMenuManager = new MenuManager(mSearchManager, getDisplayState());
        mDetails = new DirectoryDetails(this) {
            @Override
            public boolean hasItemsToPaste() {
+21 −18
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.documentsui;
package com.android.documentsui.manager;

import android.app.Fragment;
import android.view.Menu;
@@ -22,12 +22,14 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;

import com.android.documentsui.R;
import com.android.documentsui.SearchViewManager;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;

public final class FilesMenuManager extends MenuManager {
public final class MenuManager extends com.android.documentsui.MenuManager {

    public FilesMenuManager(SearchViewManager searchManager, State displayState) {
    public MenuManager(SearchViewManager searchManager, State displayState) {
        super(searchManager, displayState);
    }

@@ -78,86 +80,87 @@ public final class FilesMenuManager extends MenuManager {
    }

    @Override
    void updateSettings(MenuItem settings, RootInfo root) {
    protected void updateSettings(MenuItem settings, RootInfo root) {
        settings.setVisible(true);
        settings.setEnabled(root.hasSettings());
    }

    @Override
    void updateEject(MenuItem eject, RootInfo root) {
    protected void updateEject(MenuItem eject, RootInfo root) {
        eject.setVisible(true);
        eject.setEnabled(root.supportsEject() && !root.ejecting);
    }

    @Override
    void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
    protected void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
        settings.setVisible(directoryDetails.hasRootSettings());
    }

    @Override
    void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
    protected void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
        newWindow.setVisible(directoryDetails.shouldShowFancyFeatures());
    }

    @Override
    void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
    protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
        open.setEnabled(selectionDetails.size() == 1
                && !selectionDetails.containsPartialFiles());
    }

    @Override
    void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
    protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
        openWith.setEnabled(selectionDetails.size() == 1
                && !selectionDetails.containsPartialFiles());
    }

    @Override
    void updateOpenInNewWindow(MenuItem openInNewWindow, SelectionDetails selectionDetails) {
    protected void updateOpenInNewWindow(
            MenuItem openInNewWindow, SelectionDetails selectionDetails) {
        openInNewWindow.setEnabled(selectionDetails.size() == 1
            && !selectionDetails.containsPartialFiles());
    }

    @Override
    void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
    protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
        moveTo.setVisible(true);
        moveTo.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canDelete());
    }

    @Override
    void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
    protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
        copyTo.setVisible(true);
        copyTo.setEnabled(!selectionDetails.containsPartialFiles());
    }

    @Override
    void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
    protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
        pasteInto.setEnabled(selectionDetails.canPasteInto());
    }

    @Override
    void updateSelectAll(MenuItem selectAll) {
    protected void updateSelectAll(MenuItem selectAll) {
        selectAll.setVisible(true);
    }

    @Override
    void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
    protected void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
        createDir.setVisible(true);
        createDir.setEnabled(directoryDetails.canCreateDirectory());
    }

    @Override
    void updateShare(MenuItem share, SelectionDetails selectionDetails) {
    protected void updateShare(MenuItem share, SelectionDetails selectionDetails) {
        share.setVisible(!selectionDetails.containsDirectories()
                && !selectionDetails.containsPartialFiles());
    }

    @Override
    void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
    protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
        delete.setVisible(selectionDetails.canDelete());
    }

    @Override
    void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
    protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
        rename.setVisible(true);
        rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename());
    }
+10 −8
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.documentsui;
package com.android.documentsui.picker;

import static com.android.documentsui.base.State.ACTION_CREATE;
import static com.android.documentsui.base.State.ACTION_GET_CONTENT;
@@ -25,13 +25,14 @@ import static com.android.documentsui.base.State.ACTION_PICK_COPY_DESTINATION;
import android.view.Menu;
import android.view.MenuItem;

import com.android.documentsui.SearchViewManager;
import com.android.documentsui.base.State;

public final class DocumentsMenuManager extends MenuManager {
public final class MenuManager extends com.android.documentsui.MenuManager {

    private boolean mPicking;

    public DocumentsMenuManager(SearchViewManager searchManager, State displayState) {
    public MenuManager(SearchViewManager searchManager, State displayState) {
        super(searchManager, displayState);

        mPicking = mState.action == ACTION_CREATE
@@ -50,7 +51,8 @@ public final class DocumentsMenuManager extends MenuManager {
    }

    @Override
    void updateModePicker(MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
    protected void updateModePicker(
            MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
        // No display options in recent directories
        if (mPicking && directoryDetails.isInRecents()) {
            grid.setVisible(false);
@@ -61,23 +63,23 @@ public final class DocumentsMenuManager extends MenuManager {
    }

    @Override
    void updateSelectAll(MenuItem selectAll) {
    protected void updateSelectAll(MenuItem selectAll) {
        selectAll.setVisible(mState.allowMultiple);
    }

    @Override
    void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
    protected void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
        createDir.setVisible(mPicking);
        createDir.setEnabled(mPicking && directoryDetails.canCreateDirectory());
    }

    @Override
    void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
    protected void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
        updateOpen(open, selectionDetails);
    }

    @Override
    void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
    protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
        updateOpen(open, selectionDetails);
    }

Loading