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

Commit dfa8572b authored by Steve McKay's avatar Steve McKay Committed by android-build-merger
Browse files

Move full delete logic into ActionHandler.

am: bd9f05aa

Change-Id: Ic3e9c2e136d0c52b439db2abdc9dd86e1ee6e3c0
parents d44aad66 bd9f05aa
Loading
Loading
Loading
Loading
+1 −3
Original line number Original line Diff line number Diff line
@@ -25,7 +25,6 @@ import android.os.Parcelable;


import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.AbstractActionHandler.CommonAddons;
import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.Lookup;
@@ -34,7 +33,6 @@ import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.base.State;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.Model;
import com.android.documentsui.files.LauncherActivity;
import com.android.documentsui.files.LauncherActivity;
import com.android.documentsui.files.OpenUriForViewTask;
import com.android.documentsui.files.OpenUriForViewTask;
import com.android.documentsui.roots.LoadRootTask;
import com.android.documentsui.roots.LoadRootTask;
@@ -153,7 +151,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
    }
    }


    @Override
    @Override
    public void deleteSelectedDocuments(Model model, ConfirmationCallback callback) {
    public void deleteSelectedDocuments() {
        throw new UnsupportedOperationException("Delete not supported!");
        throw new UnsupportedOperationException("Delete not supported!");
    }
    }


+1 −3
Original line number Original line Diff line number Diff line
@@ -22,12 +22,10 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.net.Uri;


import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.BooleanConsumer;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.DocumentStack;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.DocumentDetails;
import com.android.documentsui.dirlist.Model;


public interface ActionHandler {
public interface ActionHandler {


@@ -67,7 +65,7 @@ public interface ActionHandler {


    void showChooserForDoc(DocumentInfo doc);
    void showChooserForDoc(DocumentInfo doc);


    void deleteSelectedDocuments(Model model, ConfirmationCallback callback);
    void deleteSelectedDocuments();


    /**
    /**
     * Called when initial activity setup is complete. Implementations
     * Called when initial activity setup is complete. Implementations
+26 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.documentsui;

/**
 * Extra ActionMode functionality required by ActionHandlers.
 */
public interface ActionModeAddons {

    void finishActionMode();

    void finishOnConfirmed(int code);
}
+28 −27
Original line number Original line Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


package com.android.documentsui.dirlist;
package com.android.documentsui;


import static com.android.documentsui.base.Shared.DEBUG;
import static com.android.documentsui.base.Shared.DEBUG;


@@ -29,9 +29,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem;
import android.view.View;
import android.view.View;


import com.android.documentsui.MenuManager;
import com.android.documentsui.MenuManager.SelectionDetails;
import com.android.documentsui.MenuManager.SelectionDetails;
import com.android.documentsui.R;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.ConfirmationCallback;
import com.android.documentsui.base.ConfirmationCallback.Result;
import com.android.documentsui.base.ConfirmationCallback.Result;
import com.android.documentsui.base.EventHandler;
import com.android.documentsui.base.EventHandler;
@@ -46,7 +44,8 @@ import java.util.function.IntConsumer;
/**
/**
 * A controller that listens to selection changes and manages life cycles of action modes.
 * A controller that listens to selection changes and manages life cycles of action modes.
 */
 */
public class ActionModeController implements SelectionManager.Callback, ActionMode.Callback {
public class ActionModeController
        implements SelectionManager.Callback, ActionMode.Callback, ActionModeAddons {


    private static final String TAG = "ActionModeController";
    private static final String TAG = "ActionModeController";


@@ -55,7 +54,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
    private final MenuManager mMenuManager;
    private final MenuManager mMenuManager;
    private final MessageBuilder mMessages;
    private final MessageBuilder mMessages;


    private final Config mConfig = new Config();
    private final ContentScope mScope = new ContentScope();
    private final Selection mSelected = new Selection();
    private final Selection mSelected = new Selection();


    private @Nullable ActionMode mActionMode;
    private @Nullable ActionMode mActionMode;
@@ -80,7 +79,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
            if (mActionMode == null) {
            if (mActionMode == null) {
                if (DEBUG) Log.d(TAG, "Starting action mode.");
                if (DEBUG) Log.d(TAG, "Starting action mode.");
                mActionMode = mActivity.startActionMode(this);
                mActionMode = mActivity.startActionMode(this);
                mConfig.hapticPerformer.accept(HapticFeedbackConstants.LONG_PRESS);
                mScope.hapticPerformer.accept(HapticFeedbackConstants.LONG_PRESS);
            }
            }
            updateActionMenu();
            updateActionMenu();
        } else {
        } else {
@@ -95,7 +94,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
            final String title = mMessages.getQuantityString(
            final String title = mMessages.getQuantityString(
                    R.plurals.elements_selected, mSelected.size());
                    R.plurals.elements_selected, mSelected.size());
            mActionMode.setTitle(title);
            mActionMode.setTitle(title);
            mConfig.accessibilityAnnouncer.accept(title);
            mScope.accessibilityAnnouncer.accept(title);
        }
        }
    }
    }


@@ -120,16 +119,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
            final String title = mMessages.getQuantityString(
            final String title = mMessages.getQuantityString(
                    R.plurals.elements_selected, mSelected.size());
                    R.plurals.elements_selected, mSelected.size());
            mActionMode.setTitle(title);
            mActionMode.setTitle(title);
            mConfig.accessibilityAnnouncer.accept(title);
            mScope.accessibilityAnnouncer.accept(title);
        }
    }

    void finishActionMode() {
        if (mActionMode != null) {
            mActionMode.finish();
            mActionMode = null;
        } else {
            Log.w(TAG, "Tried to finish a null action mode.");
        }
        }
    }
    }


@@ -151,7 +141,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
        mSelected.clear();
        mSelected.clear();


        // Re-enable TalkBack for the toolbars, as they are no longer covered by action mode.
        // Re-enable TalkBack for the toolbars, as they are no longer covered by action mode.
        mConfig.accessibilityImportanceSetter.setAccessibilityImportance(
        mScope.accessibilityImportanceSetter.setAccessibilityImportance(
                View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, R.id.toolbar, R.id.roots_toolbar);
                View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, R.id.toolbar, R.id.roots_toolbar);
    }
    }


@@ -165,7 +155,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo


            // Hide the toolbars if action mode is enabled, so TalkBack doesn't navigate to
            // Hide the toolbars if action mode is enabled, so TalkBack doesn't navigate to
            // these controls when using linear navigation.
            // these controls when using linear navigation.
            mConfig.accessibilityImportanceSetter.setAccessibilityImportance(
            mScope.accessibilityImportanceSetter.setAccessibilityImportance(
                    View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
                    View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
                    R.id.toolbar,
                    R.id.toolbar,
                    R.id.roots_toolbar);
                    R.id.roots_toolbar);
@@ -184,13 +174,13 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo


    private void updateActionMenu() {
    private void updateActionMenu() {
        assert(mMenu != null);
        assert(mMenu != null);
        mMenuManager.updateActionMenu(mMenu, mConfig.selectionDetails);
        mMenuManager.updateActionMenu(mMenu, mScope.selectionDetails);
        Menus.disableHiddenItems(mMenu);
        Menus.disableHiddenItems(mMenu);
    }
    }


    @Override
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        return mConfig.menuItemClicker.accept(item);
        return mScope.menuItemClicker.accept(item);
    }
    }


    private static void setImportantForAccessibility(
    private static void setImportantForAccessibility(
@@ -208,6 +198,17 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
        void setAccessibilityImportance(int accessibilityImportance, @IdRes int... viewIds);
        void setAccessibilityImportance(int accessibilityImportance, @IdRes int... viewIds);
    }
    }


    @Override
    public void finishActionMode() {
        if (mActionMode != null) {
            mActionMode.finish();
            mActionMode = null;
        } else {
            Log.w(TAG, "Tried to finish a null action mode.");
        }
    }

    @Override
    public void finishOnConfirmed(@Result int code) {
    public void finishOnConfirmed(@Result int code) {
        if (code == ConfirmationCallback.CONFIRM) {
        if (code == ConfirmationCallback.CONFIRM) {
            finishActionMode();
            finishActionMode();
@@ -219,11 +220,11 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
        assert(mActionMode == null);
        assert(mActionMode == null);
        assert(mMenu == null);
        assert(mMenu == null);


        mConfig.menuItemClicker = menuItemClicker;
        mScope.menuItemClicker = menuItemClicker;
        mConfig.selectionDetails = selectionDetails;
        mScope.selectionDetails = selectionDetails;
        mConfig.hapticPerformer = view::performHapticFeedback;
        mScope.hapticPerformer = view::performHapticFeedback;
        mConfig.accessibilityAnnouncer = view::announceForAccessibility;
        mScope.accessibilityAnnouncer = view::announceForAccessibility;
        mConfig.accessibilityImportanceSetter =
        mScope.accessibilityImportanceSetter =
                (int accessibilityImportance, @IdRes int[] viewIds) -> {
                (int accessibilityImportance, @IdRes int[] viewIds) -> {
                    setImportantForAccessibility(
                    setImportantForAccessibility(
                            mActivity, accessibilityImportance, viewIds);
                            mActivity, accessibilityImportance, viewIds);
@@ -232,7 +233,7 @@ public class ActionModeController implements SelectionManager.Callback, ActionMo
        return this;
        return this;
    }
    }


    private static final class Config {
    private static final class ContentScope {
        private EventHandler<MenuItem> menuItemClicker;
        private EventHandler<MenuItem> menuItemClicker;
        private SelectionDetails selectionDetails;
        private SelectionDetails selectionDetails;
        private IntConsumer hapticPerformer;
        private IntConsumer hapticPerformer;
+0 −1
Original line number Original line Diff line number Diff line
@@ -64,7 +64,6 @@ import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.base.State;
import com.android.documentsui.base.State.ViewMode;
import com.android.documentsui.base.State.ViewMode;
import com.android.documentsui.dirlist.ActionModeController;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.AnimationView;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.dirlist.DocumentsAdapter;
import com.android.documentsui.dirlist.DocumentsAdapter;
Loading