| /* | |
| * 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(); | |
| } | |
| } |