| /* |
| * Copyright (C) 2017 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.ui; |
| |
| import android.app.Activity; |
| import android.app.ProgressDialog; |
| import android.os.Handler; |
| import android.os.Message; |
| import android.text.format.DateUtils; |
| |
| import androidx.annotation.StringRes; |
| |
| import com.android.documentsui.R; |
| import com.android.documentsui.services.FileOperation; |
| import com.android.documentsui.services.FileOperationService; |
| import com.android.documentsui.services.FileOperations; |
| import com.android.documentsui.util.FormatUtils; |
| |
| public class OperationProgressDialog { |
| |
| private final Activity mActivity; |
| private final ProgressDialog mDialog; |
| private final String mJobId; |
| |
| private OperationProgressDialog(Activity activity, String jobId, @StringRes int titleResId, |
| @StringRes int prepareResId, final FileOperation operation) { |
| mActivity = activity; |
| mJobId = jobId; |
| mDialog = new ProgressDialog(mActivity); |
| mDialog.setTitle(mActivity.getString(titleResId)); |
| mDialog.setMessage(mActivity.getString(prepareResId)); |
| mDialog.setProgress(0); |
| mDialog.setMax(100); |
| mDialog.setIndeterminate(true); |
| mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); |
| mDialog.setCanceledOnTouchOutside(false); |
| |
| mDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, |
| activity.getString(android.R.string.cancel), |
| (dialog, button) -> { |
| FileOperations.cancel(mActivity, mJobId); |
| mDialog.dismiss(); |
| }); |
| |
| mDialog.setButton(ProgressDialog.BUTTON_NEUTRAL, |
| activity.getString(R.string.continue_in_background), |
| (dialog, button) -> mDialog.dismiss()); |
| |
| operation.addMessageListener(new Handler.Callback() { |
| @Override |
| public boolean handleMessage(Message message) { |
| switch (message.what) { |
| case FileOperationService.MESSAGE_PROGRESS: |
| mDialog.setIndeterminate(false); |
| if (message.arg1 != -1) { |
| mDialog.setProgress(message.arg1); |
| } |
| if (message.arg2 > 0) { |
| mDialog.setMessage(mActivity.getString(R.string.copy_remaining, |
| FormatUtils.formatDuration(message.arg2))); |
| } |
| return true; |
| case FileOperationService.MESSAGE_FINISH: |
| operation.removeMessageListener(this); |
| mDialog.dismiss(); |
| return true; |
| } |
| return false; |
| } |
| }); |
| } |
| |
| public static OperationProgressDialog create(Activity activity, String jobId, |
| FileOperation operation) { |
| int titleResId; |
| int prepareResId; |
| switch (operation.getOpType()) { |
| case FileOperationService.OPERATION_COPY: |
| titleResId = R.string.copy_notification_title; |
| prepareResId = R.string.copy_preparing; |
| break; |
| case FileOperationService.OPERATION_COMPRESS: |
| titleResId = R.string.compress_notification_title; |
| prepareResId = R.string.compress_preparing; |
| break; |
| case FileOperationService.OPERATION_EXTRACT: |
| titleResId = R.string.extract_notification_title; |
| prepareResId = R.string.extract_preparing; |
| break; |
| case FileOperationService.OPERATION_MOVE: |
| titleResId = R.string.move_notification_title; |
| prepareResId = R.string.move_preparing; |
| break; |
| case FileOperationService.OPERATION_DELETE: |
| // Not supported yet. Pass through to default. |
| default: |
| throw new IllegalArgumentException(); |
| } |
| return new OperationProgressDialog(activity, jobId, titleResId, prepareResId, operation); |
| } |
| |
| public void dismiss() { |
| mDialog.dismiss(); |
| } |
| |
| public void show() { |
| mDialog.show(); |
| } |
| } |