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