1dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski/* 2dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * Copyright (C) 2016 The Android Open Source Project 3dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * 4dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * Licensed under the Apache License, Version 2.0 (the "License"); 5dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * you may not use this file except in compliance with the License. 6dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * You may obtain a copy of the License at 7dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * 8dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * http://www.apache.org/licenses/LICENSE-2.0 9dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * 10dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * Unless required by applicable law or agreed to in writing, software 11dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * distributed under the License is distributed on an "AS IS" BASIS, 12dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * See the License for the specific language governing permissions and 14dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * limitations under the License. 15dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski */ 16dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 17dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskipackage com.android.documentsui; 18dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 19dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.annotation.IntDef; 20dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.app.Dialog; 21dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.app.DialogFragment; 22dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.app.FragmentManager; 23dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.app.FragmentTransaction; 24dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.content.DialogInterface; 2599f1dc3da6defec0596864934bfe76adc96a1d62Steve McKayimport android.net.Uri; 26dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.os.Bundle; 2799f1dc3da6defec0596864934bfe76adc96a1d62Steve McKayimport android.support.v7.app.AlertDialog; 28dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport android.text.Html; 29dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 30d080506e3aa8547605cd4783eb660775d7d2b8eeSteve McKayimport com.android.documentsui.base.DocumentInfo; 31d080506e3aa8547605cd4783eb660775d7d2b8eeSteve McKayimport com.android.documentsui.base.DocumentStack; 32dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport com.android.documentsui.services.FileOperationService; 33946f5617db2400538df26bef185ff8484365272bSteve McKayimport com.android.documentsui.services.FileOperationService.OpType; 3456aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewskiimport com.android.documentsui.ui.MessageBuilder; 35dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 36dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport java.lang.annotation.Retention; 37dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport java.lang.annotation.RetentionPolicy; 38dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskiimport java.util.ArrayList; 3956aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewski 40dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski/** 41dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski * Alert dialog for operation dialogs. 42dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski */ 43dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewskipublic class OperationDialogFragment extends DialogFragment { 44dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 45dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski public static final int DIALOG_TYPE_UNKNOWN = 0; 46dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski public static final int DIALOG_TYPE_FAILURE = 1; 47dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski public static final int DIALOG_TYPE_CONVERTED = 2; 48dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 49dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski @IntDef(flag = true, value = { 50dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski DIALOG_TYPE_UNKNOWN, 51dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski DIALOG_TYPE_FAILURE, 52dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski DIALOG_TYPE_CONVERTED 53dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski }) 54dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 55dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski @Retention(RetentionPolicy.SOURCE) 56dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski public @interface DialogType {} 57dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 58dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski private static final String TAG = "OperationDialogFragment"; 59dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 6099f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay public static void show( 6199f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay FragmentManager fm, 6299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay @DialogType int dialogType, 6399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay ArrayList<DocumentInfo> failedSrcList, 64d573c7dbfed47170bb584f5c7245bbfe737cff75Tomasz Mikolajewski ArrayList<Uri> uriList, 6599f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay DocumentStack dstStack, 66dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski @OpType int operationType) { 6799f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay 68dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski final Bundle args = new Bundle(); 69dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski args.putInt(FileOperationService.EXTRA_DIALOG_TYPE, dialogType); 704833477d7d42fa79ee42956bae4aebad77074e4bGarfield, Tan args.putInt(FileOperationService.EXTRA_OPERATION_TYPE, operationType); 7199f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_DOCS, failedSrcList); 7256aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewski args.putParcelableArrayList(FileOperationService.EXTRA_FAILED_URIS, uriList); 73dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 74dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski final FragmentTransaction ft = fm.beginTransaction(); 75dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski final OperationDialogFragment fragment = new OperationDialogFragment(); 76dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski fragment.setArguments(args); 77dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 78dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski ft.add(fragment, TAG); 79dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski ft.commitAllowingStateLoss(); 80dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski } 81dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 82dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski @Override 83dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski public Dialog onCreateDialog(Bundle inState) { 84dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski super.onCreate(inState); 85dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 86dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski final @DialogType int dialogType = 87dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski getArguments().getInt(FileOperationService.EXTRA_DIALOG_TYPE); 88dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski final @OpType int operationType = 894833477d7d42fa79ee42956bae4aebad77074e4bGarfield, Tan getArguments().getInt(FileOperationService.EXTRA_OPERATION_TYPE); 9099f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay final ArrayList<Uri> uriList = getArguments().getParcelableArrayList( 9199f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay FileOperationService.EXTRA_FAILED_URIS); 9299f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay final ArrayList<DocumentInfo> docList = getArguments().getParcelableArrayList( 9399f1dc3da6defec0596864934bfe76adc96a1d62Steve McKay FileOperationService.EXTRA_FAILED_DOCS); 94dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 95dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 9656aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewski final String message = new MessageBuilder(getContext()).generateListMessage( 9756aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewski dialogType, operationType, docList, uriList); 9856aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewski 9956aeb4918fdd6419f71f48ac5927c4709de42d4fTomasz Mikolajewski builder.setMessage(Html.fromHtml(message)); 100dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski builder.setPositiveButton( 101dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski R.string.close, 102dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski new DialogInterface.OnClickListener() { 103dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski @Override 104dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski public void onClick(DialogInterface dialog, int id) { 105dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski dialog.dismiss(); 106dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski } 107dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski }); 108dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski 109dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski return builder.create(); 110dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski } 111dd2b31c758e8d694867af58a425180689d25ead1Tomasz Mikolajewski} 112