• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.apis.app;
18 
19 import android.app.Activity;
20 import android.app.AlertDialog;
21 import android.app.Dialog;
22 import android.app.ProgressDialog;
23 import android.content.DialogInterface;
24 import android.os.Bundle;
25 import android.os.Handler;
26 import android.os.Message;
27 import android.view.LayoutInflater;
28 import android.view.View;
29 import android.view.View.OnClickListener;
30 import android.widget.Button;
31 import android.widget.Toast;
32 import android.database.Cursor;
33 import android.provider.ContactsContract;
34 
35 import com.example.android.apis.R;
36 
37 /**
38  * Example of how to use an {@link android.app.AlertDialog}.
39  * <h3>AlertDialogSamples</h3>
40 
41 <p>This demonstrates the different ways the AlertDialog can be used.</p>
42 
43 <h4>Demo</h4>
44 App/Dialog/Alert Dialog
45 
46 <h4>Source files</h4>
47  * <table class="LinkTable">
48  *         <tr>
49  *             <td >src/com.example.android.apis/app/AlertDialogSamples.java</td>
50  *             <td >The Alert Dialog Samples implementation</td>
51  *         </tr>
52  *         <tr>
53  *             <td >/res/any/layout/alert_dialog.xml</td>
54  *             <td >Defines contents of the screen</td>
55  *         </tr>
56  * </table>
57  */
58 public class AlertDialogSamples extends Activity {
59     private static final int DIALOG_YES_NO_MESSAGE = 1;
60     private static final int DIALOG_YES_NO_LONG_MESSAGE = 2;
61     private static final int DIALOG_LIST = 3;
62     private static final int DIALOG_PROGRESS = 4;
63     private static final int DIALOG_SINGLE_CHOICE = 5;
64     private static final int DIALOG_MULTIPLE_CHOICE = 6;
65     private static final int DIALOG_TEXT_ENTRY = 7;
66     private static final int DIALOG_MULTIPLE_CHOICE_CURSOR = 8;
67     private static final int DIALOG_YES_NO_ULTRA_LONG_MESSAGE = 9;
68     private static final int DIALOG_YES_NO_OLD_SCHOOL_MESSAGE = 10;
69     private static final int DIALOG_YES_NO_HOLO_LIGHT_MESSAGE = 11;
70     private static final int DIALOG_YES_NO_DEFAULT_LIGHT_MESSAGE = 12;
71     private static final int DIALOG_YES_NO_DEFAULT_DARK_MESSAGE = 13;
72     private static final int DIALOG_PROGRESS_SPINNER = 14;
73 
74     private static final int MAX_PROGRESS = 100;
75 
76     private ProgressDialog mProgressSpinnerDialog;
77     private ProgressDialog mProgressDialog;
78     private int mProgress;
79     private Handler mProgressHandler;
80 
81     @Override
onCreateDialog(int id)82     protected Dialog onCreateDialog(int id) {
83         switch (id) {
84         case DIALOG_YES_NO_MESSAGE:
85             return new AlertDialog.Builder(AlertDialogSamples.this)
86                 .setTitle(R.string.alert_dialog_two_buttons_title)
87                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
88                     public void onClick(DialogInterface dialog, int whichButton) {
89 
90                         /* User clicked OK so do some stuff */
91                     }
92                 })
93                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
94                     public void onClick(DialogInterface dialog, int whichButton) {
95 
96                         /* User clicked Cancel so do some stuff */
97                     }
98                 })
99                 .create();
100         case DIALOG_YES_NO_OLD_SCHOOL_MESSAGE:
101             return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_TRADITIONAL)
102                 .setIconAttribute(android.R.attr.alertDialogIcon)
103                 .setTitle(R.string.alert_dialog_two_buttons_title)
104                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
105                     public void onClick(DialogInterface dialog, int whichButton) {
106                     }
107                 })
108                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
109                     public void onClick(DialogInterface dialog, int whichButton) {
110                     }
111                 })
112                 .create();
113         case DIALOG_YES_NO_HOLO_LIGHT_MESSAGE:
114             return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_HOLO_LIGHT)
115                 .setIconAttribute(android.R.attr.alertDialogIcon)
116                 .setTitle(R.string.alert_dialog_two_buttons_title)
117                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
118                     public void onClick(DialogInterface dialog, int whichButton) {
119                     }
120                 })
121                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
122                     public void onClick(DialogInterface dialog, int whichButton) {
123                     }
124                 })
125                 .create();
126         case DIALOG_YES_NO_DEFAULT_LIGHT_MESSAGE:
127             return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)
128                 .setTitle(R.string.alert_dialog_two_buttons_title)
129                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
130                     public void onClick(DialogInterface dialog, int whichButton) {
131                     }
132                 })
133                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
134                     public void onClick(DialogInterface dialog, int whichButton) {
135                     }
136                 })
137                 .create();
138         case DIALOG_YES_NO_DEFAULT_DARK_MESSAGE:
139             return new AlertDialog.Builder(AlertDialogSamples.this, AlertDialog.THEME_DEVICE_DEFAULT_DARK)
140                 .setTitle(R.string.alert_dialog_two_buttons_title)
141                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
142                     public void onClick(DialogInterface dialog, int whichButton) {
143                     }
144                 })
145                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
146                     public void onClick(DialogInterface dialog, int whichButton) {
147                     }
148                 })
149                 .create();
150         case DIALOG_YES_NO_LONG_MESSAGE:
151             return new AlertDialog.Builder(AlertDialogSamples.this)
152                 .setTitle(R.string.alert_dialog_two_buttons_msg)
153                 .setMessage(R.string.alert_dialog_two_buttons2_msg)
154                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
155                     public void onClick(DialogInterface dialog, int whichButton) {
156 
157                         /* User clicked OK so do some stuff */
158                     }
159                 })
160                 .setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() {
161                     public void onClick(DialogInterface dialog, int whichButton) {
162 
163                         /* User clicked Something so do some stuff */
164                     }
165                 })
166                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
167                     public void onClick(DialogInterface dialog, int whichButton) {
168 
169                         /* User clicked Cancel so do some stuff */
170                     }
171                 })
172                 .create();
173         case DIALOG_YES_NO_ULTRA_LONG_MESSAGE:
174             return new AlertDialog.Builder(AlertDialogSamples.this)
175                 .setTitle(R.string.alert_dialog_two_buttons_msg)
176                 .setMessage(R.string.alert_dialog_two_buttons2ultra_msg)
177                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
178                     public void onClick(DialogInterface dialog, int whichButton) {
179 
180                         /* User clicked OK so do some stuff */
181                     }
182                 })
183                 .setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() {
184                     public void onClick(DialogInterface dialog, int whichButton) {
185 
186                         /* User clicked Something so do some stuff */
187                     }
188                 })
189                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
190                     public void onClick(DialogInterface dialog, int whichButton) {
191 
192                         /* User clicked Cancel so do some stuff */
193                     }
194                 })
195                 .create();
196         case DIALOG_LIST:
197             return new AlertDialog.Builder(AlertDialogSamples.this)
198                 .setTitle(R.string.select_dialog)
199                 .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {
200                     public void onClick(DialogInterface dialog, int which) {
201 
202                         /* User clicked so do some stuff */
203                         String[] items = getResources().getStringArray(R.array.select_dialog_items);
204                         new AlertDialog.Builder(AlertDialogSamples.this)
205                                 .setMessage("You selected: " + which + " , " + items[which])
206                                 .show();
207                     }
208                 })
209                 .create();
210         case DIALOG_PROGRESS:
211             mProgressDialog = new ProgressDialog(AlertDialogSamples.this);
212             mProgressDialog.setTitle(R.string.select_dialog);
213             mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
214             mProgressDialog.setMax(MAX_PROGRESS);
215             mProgressDialog.setButton(DialogInterface.BUTTON_POSITIVE,
216                     getText(R.string.alert_dialog_hide), new DialogInterface.OnClickListener() {
217                 public void onClick(DialogInterface dialog, int whichButton) {
218 
219                     /* User clicked Yes so do some stuff */
220                 }
221             });
222             mProgressDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
223                     getText(R.string.alert_dialog_cancel), new DialogInterface.OnClickListener() {
224                 public void onClick(DialogInterface dialog, int whichButton) {
225 
226                     /* User clicked No so do some stuff */
227                 }
228             });
229             return mProgressDialog;
230         case DIALOG_PROGRESS_SPINNER:
231             mProgressSpinnerDialog = new ProgressDialog(AlertDialogSamples.this);
232             mProgressSpinnerDialog.setTitle(R.string.select_dialog);
233             mProgressSpinnerDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
234             return mProgressSpinnerDialog;
235         case DIALOG_SINGLE_CHOICE:
236             return new AlertDialog.Builder(AlertDialogSamples.this)
237                 .setTitle(R.string.alert_dialog_single_choice)
238                 .setSingleChoiceItems(R.array.select_dialog_items2, 0, new DialogInterface.OnClickListener() {
239                     public void onClick(DialogInterface dialog, int whichButton) {
240 
241                         /* User clicked on a radio button do some stuff */
242                     }
243                 })
244                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
245                     public void onClick(DialogInterface dialog, int whichButton) {
246 
247                         /* User clicked Yes so do some stuff */
248                     }
249                 })
250                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
251                     public void onClick(DialogInterface dialog, int whichButton) {
252 
253                         /* User clicked No so do some stuff */
254                     }
255                 })
256                .create();
257         case DIALOG_MULTIPLE_CHOICE:
258             return new AlertDialog.Builder(AlertDialogSamples.this)
259                 .setTitle(R.string.alert_dialog_multi_choice)
260                 .setMultiChoiceItems(R.array.select_dialog_items3,
261                         new boolean[]{false, true, false, true, false, false, false},
262                         new DialogInterface.OnMultiChoiceClickListener() {
263                             public void onClick(DialogInterface dialog, int whichButton,
264                                     boolean isChecked) {
265 
266                                 /* User clicked on a check box do some stuff */
267                             }
268                         })
269                 .setPositiveButton(R.string.alert_dialog_ok,
270                         new DialogInterface.OnClickListener() {
271                     public void onClick(DialogInterface dialog, int whichButton) {
272 
273                         /* User clicked Yes so do some stuff */
274                     }
275                 })
276                 .setNegativeButton(R.string.alert_dialog_cancel,
277                         new DialogInterface.OnClickListener() {
278                     public void onClick(DialogInterface dialog, int whichButton) {
279 
280                         /* User clicked No so do some stuff */
281                     }
282                 })
283                .create();
284         case DIALOG_MULTIPLE_CHOICE_CURSOR:
285             String[] projection = new String[] {
286                     ContactsContract.Contacts._ID,
287                     ContactsContract.Contacts.DISPLAY_NAME,
288                     ContactsContract.Contacts.SEND_TO_VOICEMAIL
289             };
290             Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
291                     projection, null, null, null);
292             return new AlertDialog.Builder(AlertDialogSamples.this)
293                 .setTitle(R.string.alert_dialog_multi_choice_cursor)
294                 .setMultiChoiceItems(cursor,
295                         ContactsContract.Contacts.SEND_TO_VOICEMAIL,
296                         ContactsContract.Contacts.DISPLAY_NAME,
297                         new DialogInterface.OnMultiChoiceClickListener() {
298                             public void onClick(DialogInterface dialog, int whichButton,
299                                     boolean isChecked) {
300                                 Toast.makeText(AlertDialogSamples.this,
301                                         "Readonly Demo Only - Data will not be updated",
302                                         Toast.LENGTH_SHORT).show();
303                             }
304                         })
305                .create();
306         case DIALOG_TEXT_ENTRY:
307             // This example shows how to add a custom layout to an AlertDialog
308             LayoutInflater factory = LayoutInflater.from(this);
309             final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
310             return new AlertDialog.Builder(AlertDialogSamples.this)
311                 .setTitle(R.string.alert_dialog_text_entry)
312                 .setView(textEntryView)
313                 .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
314                     public void onClick(DialogInterface dialog, int whichButton) {
315 
316                         /* User clicked OK so do some stuff */
317                     }
318                 })
319                 .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
320                     public void onClick(DialogInterface dialog, int whichButton) {
321 
322                         /* User clicked cancel so do some stuff */
323                     }
324                 })
325                 .create();
326         }
327         return null;
328     }
329 
330     /**
331      * Initialization of the Activity after it is first created.  Must at least
332      * call {@link android.app.Activity#setContentView(int)} to
333      * describe what is to be displayed in the screen.
334      */
335     @Override
336 	protected void onCreate(Bundle savedInstanceState) {
337         super.onCreate(savedInstanceState);
338 
339         setContentView(R.layout.alert_dialog);
340 
341         /* Display a text message with yes/no buttons and handle each message as well as the cancel action */
342         Button twoButtonsTitle = (Button) findViewById(R.id.two_buttons);
343         twoButtonsTitle.setOnClickListener(new OnClickListener() {
344             public void onClick(View v) {
345                 showDialog(DIALOG_YES_NO_MESSAGE);
346             }
347         });
348 
349         /* Display a long text message with yes/no buttons and handle each message as well as the cancel action */
350         Button twoButtons2Title = (Button) findViewById(R.id.two_buttons2);
351         twoButtons2Title.setOnClickListener(new OnClickListener() {
352             public void onClick(View v) {
353                 showDialog(DIALOG_YES_NO_LONG_MESSAGE);
354             }
355         });
356 
357 
358         /* Display an ultra long text message with yes/no buttons and handle each message as well as the cancel action */
359         Button twoButtons2UltraTitle = (Button) findViewById(R.id.two_buttons2ultra);
360         twoButtons2UltraTitle.setOnClickListener(new OnClickListener() {
361             public void onClick(View v) {
362                 showDialog(DIALOG_YES_NO_ULTRA_LONG_MESSAGE);
363             }
364         });
365 
366 
367         /* Display a list of items */
368         Button selectButton = (Button) findViewById(R.id.select_button);
369         selectButton.setOnClickListener(new OnClickListener() {
370             public void onClick(View v) {
371                 showDialog(DIALOG_LIST);
372             }
373         });
374 
375         /* Display a custom progress bar */
376         Button progressButton = (Button) findViewById(R.id.progress_button);
377         progressButton.setOnClickListener(new OnClickListener() {
378             public void onClick(View v) {
379                 showDialog(DIALOG_PROGRESS);
380                 mProgress = 0;
381                 mProgressDialog.setProgress(0);
382                 mProgressHandler.sendEmptyMessage(0);
383             }
384         });
385 
386         /* Display a custom progress bar */
387         Button progressSpinnerButton = (Button) findViewById(R.id.progress_spinner_button);
388         progressSpinnerButton.setOnClickListener(new OnClickListener() {
389             public void onClick(View v) {
390                 showDialog(DIALOG_PROGRESS_SPINNER);
391             }
392         });
393 
394         /* Display a radio button group */
395         Button radioButton = (Button) findViewById(R.id.radio_button);
396         radioButton.setOnClickListener(new OnClickListener() {
397             public void onClick(View v) {
398                 showDialog(DIALOG_SINGLE_CHOICE);
399             }
400         });
401 
402         /* Display a list of checkboxes */
403         Button checkBox = (Button) findViewById(R.id.checkbox_button);
404         checkBox.setOnClickListener(new OnClickListener() {
405             public void onClick(View v) {
406                 showDialog(DIALOG_MULTIPLE_CHOICE);
407             }
408         });
409 
410         /* Display a list of checkboxes, backed by a cursor */
411         Button checkBox2 = (Button) findViewById(R.id.checkbox_button2);
412         checkBox2.setOnClickListener(new OnClickListener() {
413             public void onClick(View v) {
414                 showDialog(DIALOG_MULTIPLE_CHOICE_CURSOR);
415             }
416         });
417 
418         /* Display a text entry dialog */
419         Button textEntry = (Button) findViewById(R.id.text_entry_button);
420         textEntry.setOnClickListener(new OnClickListener() {
421             public void onClick(View v) {
422                 showDialog(DIALOG_TEXT_ENTRY);
423             }
424         });
425 
426         /* Two points, in the traditional theme */
427         Button twoButtonsOldSchoolTitle = (Button) findViewById(R.id.two_buttons_old_school);
428         twoButtonsOldSchoolTitle.setOnClickListener(new OnClickListener() {
429             public void onClick(View v) {
430                 showDialog(DIALOG_YES_NO_OLD_SCHOOL_MESSAGE);
431             }
432         });
433 
434         /* Two points, in the light holographic theme */
435         Button twoButtonsHoloLightTitle = (Button) findViewById(R.id.two_buttons_holo_light);
436         twoButtonsHoloLightTitle.setOnClickListener(new OnClickListener() {
437             public void onClick(View v) {
438                 showDialog(DIALOG_YES_NO_HOLO_LIGHT_MESSAGE);
439             }
440         });
441 
442         /* Two points, in the light default theme */
443         Button twoButtonsDefaultLightTitle = (Button) findViewById(R.id.two_buttons_default_light);
444         twoButtonsDefaultLightTitle.setOnClickListener(new OnClickListener() {
445             public void onClick(View v) {
446                 showDialog(DIALOG_YES_NO_DEFAULT_LIGHT_MESSAGE);
447             }
448         });
449 
450         /* Two points, in the dark default theme */
451         Button twoButtonsDefaultDarkTitle = (Button) findViewById(R.id.two_buttons_default_dark);
452         twoButtonsDefaultDarkTitle.setOnClickListener(new OnClickListener() {
453             public void onClick(View v) {
454                 showDialog(DIALOG_YES_NO_DEFAULT_DARK_MESSAGE);
455             }
456         });
457 
458         mProgressHandler = new Handler() {
459             @Override
460             public void handleMessage(Message msg) {
461                 super.handleMessage(msg);
462                 if (mProgress >= MAX_PROGRESS) {
463                     mProgressDialog.dismiss();
464                 } else {
465                     mProgress++;
466                     mProgressDialog.incrementProgressBy(1);
467                     mProgressHandler.sendEmptyMessageDelayed(0, 100);
468                 }
469             }
470         };
471     }
472 }
473