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

Commit baed9b83 authored by Steve McKay's avatar Steve McKay Committed by Android (Google) Code Review
Browse files

Merge "CopyService generalization."

parents 2806beb3 c83baa05
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@
        </receiver>

        <service
            android:name=".CopyService"
            android:name=".services.FileOperationService"
            android:exported="false">
        </service>
    </application>
+4 −3
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.documentsui.dirlist.DirectoryFragment;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.services.FileOperationService;

import java.util.Arrays;
import java.util.List;
@@ -154,8 +155,8 @@ public class DocumentsActivity extends BaseActivity {
        if (state.action == ACTION_PICK_COPY_DESTINATION) {
            state.directoryCopy = intent.getBooleanExtra(
                    Shared.EXTRA_DIRECTORY_COPY, false);
            state.transferMode = intent.getIntExtra(CopyService.EXTRA_TRANSFER_MODE,
                    CopyService.TRANSFER_MODE_COPY);
            state.transferMode = intent.getIntExtra(FileOperationService.EXTRA_OPERATION,
                    FileOperationService.OPERATION_COPY);
        }

        return state;
@@ -481,7 +482,7 @@ public class DocumentsActivity extends BaseActivity {
            // Picking a copy destination is only used internally by us, so we
            // don't need to extend permissions to the caller.
            intent.putExtra(Shared.EXTRA_STACK, (Parcelable) mState.stack);
            intent.putExtra(CopyService.EXTRA_TRANSFER_MODE, mState.transferMode);
            intent.putExtra(FileOperationService.EXTRA_OPERATION, mState.transferMode);
        } else {
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+29 −12
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.documentsui;

import static com.android.internal.util.Preconditions.checkArgument;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
@@ -27,6 +29,8 @@ import android.text.Html;

import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.services.FileOperationService;
import com.android.documentsui.services.FileOperations;

import java.util.ArrayList;

@@ -37,20 +41,20 @@ public class FailureDialogFragment extends DialogFragment
        implements DialogInterface.OnClickListener {
    private static final String TAG = "FailureDialogFragment";

    private int mTransferMode;
    private int mOperationType;
    private ArrayList<DocumentInfo> mFailedSrcList;

    public static void show(FragmentManager fm, int failure,
            ArrayList<DocumentInfo> failedSrcList, DocumentStack dstStack, int transferMode) {
            ArrayList<DocumentInfo> failedSrcList, DocumentStack dstStack, int operationType) {
        // TODO: Add support for other failures than copy.
        if (failure != CopyService.FAILURE_COPY) {
        if (failure != FileOperationService.FAILURE_COPY) {
            return;
        }

        final Bundle args = new Bundle();
        args.putInt(CopyService.EXTRA_FAILURE, failure);
        args.putInt(CopyService.EXTRA_TRANSFER_MODE, transferMode);
        args.putParcelableArrayList(CopyService.EXTRA_SRC_LIST, failedSrcList);
        args.putInt(FileOperationService.EXTRA_FAILURE, failure);
        args.putInt(FileOperationService.EXTRA_OPERATION, operationType);
        args.putParcelableArrayList(FileOperationService.EXTRA_SRC_LIST, failedSrcList);

        final FragmentTransaction ft = fm.beginTransaction();
        final FailureDialogFragment fragment = new FailureDialogFragment();
@@ -63,10 +67,12 @@ public class FailureDialogFragment extends DialogFragment
    @Override
    public void onClick(DialogInterface dialog, int whichButton) {
        if (whichButton == DialogInterface.BUTTON_POSITIVE) {
            CopyService.start(getActivity(), mFailedSrcList,
            FileOperations.start(
                    getActivity(),
                    mFailedSrcList,
                    (DocumentStack) getActivity().getIntent().getParcelableExtra(
                            Shared.EXTRA_STACK),
                            mTransferMode);
                    mOperationType);
        }
    }

@@ -74,16 +80,27 @@ public class FailureDialogFragment extends DialogFragment
    public Dialog onCreateDialog(Bundle inState) {
        super.onCreate(inState);

        mTransferMode = getArguments().getInt(CopyService.EXTRA_TRANSFER_MODE);
        mFailedSrcList = getArguments().getParcelableArrayList(CopyService.EXTRA_SRC_LIST);
        mOperationType = getArguments().getInt(FileOperationService.EXTRA_OPERATION);
        mFailedSrcList = getArguments().getParcelableArrayList(FileOperationService.EXTRA_SRC_LIST);

        final StringBuilder list = new StringBuilder("<p>");
        for (DocumentInfo documentInfo : mFailedSrcList) {
            list.append(String.format("&#8226; %s<br>", documentInfo.displayName));
        }
        list.append("</p>");
        final String messageFormat = getString(mTransferMode == CopyService.TRANSFER_MODE_COPY ?
                R.string.copy_failure_alert_content : R.string.move_failure_alert_content);

        // TODO: Add support for other file operations.
        checkArgument(
                mOperationType == FileOperationService.OPERATION_COPY
                || mOperationType == FileOperationService.OPERATION_MOVE);

        int messageId = mOperationType == FileOperationService.OPERATION_COPY
                ? R.string.copy_failure_alert_content
                : R.string.move_failure_alert_content;

        final String messageFormat = getString(
                messageId);

        final String message = String.format(messageFormat, list.toString());

        return new AlertDialog.Builder(getActivity())
+8 −5
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.services.FileOperationService;

import java.util.ArrayList;
import java.util.Arrays;
@@ -120,20 +121,22 @@ public class FilesActivity extends BaseActivity {
                    ProviderExecutor.forAuthority(homeUri.getAuthority()));
        }

        final int failure = intent.getIntExtra(CopyService.EXTRA_FAILURE, 0);
        final int transferMode = intent.getIntExtra(CopyService.EXTRA_TRANSFER_MODE,
                CopyService.TRANSFER_MODE_COPY);
        final int failure = intent.getIntExtra(FileOperationService.EXTRA_FAILURE, 0);
        final int opType = intent.getIntExtra(
                FileOperationService.EXTRA_OPERATION,
                FileOperationService.OPERATION_COPY);

        // DialogFragment takes care of restoring the dialog on configuration change.
        // Only show it manually for the first time (icicle is null).
        if (icicle == null && failure != 0) {
            final ArrayList<DocumentInfo> failedSrcList =
                    intent.getParcelableArrayListExtra(CopyService.EXTRA_SRC_LIST);
                    intent.getParcelableArrayListExtra(FileOperationService.EXTRA_SRC_LIST);
            FailureDialogFragment.show(
                    getFragmentManager(),
                    failure,
                    failedSrcList,
                    mState.stack,
                    transferMode);
                    opType);
        }
    }

+12 −0
Original line number Diff line number Diff line
@@ -20,6 +20,9 @@ import android.content.Context;
import android.text.format.DateUtils;
import android.text.format.Time;

import java.util.ArrayList;
import java.util.List;

/** @hide */
public final class Shared {
    /** Intent action name to pick a copy destination. */
@@ -64,4 +67,13 @@ public final class Shared {
        return DateUtils.formatDateTime(context, when, flags);
    }

    /**
     * A convenient way to transform any list into a (parcelable) ArrayList.
     * Uses cast if possible, else creates a new list with entries from {@code list}.
     */
    public static <T> ArrayList<T> asArrayList(List<T> list) {
        return list instanceof ArrayList
            ? (ArrayList<T>) list
            : new ArrayList<T>(list);
    }
}
Loading