blob: bc98662dce441b2d1e7818ddc5a01320bfac41d9 [file] [log] [blame]
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +09001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.documentsui;
18
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090019import android.app.Dialog;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090020import android.content.DialogInterface;
Steve McKay99f1dc32016-12-29 16:02:01 -080021import android.net.Uri;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090022import android.os.Bundle;
Tony Huang03ef7412019-05-03 19:18:02 +080023import android.text.Html;
24
25import androidx.annotation.IntDef;
Tony Huang8d8d92f2018-09-13 14:41:16 +080026import androidx.fragment.app.DialogFragment;
27import androidx.fragment.app.FragmentManager;
28import androidx.fragment.app.FragmentTransaction;
29
Steve McKayd0805062016-09-15 14:30:38 -070030import com.android.documentsui.base.DocumentInfo;
31import com.android.documentsui.base.DocumentStack;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090032import com.android.documentsui.services.FileOperationService;
Steve McKay946f5612016-02-18 16:08:36 -080033import com.android.documentsui.services.FileOperationService.OpType;
Tomasz Mikolajewski56aeb492017-01-31 16:50:57 +090034import com.android.documentsui.ui.MessageBuilder;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090035
Tony Huang03ef7412019-05-03 19:18:02 +080036import com.google.android.material.dialog.MaterialAlertDialogBuilder;
37
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090038import java.lang.annotation.Retention;
39import java.lang.annotation.RetentionPolicy;
40import java.util.ArrayList;
Tomasz Mikolajewski56aeb492017-01-31 16:50:57 +090041
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090042/**
43 * Alert dialog for operation dialogs.
44 */
45public class OperationDialogFragment extends DialogFragment {
46
47 public static final int DIALOG_TYPE_UNKNOWN = 0;
48 public static final int DIALOG_TYPE_FAILURE = 1;
49 public static final int DIALOG_TYPE_CONVERTED = 2;
50
51 @IntDef(flag = true, value = {
52 DIALOG_TYPE_UNKNOWN,
53 DIALOG_TYPE_FAILURE,
54 DIALOG_TYPE_CONVERTED
55 })
56
57 @Retention(RetentionPolicy.SOURCE)
58 public @interface DialogType {}
59
60 private static final String TAG = "OperationDialogFragment";
61
Steve McKay99f1dc32016-12-29 16:02:01 -080062 public static void show(
63 FragmentManager fm,
64 @DialogType int dialogType,
65 ArrayList<DocumentInfo> failedSrcList,
Tomasz Mikolajewskid573c7d2017-02-01 11:54:48 +090066 ArrayList<Uri> uriList,
Steve McKay99f1dc32016-12-29 16:02:01 -080067 DocumentStack dstStack,
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090068 @OpType int operationType) {
Steve McKay99f1dc32016-12-29 16:02:01 -080069
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090070 final Bundle args = new Bundle();
71 args.putInt(FileOperationService.EXTRA_DIALOG_TYPE, dialogType);
Garfield, Tan48334772016-06-28 17:17:38 -070072 args.putInt(FileOperationService.EXTRA_OPERATION_TYPE, operationType);
Steve McKay99f1dc32016-12-29 16:02:01 -080073 args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedSrcList);
Tomasz Mikolajewski56aeb492017-01-31 16:50:57 +090074 args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, uriList);
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090075
76 final FragmentTransaction ft = fm.beginTransaction();
77 final OperationDialogFragment fragment = new OperationDialogFragment();
78 fragment.setArguments(args);
79
80 ft.add(fragment, TAG);
81 ft.commitAllowingStateLoss();
82 }
83
84 @Override
85 public Dialog onCreateDialog(Bundle inState) {
86 super.onCreate(inState);
87
88 final @DialogType int dialogType =
89 getArguments().getInt(FileOperationService.EXTRA_DIALOG_TYPE);
90 final @OpType int operationType =
Garfield, Tan48334772016-06-28 17:17:38 -070091 getArguments().getInt(FileOperationService.EXTRA_OPERATION_TYPE);
Steve McKay99f1dc32016-12-29 16:02:01 -080092 final ArrayList<Uri> uriList = getArguments().getParcelableArrayList(
93 FileOperationService.EXTRA_FAILED_URIS);
94 final ArrayList<DocumentInfo> docList = getArguments().getParcelableArrayList(
95 FileOperationService.EXTRA_FAILED_DOCS);
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090096
Tony Huang03ef7412019-05-03 19:18:02 +080097 final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity());
Tomasz Mikolajewski56aeb492017-01-31 16:50:57 +090098 final String message = new MessageBuilder(getContext()).generateListMessage(
99 dialogType, operationType, docList, uriList);
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +0900100
Tomasz Mikolajewski56aeb492017-01-31 16:50:57 +0900101 builder.setMessage(Html.fromHtml(message));
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +0900102 builder.setPositiveButton(
103 R.string.close,
104 new DialogInterface.OnClickListener() {
105 @Override
106 public void onClick(DialogInterface dialog, int id) {
107 dialog.dismiss();
108 }
109 });
110
111 return builder.create();
112 }
113}