• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  *      Copyright (C) 2012 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 
18 package com.android.mail.browse;
19 
20 import android.app.AlertDialog;
21 import android.app.Dialog;
22 import android.app.DialogFragment;
23 import android.app.FragmentManager;
24 import android.content.DialogInterface;
25 import android.os.Bundle;
26 
27 import com.android.mail.R;
28 import com.android.mail.ui.ControllableActivity;
29 import com.android.mail.ui.ConversationUpdater;
30 
31 /**
32  * A dialog which is also a fragment. This dialog shows a message, two buttons (ok/cancel), and runs
33  * a listener only for the positive action (ok). Since this is a fragment, it is created
34  * automatically over orientation changes. To make a listener that works with this dialog, create a
35  * listener with {@link ConversationUpdater#makeDialogListener(int, boolean)}, which correctly
36  * handles activity life-cycle events.
37  */
38 public class ConfirmDialogFragment extends DialogFragment {
39     /** Tag for saving the message shown in the dialog. */
40     private static final String MESSAGE_KEY = "message";
41     /** Tag for the dialog in the fragment manager. */
42     private static final String DIALOG_TAG = "confirm-dialog";
43 
44     /**
45      * Since the fragment can be easily destroyed, get the listener from the central activity
46      * immediately after the positive button ("OK" in English) is clicked.  We cannot get the
47      * listener in {@link #onActivityCreated(Bundle)} because the controller has not had a chance
48      * to create the listener yet.
49      */
50     private final AlertDialog.OnClickListener POSITIVE_ACTION = new AlertDialog.OnClickListener() {
51         @Override
52         public void onClick(DialogInterface arg0, int arg1) {
53             // Casting to ControllableActivity will crash if it fails. This is the expected
54             // behavior, since the cast should always succeed. Cast failures only occur during
55             // development.
56             final AlertDialog.OnClickListener listener =
57                     ((ControllableActivity) getActivity()).getConversationUpdater().getListener();
58             if (listener != null) {
59                 listener.onClick(arg0, arg1);
60             }
61         }
62     };
63 
64     /**
65      * Needs a public empty constructor for instantiation on orientation changes.
66      */
ConfirmDialogFragment()67     public ConfirmDialogFragment() {}
68 
69     /**
70      * Create a new {@link ConfirmDialogFragment}.
71      * @param message
72      * @return new {@link ConfirmDialogFragment} object.
73      */
newInstance(CharSequence message)74     public static ConfirmDialogFragment newInstance(CharSequence message) {
75         final ConfirmDialogFragment f = new ConfirmDialogFragment();
76         final Bundle args = new Bundle();
77         args.putCharSequence(MESSAGE_KEY, message);
78         f.setArguments(args);
79         return f;
80     }
81 
82     @Override
onCreateDialog(Bundle savedState)83     public Dialog onCreateDialog(Bundle savedState) {
84         final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
85         final CharSequence message = (getArguments()).getCharSequence(MESSAGE_KEY);
86         builder.setMessage(message)
87                .setPositiveButton(R.string.ok, POSITIVE_ACTION)
88                .setNegativeButton(R.string.cancel, null);
89         return builder.create();
90     }
91 
92     /**
93      * Display this dialog with the provided fragment manager
94      * @param manager
95      */
displayDialog(FragmentManager manager)96     public final void displayDialog (FragmentManager manager) {
97         show(manager, DIALOG_TAG);
98     }
99 }
100