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