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