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

Commit 0d83d32b authored by Tomasz Mikolajewski's avatar Tomasz Mikolajewski
Browse files

Add progress dialog for transfer operations.

Previously we'd show operations progress in the notification,
which is inconvenient and not exposed to users when the user
stays in the app.

This CL solves this issue by showing a progress bar in the
current activity. Note, that the operation will continue when
the user closes the activity. Also, the user can click on
"Continue in background" to continue working on something else
while copying/moving/compressing/etc.

Finally, it's easier for user to cancel an operation now.

Test: Tested manually.
Bug: 35072376
Change-Id: I15b4842270f12fd746adb14dd5329f305ff371e3
parent 9bd4099e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@
    <bool name="feature_content_refresh">true</bool>
    <bool name="feature_folders_in_search_results">true</bool>
    <bool name="feature_gesture_scale">true</bool>
    <bool name="feature_job_progress_dialog">false</bool>
    <bool name="feature_launch_to_document">true</bool>
    <bool name="feature_remote_actions">true</bool>
    <bool name="feature_system_keyboard_navigation">true</bool>
+7 −0
Original line number Diff line number Diff line
@@ -163,6 +163,8 @@
    <string name="copy_notification_title">Copying files</string>
    <!-- Title of the compress notification [CHAR LIMIT=24] -->
    <string name="compress_notification_title">Compressing files</string>
    <!-- Title of the extract notification [CHAR LIMIT=24] -->
    <string name="extract_notification_title">Extracting files</string>
    <!-- Title of the move notification [CHAR LIMIT=24] -->
    <string name="move_notification_title">Moving files</string>
    <!-- Title of the move notification [CHAR LIMIT=24] -->
@@ -200,6 +202,8 @@
    <string name="copy_preparing">Preparing for copy\u2026</string>
    <!-- Text shown on the notification while DocumentsUI performs setup in preparation for compressing files [CHAR LIMIT=32] -->
    <string name="compress_preparing">Preparing for compress\u2026</string>
    <!-- Text shown on the notification while DocumentsUI performs setup in preparation for extracting files [CHAR LIMIT=32] -->
    <string name="extract_preparing">Preparing for extract\u2026</string>
    <!-- Text shown on the notification while DocumentsUI performs setup in preparation for moving files [CHAR LIMIT=32] -->
    <string name="move_preparing">Preparing for move\u2026</string>
    <!-- Text shown on the notification while DocumentsUI performs setup in preparation for deleting files [CHAR LIMIT=32] -->
@@ -346,4 +350,7 @@

    <!-- Dialog text shown when confirming if they want to overwrite a file -->
    <string name="overwrite_file_confirmation_message">Overwrite <xliff:g id="name" example="foobar.txt">%1$s</xliff:g>?</string>

    <!-- Button for continuing a file operation in background, eg. copying, moving or extracting. [CHAR LIMIT=48] -->
    <string name="continue_in_background">Continue in background</string>
</resources>
+6 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ public interface Features {
    boolean isContentRefreshEnabled();
    boolean isFoldersInSearchResultsEnabled();
    boolean isGestureScaleEnabled();
    boolean isJobProgressDialogEnabled();
    boolean isLaunchToDocumentEnabled();
    boolean isRemoteActionsEnabled();
    boolean isSystemKeyboardNavigationEnabled();
@@ -102,6 +103,11 @@ public interface Features {
            return isEnabled(R.bool.feature_gesture_scale);
        }

        @Override
        public boolean isJobProgressDialogEnabled() {
            return isEnabled(R.bool.feature_job_progress_dialog);
        }

        @Override
        public boolean isLaunchToDocumentEnabled() {
            return isEnabled(R.bool.feature_launch_to_document);
+2 −2
Original line number Diff line number Diff line
@@ -282,7 +282,7 @@ final class RuntimeDocumentClipper implements DocumentClipper {
                    .withSrcs(uris)
                    .build();

            FileOperations.start(mContext, operation, callback);
            FileOperations.start(mContext, operation, callback, FileOperations.createJobId());
        } catch (IOException e) {
            Log.e(TAG, "Cannot create uris supplier.", e);
            callback.onOperationResult(FileOperations.Callback.STATUS_REJECTED, opType, 0);
+12 −4
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
@@ -459,7 +461,7 @@ public class DirectoryFragment extends Fragment
        return handleMenuItemClick(item);
    }

    private void handleCopyResult(int resultCode, Intent data) {
    private void onCopyDestinationPicked(int resultCode, Intent data) {

        FileOperation operation = mLocalState.claimPendingOperation();

@@ -471,10 +473,13 @@ public class DirectoryFragment extends Fragment
        }

        operation.setDestination(data.getParcelableExtra(Shared.EXTRA_STACK));
        final String jobId = FileOperations.createJobId();
        mInjector.dialogs.showProgressDialog(jobId, operation);
        FileOperations.start(
                mActivity,
                operation,
                mInjector.dialogs::showFileOperationStatus);
                mInjector.dialogs::showFileOperationStatus,
                jobId);
    }

    protected boolean onContextMenuClick(InputEvent e) {
@@ -767,10 +772,13 @@ public class DirectoryFragment extends Fragment

        if (destination != null) {
            operation.setDestination(destination);
            final String jobId = FileOperations.createJobId();
            mInjector.dialogs.showProgressDialog(jobId, operation);
            FileOperations.start(
                    mActivity,
                    operation,
                    mInjector.dialogs::showFileOperationStatus);
                    mInjector.dialogs::showFileOperationStatus,
                    jobId);
            return;
        }

@@ -825,7 +833,7 @@ public class DirectoryFragment extends Fragment
    public void onActivityResult(@RequestCode int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUEST_COPY_DESTINATION:
                handleCopyResult(resultCode, data);
                onCopyDestinationPicked(resultCode, data);
                break;
            default:
                throw new UnsupportedOperationException("Unknown request code: " + requestCode);
Loading