1f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project/* 2f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * 4f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * you may not use this file except in compliance with the License. 6f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * You may obtain a copy of the License at 7f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * 8f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * 10f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * See the License for the specific language governing permissions and 14f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * limitations under the License. 15f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project */ 16f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 17f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectpackage android.app.cts; 18f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 198384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsuimport com.android.cts.stub.R; 208384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu 21f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.Activity; 22f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.AlertDialog; 23f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.DatePickerDialog; 24f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.Dialog; 25f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.TimePickerDialog; 26f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.DatePickerDialog.OnDateSetListener; 27f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.app.TimePickerDialog.OnTimeSetListener; 28fd27abc3649b6f29a56428b73e88d46e28350a76Scott Suimport android.content.Context; 29f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.content.DialogInterface; 308384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsuimport android.content.Intent; 31fd27abc3649b6f29a56428b73e88d46e28350a76Scott Suimport android.content.DialogInterface.OnCancelListener; 32f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.os.Bundle; 33fd27abc3649b6f29a56428b73e88d46e28350a76Scott Suimport android.os.Handler; 34fd27abc3649b6f29a56428b73e88d46e28350a76Scott Suimport android.os.Message; 358384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsuimport android.test.ActivityInstrumentationTestCase2; 36f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.util.Log; 37fd27abc3649b6f29a56428b73e88d46e28350a76Scott Suimport android.view.KeyEvent; 38f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.view.LayoutInflater; 39f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.view.View; 40f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.widget.DatePicker; 41f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.widget.TimePicker; 42f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 43fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su/* 44fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su * Stub class for Dialog, AlertDialog, DatePickerDialog, TimePickerDialog etc. 45fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su */ 46f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectpublic class DialogStubActivity extends Activity { 47f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_DIALOG_WITHOUT_THEME = 0; 48f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_DIALOG_WITH_THEME = 1; 49f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_ALERTDIALOG = 2; 50fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_CUSTOM_ALERTDIALOG = 3; 51f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_DATEPICKERDIALOG = 4; 52f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_DATEPICKERDIALOG_WITH_THEME = 5; 53f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_TIMEPICKERDIALOG = 6; 54f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_TIMEPICKERDIALOG_WITH_THEME = 7; 55f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final int TEST_ONSTART_AND_ONSTOP = 8; 56fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_ALERTDIALOG_DEPRECATED = 9; 57fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_ALERTDIALOG_CALLBACK = 10; 58fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_CUSTOM_ALERTDIALOG_VIEW = 11; 59fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_ALERTDIALOG_DEPRECATED_WITH_MESSAGE = 12; 60fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_ALERTDIALOG_THEME = 13; 61fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_ALERTDIALOG_CANCELABLE = 14; 62fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_ALERTDIALOG_NOT_CANCELABLE = 15; 63fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_PROTECTED_CANCELABLE = 16; 64fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int TEST_PROTECTED_NOT_CANCELABLE = 17; 65fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 66fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int SPACING_LEFT = 10; 67fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int SPACING_TOP = 20; 68fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int SPACING_RIGHT = 30; 69fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final int SPACING_BOTTOM = 40; 70fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static int buttonIndex; 71f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 72f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public static final String DEFAULT_ALERTDIALOG_TITLE = "AlertDialog"; 73fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static final String DEFAULT_ALERTDIALOG_MESSAGE = "AlertDialog message"; 74f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project private static final String LOG_TAG = "DialogStubActivity"; 75f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 76fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean isPositiveButtonClicked = false; 77fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean isNegativeButtonClicked = false; 78fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean isNeutralButtonClicked = false; 79fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean isCallBackCalled; 80fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onCancelCalled; 81fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onKeyDownCalled; 82fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onKeyUpCalled; 83fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onCreateCalled; 84fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onCancelListenerCalled; 85fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onClickCalled; 86fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static boolean onDateChangedCalled; 87fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public static boolean onRestoreInstanceStateCalled; 88fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onSaveInstanceStateCalled; 89fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public int updatedYear; 90fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public int updatedMonth; 91fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public int updatedDay; 92fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 93fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public final int INITIAL_YEAR = 2008; 94fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public final int INITIAL_MONTH = 7; 95fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public final int INITIAL_DAY_OF_MONTH = 27; 96fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private final int INITIAL_HOUR = 10; 97fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private final int INITIAL_MINUTE = 35; 98f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project private Dialog mDialog; 99fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private AlertDialog mAlertDialog; 100fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private OnDateSetListener mOnDateSetListener = new OnDateSetListener() { 101fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 102fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su updatedYear = year; 103fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su updatedMonth = monthOfYear; 104fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su updatedDay = dayOfMonth; 105fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 106fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su }; 107f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 108fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @SuppressWarnings("deprecation") 109f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project @Override 110f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project protected Dialog onCreateDialog(int id) { 111f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project switch (id) { 112fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_DIALOG_WITHOUT_THEME: 113fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new Dialog(this); 114fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog.setTitle("Hello, Dialog"); 115fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 116fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 117fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_DIALOG_WITH_THEME: 118fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new Dialog(this, 1); 119fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 120fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 121fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG: 122fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = getAlertDialogInstance(false); 123fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 124fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 125fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_CUSTOM_ALERTDIALOG: 126fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = getCustomAlertDialogInstance(false); 127fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 128fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 129fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_CUSTOM_ALERTDIALOG_VIEW: 130fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = getCustomAlertDialogInstance(true); 131fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 132fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 133fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_DATEPICKERDIALOG: 134fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new MockDatePickerDialog(this, mOnDateSetListener, INITIAL_YEAR, 135fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su INITIAL_MONTH, INITIAL_DAY_OF_MONTH); 136fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 137fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 138fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_DATEPICKERDIALOG_WITH_THEME: 139fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new MockDatePickerDialog(this, 140fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su com.android.internal.R.style.Theme_Translucent, mOnDateSetListener, 141fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su INITIAL_YEAR, INITIAL_MONTH, INITIAL_DAY_OF_MONTH); 142fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 143fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 144fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_TIMEPICKERDIALOG: 145fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new TimePickerDialog(this, new OnTimeSetListener() { 146fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 147fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su isCallBackCalled = true; 148fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 149fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su }, INITIAL_HOUR, INITIAL_MINUTE, true); 150fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 151fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 152fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_TIMEPICKERDIALOG_WITH_THEME: 153fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new TimePickerDialog(this, 154fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su com.android.internal.R.style.Theme_Translucent, null, INITIAL_HOUR, 155fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su INITIAL_MINUTE, true); 156fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 157fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 158fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ONSTART_AND_ONSTOP: 159fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new TestDialog(this); 160fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su Log.i(LOG_TAG, "mTestDialog:" + mDialog); 161fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return mDialog; 162fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 163fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG_DEPRECATED: 164fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = getAlertDialogInstance(true); 165fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 166fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 167fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG_DEPRECATED_WITH_MESSAGE: 168fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final Handler handler = new Handler() { 169fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 170fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void handleMessage(Message msg) { 171fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su buttonIndex = msg.what; 172fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super.handleMessage(msg); 173fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 174fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su }; 175fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final Message positiveMessage = Message.obtain(); 176fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su positiveMessage.setTarget(handler); 177fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su positiveMessage.what = DialogInterface.BUTTON_POSITIVE; 178fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 179fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final Message negativeMessage = Message.obtain(); 180fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su negativeMessage.setTarget(handler); 181fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su negativeMessage.what = DialogInterface.BUTTON_NEGATIVE; 182fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 183fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final Message neutralMessage = Message.obtain(); 184fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su neutralMessage.setTarget(handler); 185fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su neutralMessage.what = DialogInterface.BUTTON_NEUTRAL; 186fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog = getAlertDialogInstance(false); 187fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton(getString(R.string.alert_dialog_positive), positiveMessage); 188fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton2(getString(R.string.alert_dialog_negative), negativeMessage); 189fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton3(getString(R.string.alert_dialog_neutral), neutralMessage); 190fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = mAlertDialog; 191fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 192fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 193fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG_CALLBACK: 194fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new MockAlertDialog(this); 195fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 196fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG_THEME: 197fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new MockAlertDialog(this, R.style.Theme_AlertDialog); 198fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 199fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG_CANCELABLE: 200fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = getAlertDialogCancelablInstance(true); 201fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 202fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_ALERTDIALOG_NOT_CANCELABLE: 203fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = getAlertDialogCancelablInstance(false); 204fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 205fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_PROTECTED_CANCELABLE: 206fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new TestDialog(this, true, new OnCancelListener() { 207fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onCancel(DialogInterface dialog) { 208fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onCancelListenerCalled = true; 209fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 210fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su }); 211fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 212fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case TEST_PROTECTED_NOT_CANCELABLE: 213fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mDialog = new TestDialog(this, false, new OnCancelListener() { 214fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onCancel(DialogInterface dialog) { 215fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onCancelListenerCalled = true; 216fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 217fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su }); 218fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 219fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su default: 220fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 221f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 222f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 223f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project Log.i(LOG_TAG, "mDialog:" + mDialog); 224f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project return mDialog; 225f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 226f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 227fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private AlertDialog getAlertDialogCancelablInstance(boolean cancelable) { 228fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su OnCancelListener cancelListener = new OnCancelListener() { 229fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onCancel(DialogInterface dialog) { 230fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onCancelCalled = true; 231fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 232fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su }; 233fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return new MockAlertDialog(this, cancelable, cancelListener); 234fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 235fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 236fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @SuppressWarnings("deprecation") 237fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private AlertDialog getAlertDialogInstance(boolean deprecated) { 238fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog = new AlertDialog.Builder(DialogStubActivity.this).create(); 239fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setIcon(com.android.cts.stub.R.drawable.pass); 240fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setTitle(DEFAULT_ALERTDIALOG_TITLE); 241fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setMessage(DEFAULT_ALERTDIALOG_MESSAGE); 242fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setInverseBackgroundForced(true); 243fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final DialogInterface.OnClickListener positiveListener = new MockOnClickListener( 244fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su DialogInterface.BUTTON_POSITIVE); 245fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final DialogInterface.OnClickListener netativeListener = new MockOnClickListener( 246fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su DialogInterface.BUTTON_NEGATIVE); 247fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final DialogInterface.OnClickListener neutralListener = new MockOnClickListener( 248fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su DialogInterface.BUTTON_NEUTRAL); 249fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 250fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su if (deprecated) { 251fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton(getString(R.string.alert_dialog_positive), positiveListener); 252fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton2(getString(R.string.alert_dialog_negative), netativeListener); 253fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton3(getString(R.string.alert_dialog_neutral), neutralListener); 254fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } else { 255fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton(DialogInterface.BUTTON_POSITIVE, 256fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su getString(R.string.alert_dialog_positive), positiveListener); 257fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, 258fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su getString(R.string.alert_dialog_negative), netativeListener); 259fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setButton(DialogInterface.BUTTON_NEUTRAL, 260fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su getString(R.string.alert_dialog_neutral), neutralListener); 261fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 262fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return mAlertDialog; 263fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 264fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 265fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 266fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private AlertDialog getCustomAlertDialogInstance(boolean withSpacing) { 267fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final LayoutInflater inflate = getLayoutInflater(); 268fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final View customTitleViewCustom = inflate.inflate(R.layout.alertdialog_custom_title, null); 269fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su final View textEntryView = inflate.inflate(R.layout.alert_dialog_text_entry_2, null); 270fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog = new AlertDialog.Builder(DialogStubActivity.this).create(); 271fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setCustomTitle(customTitleViewCustom); 272fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setMessage(DEFAULT_ALERTDIALOG_MESSAGE); 273fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su if (withSpacing) { 274fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setView(textEntryView, SPACING_LEFT, SPACING_TOP, SPACING_RIGHT, 275fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su SPACING_BOTTOM); 276fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } else { 277fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mAlertDialog.setView(textEntryView); 278fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 279fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 280fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return mAlertDialog; 281fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 282fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 283fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 284f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public Dialog getDialog() { 285f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project return mDialog; 286f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 287f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 288f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project public String getDialogTitle() { 289f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project return (String) mDialog.getWindow().getAttributes().getTitle(); 290f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 291f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 2928384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu private static final String TEST_DIALOG_NUMBER_EXTRA = "testDialogNumber"; 2938384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu 2948384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu public static <T extends Activity> T startDialogActivity( 2958384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu ActivityInstrumentationTestCase2<T> testCase, int dialogNumber) { 2968384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu Intent intent = new Intent(Intent.ACTION_MAIN); 2978384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu intent.putExtra(TEST_DIALOG_NUMBER_EXTRA, dialogNumber); 2988384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu testCase.setActivityIntent(intent); 2998384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu return testCase.getActivity(); 3008384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu } 3018384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu 302f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project @Override 303f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 304f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project super.onCreate(savedInstanceState); 305f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 306f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project setContentView(R.layout.dialog_stub_layout); 307f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 3088384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu Intent intent = getIntent(); 3098384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu int dialogNum = intent.getIntExtra(TEST_DIALOG_NUMBER_EXTRA, -1); 3108384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu if (dialogNum != -1) { 3118384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu showDialog(dialogNum); 3128384c12edac19c20b8ffc115e2fb1c623d500e29Brian Muramatsu } 313fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 314f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 315fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void setUpTitle(final String title) { 316fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su runOnUiThread(new Runnable() { 317fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void run() { 318fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su getDialog().setTitle(title); 319f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 320f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project }); 321fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 322f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 323fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void setUpTitle(final int id) { 324fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su runOnUiThread(new Runnable() { 325fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void run() { 326fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su getDialog().setTitle(id); 327f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 328f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project }); 329fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 330f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 331fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su class MockAlertDialog extends AlertDialog { 332fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public MockAlertDialog(Context context) { 333fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super(context); 334fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 335f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 336fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public MockAlertDialog(Context context, int theme) { 337fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super(context, theme); 338fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 339f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 340fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public MockAlertDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { 341fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super(context, cancelable, cancelListener); 342fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 343f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 344fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 345fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onKeyDown(int keyCode, KeyEvent event) { 346fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onKeyDownCalled = true; 347fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return super.onKeyDown(keyCode, event); 348fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 349f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 350fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 351fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public boolean onKeyUp(int keyCode, KeyEvent event) { 352fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onKeyUpCalled = true; 353fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return super.onKeyUp(keyCode, event); 354fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 355fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 356fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 357fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su protected void onCreate(Bundle savedInstanceState) { 358fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onCreateCalled = true; 359fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super.onCreate(savedInstanceState); 360fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 361f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 362f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 363f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 364fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su class MockOnClickListener implements DialogInterface.OnClickListener { 365fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su private final int mId; 366f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project 367fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public MockOnClickListener(final int buttonId) { 368fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su mId = buttonId; 369fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 370fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 371fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onClick(DialogInterface dialog, int which) { 372fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su switch (mId) { 373fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case DialogInterface.BUTTON_POSITIVE: 374fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su isPositiveButtonClicked = true; 375fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 376fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case DialogInterface.BUTTON_NEGATIVE: 377fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su isNegativeButtonClicked = true; 378fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 379fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su case DialogInterface.BUTTON_NEUTRAL: 380fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su isNeutralButtonClicked = true; 381fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 382fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su default: 383fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su break; 384f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 385fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 386fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 387fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 388fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su class MockDatePickerDialog extends DatePickerDialog { 389fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public MockDatePickerDialog(Context context, OnDateSetListener callBack, int year, 390fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su int monthOfYear, int dayOfMonth) { 391fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super(context, callBack, year, monthOfYear, dayOfMonth); 392fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 393fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 394fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public MockDatePickerDialog(Context context, int theme, OnDateSetListener callBack, 395fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su int year, int monthOfYear, int dayOfMonth) { 396fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super(context, theme, callBack, year, monthOfYear, dayOfMonth); 397fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 398fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 399fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 400fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onClick(DialogInterface dialog, int which) { 401fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onClickCalled = true; 402fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super.onClick(dialog, which); 403fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 404fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 405fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 406fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onDateChanged(DatePicker view, int year, int month, int day) { 407fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onDateChangedCalled = true; 408fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super.onDateChanged(view, year, month, day); 409fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 410fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 411fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 412fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public void onRestoreInstanceState(Bundle savedInstanceState) { 413fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onRestoreInstanceStateCalled = true; 414fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su super.onRestoreInstanceState(savedInstanceState); 415fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 416fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 417fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su @Override 418fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su public Bundle onSaveInstanceState() { 419fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su onSaveInstanceStateCalled = true; 420fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su return super.onSaveInstanceState(); 421fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su } 422fd27abc3649b6f29a56428b73e88d46e28350a76Scott Su 423f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project } 424f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project} 425