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