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

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

Merge "CopyService generalization."

parents 35e92382 14e827a9
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -92,7 +92,7 @@
        </receiver>
        </receiver>


        <service
        <service
            android:name=".CopyService"
            android:name=".services.FileOperationService"
            android:exported="false">
            android:exported="false">
        </service>
        </service>
    </application>
    </application>
+4 −3
Original line number Original line 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.DocumentInfo;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.services.FileOperationService;


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


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


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


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

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


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


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


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


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


    public static void show(FragmentManager fm, int failure,
    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.
        // TODO: Add support for other failures than copy.
        if (failure != CopyService.FAILURE_COPY) {
        if (failure != FileOperationService.FAILURE_COPY) {
            return;
            return;
        }
        }


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


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


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


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


        final StringBuilder list = new StringBuilder("<p>");
        final StringBuilder list = new StringBuilder("<p>");
        for (DocumentInfo documentInfo : mFailedSrcList) {
        for (DocumentInfo documentInfo : mFailedSrcList) {
            list.append(String.format("&#8226; %s<br>", documentInfo.displayName));
            list.append(String.format("&#8226; %s<br>", documentInfo.displayName));
        }
        }
        list.append("</p>");
        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());
        final String message = String.format(messageFormat, list.toString());


        return new AlertDialog.Builder(getActivity())
        return new AlertDialog.Builder(getActivity())
+8 −5
Original line number Original line 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.DocumentStack;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.model.RootInfo;
import com.android.documentsui.services.FileOperationService;


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


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

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


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


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

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