blob: c13fea0f5386ec0cd5c5c809bcb3ac3b5ed1a15d [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.annotation.IntDef;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090020import android.app.Dialog;
21import android.app.DialogFragment;
22import android.app.FragmentManager;
23import android.app.FragmentTransaction;
24import android.content.DialogInterface;
Steve McKay99f1dc32016-12-29 16:02:01 -080025import android.net.Uri;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090026import android.os.Bundle;
Steve McKay99f1dc32016-12-29 16:02:01 -080027import android.support.v7.app.AlertDialog;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090028import android.text.Html;
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 Mikolajewskic0fe4592017-01-31 16:50:57 +090034import com.android.documentsui.ui.MessageBuilder;
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090035
36import java.lang.annotation.Retention;
37import java.lang.annotation.RetentionPolicy;
38import java.util.ArrayList;
Tomasz Mikolajewskic0fe4592017-01-31 16:50:57 +090039
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090040/**
41 * Alert dialog for operation dialogs.
42 */
43public class OperationDialogFragment extends DialogFragment {
44
45 public static final int DIALOG_TYPE_UNKNOWN = 0;
46 public static final int DIALOG_TYPE_FAILURE = 1;
47 public static final int DIALOG_TYPE_CONVERTED = 2;
48
49 @IntDef(flag = true, value = {
50 DIALOG_TYPE_UNKNOWN,
51 DIALOG_TYPE_FAILURE,
52 DIALOG_TYPE_CONVERTED
53 })
54
55 @Retention(RetentionPolicy.SOURCE)
56 public @interface DialogType {}
57
58 private static final String TAG = "OperationDialogFragment";
59
Steve McKay99f1dc32016-12-29 16:02:01 -080060 public static void show(
61 FragmentManager fm,
62 @DialogType int dialogType,
63 ArrayList<DocumentInfo> failedSrcList,
Tomasz Mikolajewski664025e2017-02-01 11:54:48 +090064 ArrayList<Uri> uriList,
Steve McKay99f1dc32016-12-29 16:02:01 -080065 DocumentStack dstStack,
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090066 @OpType int operationType) {
Steve McKay99f1dc32016-12-29 16:02:01 -080067
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090068 final Bundle args = new Bundle();
69 args.putInt(FileOperationService.EXTRA_DIALOG_TYPE, dialogType);
Garfield, Tan48334772016-06-28 17:17:38 -070070 args.putInt(FileOperationService.EXTRA_OPERATION_TYPE, operationType);
Steve McKay99f1dc32016-12-29 16:02:01 -080071 args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedSrcList);
Tomasz Mikolajewskic0fe4592017-01-31 16:50:57 +090072 args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, uriList);
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090073
74 final FragmentTransaction ft = fm.beginTransaction();
75 final OperationDialogFragment fragment = new OperationDialogFragment();
76 fragment.setArguments(args);
77
78 ft.add(fragment, TAG);
79 ft.commitAllowingStateLoss();
80 }
81
82 @Override
83 public Dialog onCreateDialog(Bundle inState) {
84 super.onCreate(inState);
85
86 final @DialogType int dialogType =
87 getArguments().getInt(FileOperationService.EXTRA_DIALOG_TYPE);
88 final @OpType int operationType =
Garfield, Tan48334772016-06-28 17:17:38 -070089 getArguments().getInt(FileOperationService.EXTRA_OPERATION_TYPE);
Steve McKay99f1dc32016-12-29 16:02:01 -080090 final ArrayList<Uri> uriList = getArguments().getParcelableArrayList(
91 FileOperationService.EXTRA_FAILED_URIS);
92 final ArrayList<DocumentInfo> docList = getArguments().getParcelableArrayList(
93 FileOperationService.EXTRA_FAILED_DOCS);
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090094
95 final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Tomasz Mikolajewskic0fe4592017-01-31 16:50:57 +090096 final String message = new MessageBuilder(getContext()).generateListMessage(
97 dialogType, operationType, docList, uriList);
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +090098
Tomasz Mikolajewskic0fe4592017-01-31 16:50:57 +090099 builder.setMessage(Html.fromHtml(message));
Tomasz Mikolajewskidd2b31c2016-01-22 16:22:51 +0900100 builder.setPositiveButton(
101 R.string.close,
102 new DialogInterface.OnClickListener() {
103 @Override
104 public void onClick(DialogInterface dialog, int id) {
105 dialog.dismiss();
106 }
107 });
108
109 return builder.create();
110 }
111}