1/* 2 * Copyright (C) 2013 Google Inc. 3 * Licensed to The Android Open Source Project. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package com.android.mail.ui; 19 20import android.app.AlertDialog; 21import android.app.Dialog; 22import android.app.DialogFragment; 23import android.content.DialogInterface; 24import android.os.Bundle; 25 26import com.android.mail.R; 27import com.android.mail.providers.Folder; 28import com.android.mail.providers.UIProvider; 29 30import java.lang.ref.WeakReference; 31 32/** 33 * A confirmation dialog for emptying folders of all contents. 34 * Currently used to empty trash or spam. 35 */ 36public class EmptyFolderDialogFragment extends DialogFragment { 37 38 public interface EmptyFolderDialogFragmentListener { 39 40 /** 41 * Called when the folder is emptied by the DialogFragment. 42 */ 43 void onFolderEmptied(); 44 } 45 46 public static final String FRAGMENT_TAG = "EmptyFolderDialogFragment"; 47 48 private static final String ARG_NUM_CONVERSATIONS = "numConversations"; 49 private static final String ARG_FOLDER_TYPE = "folderType"; 50 51 private WeakReference<EmptyFolderDialogFragmentListener> mListener = null; 52 53 private int mNumConversations; 54 private int mFolderType; 55 56 // Public no-args constructor needed for fragment re-instantiation 57 public EmptyFolderDialogFragment() {} 58 59 /** 60 * Creates a new instance of {@link EmptyFolderDialogFragment}. 61 * @param numConversations The number of conversations to display in the dialog. 62 * @param folderType The type of dialog to show. The current available options are 63 * {@link com.android.mail.providers.UIProvider.FolderType#TRASH} and 64 * {@link com.android.mail.providers.UIProvider.FolderType#SPAM}. 65 * @return The newly created {@link EmptyFolderDialogFragment}. 66 */ 67 public static EmptyFolderDialogFragment newInstance( 68 final int numConversations, final int folderType) { 69 final EmptyFolderDialogFragment fragment = 70 new EmptyFolderDialogFragment(); 71 72 final Bundle args = new Bundle(2); 73 args.putInt(ARG_NUM_CONVERSATIONS, numConversations); 74 args.putInt(ARG_FOLDER_TYPE, folderType); 75 fragment.setArguments(args); 76 77 return fragment; 78 } 79 80 @Override 81 public Dialog onCreateDialog(final Bundle savedInstanceState) { 82 mNumConversations = getArguments().getInt(ARG_NUM_CONVERSATIONS); 83 mFolderType = getArguments().getInt(ARG_FOLDER_TYPE); 84 85 final String dialogMessage = getResources().getQuantityString( 86 R.plurals.empty_folder_dialog_message, mNumConversations, mNumConversations); 87 88 // Checks if we're in the spam folder, otherwise just uses trash as the default. 89 final int dialogTitleId = Folder.isType(mFolderType, UIProvider.FolderType.SPAM) ? 90 R.string.empty_spam_dialog_title : R.string.empty_trash_dialog_title; 91 92 return new AlertDialog.Builder(getActivity()).setTitle(dialogTitleId) 93 .setMessage(dialogMessage) 94 .setNegativeButton(R.string.cancel, null) 95 .setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() { 96 @Override 97 public void onClick(final DialogInterface dialog, final int whichButton) { 98 if (mListener != null) { 99 final EmptyFolderDialogFragmentListener listener = 100 mListener.get(); 101 if (listener != null) { 102 listener.onFolderEmptied(); 103 } 104 } 105 } 106 }) 107 .create(); 108 } 109 110 public void setListener(final EmptyFolderDialogFragmentListener listener) { 111 mListener = new WeakReference<EmptyFolderDialogFragmentListener>(listener); 112 } 113} 114