NotificationTestList.java revision ddf680bff5bb9bc04ef04667644db8ade0b38c46
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.statusbartest;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onoratoimport android.app.Notification;
20ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onoratoimport android.app.NotificationManager;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.PendingIntent;
22ef367529f9c7a538d74599b37b49ac309d0a8d8cChristian Mehlmauerimport android.content.Context;
234df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.content.ContentResolver;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
25ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onoratoimport android.graphics.Bitmap;
26ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onoratoimport android.graphics.drawable.BitmapDrawable;
278b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauerimport android.os.Environment;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Vibrator;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemClock;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RemoteViews;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.PowerManager;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class NotificationTestList extends TestActivity
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final static String TAG = "NotificationTestList";
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NotificationManager mNM;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Vibrator mVibrator = new Vibrator();
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Handler mHandler = new Handler();
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
44d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato    long mActivityCreateTime = System.currentTimeMillis();
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    long mChronometerBase = 0;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected String tag() {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return TAG;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected Test[] tests() {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTests;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Test[] mTests = new Test[] {
60e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato        new Test("Off and sound") {
61e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato            public void run() {
62ef367529f9c7a538d74599b37b49ac309d0a8d8cChristian Mehlmauer                PowerManager pm = (PowerManager)NotificationTestList.this.getSystemService(Context.POWER_SERVICE);
63e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                PowerManager.WakeLock wl =
64e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                            pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "sound");
65e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                wl.acquire();
66e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato
67e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                pm.goToSleep(SystemClock.uptimeMillis());
68e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato
69e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                Notification n = new Notification();
708b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauer                n.sound = Uri.parse("file://" + Environment.getExternalStorageDirectory() +
718b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauer                        "/virtual-void.mp3");
72e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                Log.d(TAG, "n.sound=" + n.sound);
73e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato
74e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                mNM.notify(1, n);
75e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato
76e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                Log.d(TAG, "releasing wake lock");
77e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                wl.release();
78e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato                Log.d(TAG, "released wake lock");
79e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato            }
80e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato        },
81e71d9e421da070705a8f37aaf702282467a9fe7fJoe Onorato
82ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Cancel #1") {
83ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run()
84ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            {
85ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.cancel(1);
86ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
87ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
88ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
89ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker 1 line") {
90ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
91ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, "tick tick tick",
92ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
93ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
94ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
95ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
96ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
97ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
98ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
99ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker 1 line & icon") {
100ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
101ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, "tick tick tick",
102ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
103ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
104ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
105ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons = new Bitmap[1];
106ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons[0] = loadBitmap(R.drawable.icon3);
107ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
108ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
109ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
110ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
111ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker 2 lines") {
112ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
113ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, "tick tick tick\ntock tock",
114ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
115ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
116ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
117ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
118ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
119ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
120ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
121ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker title") {
122ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
123ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, null,
124ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
125ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
126ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
127ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerTitle = "This is a title";
128ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
129ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
130ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
131ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
132ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker subtitle") {
133ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
134ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, null,
135ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
136ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
137ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
138ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerSubtitle = "and a subtitle";
139ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
140ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
141ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
142ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
143ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker title & subtitle") {
144ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
145ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, null,
146ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
147ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
148ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
149ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerTitle = "This is a title it is really really longggggg long long long long";
150ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerSubtitle = "and a subtitle it is really really longggggg long long long long long long long long long long long long long long long long";
151ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
152ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
153ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
154ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
155ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker text, title & subtitle") {
156ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
157ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, "not visible",
158ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
159ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
160ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
161ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerTitle = "This is a title";
162ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerSubtitle = "and a subtitle";
163ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
164ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
165ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
166ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
167ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        new Test("Ticker title, subtitle & 2 icons") {
168ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            public void run() {
169ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon1, null,
170ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                        mActivityCreateTime);
171ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
172ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                            "This is a notification!!!", makeIntent());
173ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerTitle = "This is a title";
174ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerSubtitle = "and a subtitle";
175ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
176ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons = new Bitmap[2];
177ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons[0] = loadBitmap(R.drawable.icon3);
178ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons[1] = loadBitmap(R.drawable.app_gmail);
179ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
180ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                mNM.notify(1, n);
181ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                /*
182ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons[0].recycle();
183ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                n.tickerIcons[1].recycle();
184ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                */
185ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato            }
186ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        },
187ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("No view") {
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification(R.drawable.icon1, "No view",
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        System.currentTimeMillis());
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("No intent") {
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification(R.drawable.icon1, "No intent",
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        System.currentTimeMillis());
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.setLatestEventInfo(NotificationTestList.this, "No intent",
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "No intent", null);
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Layout") {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
209ddf680bff5bb9bc04ef04667644db8ade0b38c46Joe Onorato                Notification n;
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
211ddf680bff5bb9bc04ef04667644db8ade0b38c46Joe Onorato                n = new Notification(NotificationTestList.this,
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            R.drawable.ic_statusbar_missedcall,
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            null, System.currentTimeMillis()-(1000*60*60*24),
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "(453) 123-2328",
215ddf680bff5bb9bc04ef04667644db8ade0b38c46Joe Onorato                            "", null);
216ddf680bff5bb9bc04ef04667644db8ade0b38c46Joe Onorato                n.flags |= Notification.FLAG_ONGOING_EVENT;
217ddf680bff5bb9bc04ef04667644db8ade0b38c46Joe Onorato
218ddf680bff5bb9bc04ef04667644db8ade0b38c46Joe Onorato                mNM.notify(1, n);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(2, new Notification(NotificationTestList.this,
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            R.drawable.ic_statusbar_email,
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            null, System.currentTimeMillis(),
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Mark Willem, Me (2)",
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Re: Didn't you get the memo?", null));
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(3, new Notification(NotificationTestList.this,
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            R.drawable.ic_statusbar_chat,
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            null, System.currentTimeMillis()+(1000*60*60*24),
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Sophia Winterlanden",
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Lorem ipsum dolor sit amet.", null));
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
234005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato        new Test("Bad Icon #1 (when=create)") {
235871bdb9867f6630d8bb28e5607263e8bf4eac3baJoe Onorato            public void run() {
236005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                Notification n = new Notification(R.layout.chrono_notification /* not an icon */,
237005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                        null, mActivityCreateTime);
238005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
239005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                            "This is the same notification!!!", makeIntent());
240005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                mNM.notify(1, n);
241871bdb9867f6630d8bb28e5607263e8bf4eac3baJoe Onorato            }
242871bdb9867f6630d8bb28e5607263e8bf4eac3baJoe Onorato        },
243871bdb9867f6630d8bb28e5607263e8bf4eac3baJoe Onorato
244005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato        new Test("Bad Icon #1 (when=now)") {
245005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato            public void run() {
246005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                Notification n = new Notification(R.layout.chrono_notification /* not an icon */,
247005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                        null, System.currentTimeMillis());
248005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
249005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                            "This is the same notification!!!", makeIntent());
250005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                mNM.notify(1, n);
251005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato            }
252005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato        },
253005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato
254005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato        new Test("Bad resource #1 (when=create)") {
255005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato            public void run() {
256005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                Notification n = new Notification(R.drawable.icon2,
257005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                        null, mActivityCreateTime);
258005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
259005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                            "This is the same notification!!!", makeIntent());
26068065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
261005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                mNM.notify(1, n);
26268065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato            }
26368065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato        },
26468065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato
265005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato        new Test("Bad resource #1 (when=now)") {
266005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato            public void run() {
267005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                Notification n = new Notification(R.drawable.icon2,
268005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                        null, System.currentTimeMillis());
269005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
270005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                            "This is the same notification!!!", makeIntent());
271005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
272005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato                mNM.notify(1, n);
273005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato            }
274005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato        },
275005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato
276005847b03b2ebe3eb1a974a8a04ad51bca6636cdJoe Onorato
27768065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato        new Test("Bad resource #3") {
27868065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato            public void run()
27968065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato            {
28068065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                Notification n = new Notification(NotificationTestList.this,
28168065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                            R.drawable.ic_statusbar_missedcall,
28268065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                            null, System.currentTimeMillis()-(1000*60*60*24),
28368065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                            "(453) 123-2328",
28468065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                            "", null);
28568065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
28668065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                mNM.notify(3, n);
28768065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato            }
28868065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato        },
28968065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato
290c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato        new Test("Times") {
291c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato            public void run()
292c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato            {
293c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                long now = System.currentTimeMillis();
294c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato
295c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(7, "24 hours from now", now+(1000*60*60*24));
296c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(6, "12:01:00 from now", now+(1000*60*60*12)+(60*1000));
297c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(5, "12 hours from now", now+(1000*60*60*12));
298c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(4, "now", now);
299c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(3, "11:59:00 ago", now-((1000*60*60*12)-(60*1000)));
300c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(2, "12 hours ago", now-(1000*60*60*12));
301c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                timeNotification(1, "24 hours ago", now-(1000*60*60*24));
302c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato            }
303c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato        },
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new StateStress("Stress - Ongoing / Latest", 100, 100, new Runnable[] {
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Runnable() {
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    public void run() {
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Log.d(TAG, "Stress - Ongoing/Latest 0");
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Notification n = new Notification(NotificationTestList.this,
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                R.drawable.icon3,
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                null, System.currentTimeMillis(), "Stress - Ongoing",
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                "Notify me!!!", null);
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        n.flags |= Notification.FLAG_ONGOING_EVENT;
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        mNM.notify(1, n);
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                },
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Runnable() {
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    public void run() {
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Log.d(TAG, "Stress - Ongoing/Latest 1");
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        Notification n = new Notification(NotificationTestList.this,
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                R.drawable.icon4,
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                null, System.currentTimeMillis(), "Stress - Latest",
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                "Notify me!!!", null);
323175f79c5a556416817a8f8674b2e0ac3b3cb6e6bJoe Onorato                        //n.flags |= Notification.FLAG_ONGOING_EVENT;
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        mNM.notify(1, n);
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }),
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Long") {
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.defaults |= Notification.DEFAULT_SOUND ;
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.vibrate = new long[] {
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400 };
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
342105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        new Test("Blue Lights") {
343105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            public void run()
344105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            {
345105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                Notification n = new Notification();
346105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.flags |= Notification.FLAG_SHOW_LIGHTS;
347105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledARGB = 0xff0000ff;
348b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOnMS = 1;
349b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOffMS = 0;
350105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                mNM.notify(1, n);
351105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            }
352105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        },
353105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
354105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        new Test("Red Lights") {
355105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            public void run()
356105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            {
357105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                Notification n = new Notification();
358105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.flags |= Notification.FLAG_SHOW_LIGHTS;
359105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledARGB = 0xffff0000;
360b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOnMS = 1;
361b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOffMS = 0;
362105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                mNM.notify(1, n);
363105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            }
364105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        },
365105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
366105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        new Test("Yellow Lights") {
367105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            public void run()
368105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            {
369105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                Notification n = new Notification();
370105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.flags |= Notification.FLAG_SHOW_LIGHTS;
371105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledARGB = 0xffffff00;
372b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOnMS = 1;
373b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOffMS = 0;
374b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                mNM.notify(1, n);
375b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren            }
376b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren        },
377b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren
378b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren        new Test("Lights off") {
379b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren            public void run()
380b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren            {
381b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                Notification n = new Notification();
382b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.flags |= Notification.FLAG_SHOW_LIGHTS;
383b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledARGB = 0x00000000;
384b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOnMS = 0;
385b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledOffMS = 0;
386105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                mNM.notify(1, n);
387105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            }
388105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        },
389105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
390105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        new Test("Blue Blinking Slow") {
391105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            public void run()
392105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            {
393105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                Notification n = new Notification();
394105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.flags |= Notification.FLAG_SHOW_LIGHTS;
395b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledARGB = 0xff0000ff;
396105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledOnMS = 1300;
397105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledOffMS = 1300;
398105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                mNM.notify(1, n);
399105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            }
400105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        },
401105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
402105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        new Test("Blue Blinking Fast") {
403105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            public void run()
404105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            {
405105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                Notification n = new Notification();
406105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.flags |= Notification.FLAG_SHOW_LIGHTS;
407b0fbe297c50df5dcfb81721fd6079dd7125f88e0Mattias Östergren                n.ledARGB = 0xff0000ff;
408105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledOnMS = 300;
409105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                n.ledOffMS = 300;
410105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                mNM.notify(1, n);
411105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            }
412105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        },
413105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Default All") {
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.defaults |= Notification.DEFAULT_ALL;
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Default All, once") {
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.defaults |= Notification.DEFAULT_ALL;
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.flags |= Notification.FLAG_ONLY_ALERT_ONCE ;
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Content Sound") {
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.sound = Uri.parse(
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        "content://media/internal/audio/media/7");
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Resource Sound") {
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.sound = Uri.parse(
4494df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                        ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
4504df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project                        getPackageName() + "/raw/ringer");
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.d(TAG, "n.sound=" + n.sound);
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Sound and Cancel") {
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.sound = Uri.parse(
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "content://media/internal/audio/media/7");
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                SystemClock.sleep(200);
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.cancel(1);
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate") {
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    n.vibrate = new long[] { 0, 700, 500, 1000 };
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate and cancel") {
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification();
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    n.vibrate = new long[] { 0, 700, 500, 1000 };
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                SystemClock.sleep(500);
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.cancel(1);
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate pattern") {
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mVibrator.vibrate(new long[] { 250, 1000, 500, 2000 }, -1);
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate pattern repeating") {
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mVibrator.vibrate(new long[] { 250, 1000, 500 }, 1);
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate 3s") {
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mVibrator.vibrate(3000);
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate 100s") {
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mVibrator.vibrate(100000);
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Vibrate off") {
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run()
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            {
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mVibrator.cancel();
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Cancel #1") {
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.cancel(1);
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Cancel #1 in 3 sec") {
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mHandler.postDelayed(new Runnable() {
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            public void run() {
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                Log.d(TAG, "Cancelling now...");
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                mNM.cancel(1);
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            }
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }, 3000);
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Cancel #2") {
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.cancel(2);
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent #1") {
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification(R.drawable.icon1, "tick tick tick",
553d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato                        mActivityCreateTime);
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "This is a notification!!!", makeIntent());
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, n);
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent #1 in 3 sec") {
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mHandler.postDelayed(new Runnable() {
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            public void run() {
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                Notification n = new Notification(R.drawable.icon1,
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        "            "
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        + "tick tock tick tock\n\nSometimes notifications can "
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        + "be really long and wrap to more than one line.\n"
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        + "Sometimes."
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        + "Ohandwhathappensifwehaveonereallylongstringarewesure"
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        + "thatwesegmentitcorrectly?\n",
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        System.currentTimeMillis());
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                n.setLatestEventInfo(NotificationTestList.this,
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        "Still Persistent #1",
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        "This is still a notification!!!",
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                        makeIntent());
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                mNM.notify(1, n);
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            }
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }, 3000);
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent #2") {
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification(R.drawable.icon2, "tock tock tock",
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        System.currentTimeMillis());
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.setLatestEventInfo(NotificationTestList.this, "Persistent #2",
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Notify me!!!", makeIntent());
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(2, n);
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59268065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato        new Test("Persistent #3") {
59368065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato            public void run() {
594ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato                Notification n = new Notification(R.drawable.icon2, "tock tock tock\nmooooo",
59568065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                        System.currentTimeMillis());
59668065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #3",
59768065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                            "Notify me!!!", makeIntent());
59868065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato                mNM.notify(3, n);
59968065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato            }
60068065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato        },
60168065e0a1980ab6abf8963b48b011efa017fe1c2Joe Onorato
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent #2 Vibrate") {
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification(R.drawable.icon2, "tock tock tock",
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        System.currentTimeMillis());
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.setLatestEventInfo(NotificationTestList.this, "Persistent #2",
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Notify me!!!", makeIntent());
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.defaults = Notification.DEFAULT_VIBRATE;
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(2, n);
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
613d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato        new Test("Persistent #1 - different icon") {
614d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato            public void run() {
615d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato                Notification n = new Notification(R.drawable.icon2, null,
616d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato                        mActivityCreateTime);
617d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato                n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
618d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato                            "This is the same notification!!!", makeIntent());
619d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato                mNM.notify(1, n);
620d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato            }
621d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato        },
622d2b1f00e1e34cdce0047af7374aa57b1e4b5b040Joe Onorato
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Chronometer Start") {
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Notification n = new Notification(R.drawable.icon2, "me me me me",
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                    System.currentTimeMillis());
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.contentView = new RemoteViews(getPackageName(), R.layout.chrono_notification);
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mChronometerBase = SystemClock.elapsedRealtime();
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.contentView.setChronometer(R.id.time, mChronometerBase, "Yay! (%s)", true);
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.flags |= Notification.FLAG_ONGOING_EVENT;
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                n.contentIntent = makeIntent();
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(2, n);
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Chronometer Stop") {
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mHandler.postDelayed(new Runnable() {
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        public void run() {
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Log.d(TAG, "Chronometer Stop");
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            Notification n = new Notification();
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            n.icon = R.drawable.icon1;
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            n.contentView = new RemoteViews(getPackageName(),
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                             R.layout.chrono_notification);
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            n.contentView.setChronometer(R.id.time, mChronometerBase, null, false);
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            n.contentIntent = makeIntent();
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            mNM.notify(2, n);
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        }
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }, 3000);
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Sequential Persistent") {
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(1));
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(2, notificationWithNumbers(2));
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Replace Persistent") {
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(1));
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(1));
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Run and Cancel (n=1)") {
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(1));
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.cancel(1);
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Run an Cancel (n=2)") {
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(1));
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(2, notificationWithNumbers(2));
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.cancel(2);
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Repeatedly notify and cancel -- triggers bug #670627
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Bug 670627") {
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                for (int i = 0; i < 10; i++) {
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  Log.d(TAG, "Add two notifications");
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  mNM.notify(1, notificationWithNumbers(1));
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  mNM.notify(2, notificationWithNumbers(2));
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  Log.d(TAG, "Cancel two notifications");
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  mNM.cancel(1);
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  mNM.cancel(2);
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Ten Notifications") {
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                for (int i = 0; i < 2; i++) {
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Notification n = new Notification(NotificationTestList.this, R.drawable.icon2,
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            null, System.currentTimeMillis(), "Persistent #" + i,
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Notify me!!!" + i, null);
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    n.flags |= Notification.FLAG_ONGOING_EVENT;
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    n.number = i;
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mNM.notify((i+1)*10, n);
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                for (int i = 2; i < 10; i++) {
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Notification n = new Notification(NotificationTestList.this, R.drawable.icon2,
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            null, System.currentTimeMillis(), "Persistent #" + i,
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            "Notify me!!!" + i, null);
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    n.number = i;
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mNM.notify((i+1)*10, n);
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Cancel eight notifications") {
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                for (int i = 1; i < 9; i++) {
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mNM.cancel((i+1)*10);
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent with numbers 1") {
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(1));
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent with numbers 222") {
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(22));
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent with numbers 333") {
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(333));
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Test("Persistent with numbers 4444") {
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNM.notify(1, notificationWithNumbers(4444));
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        },
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
748105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        new Test("Crash") {
749105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            public void run()
750105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            {
751105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                PowerManager.WakeLock wl
752ef367529f9c7a538d74599b37b49ac309d0a8d8cChristian Mehlmauer                        = ((PowerManager)NotificationTestList.this.getSystemService(Context.POWER_SERVICE))
753105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                            .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "crasher");
754105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                wl.acquire();
755105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                mHandler.postDelayed(new Runnable() {
756105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                            public void run() {
757105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                                throw new RuntimeException("Die!");
758105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                            }
759105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project                        }, 10000);
760105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
761105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project            }
762105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        },
763105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Notification notificationWithNumbers(int num) {
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Notification n = new Notification(this, R.drawable.icon2, null, System.currentTimeMillis(),
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "Persistent #2", "Notify me!!!", null);
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        n.number = num;
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return n;
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private PendingIntent makeIntent() {
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Intent intent = new Intent(Intent.ACTION_MAIN);
7750e26dffd6cfcb09b08a94a857b891fdef7fe2b1eJoe Onorato        intent.addCategory(Intent.CATEGORY_HOME);
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return PendingIntent.getActivity(this, 0, intent, 0);
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    class StateStress extends Test {
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StateStress(String name, int pause, int iterations, Runnable[] tasks) {
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(name);
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mPause = pause;
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTasks = tasks;
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mIteration = iterations;
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Runnable[] mTasks;
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int mNext;
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int mIteration;
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long mPause;
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Runnable mRunnable = new Runnable() {
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public void run() {
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mTasks[mNext].run();
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mNext++;
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (mNext >= mTasks.length) {
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mNext = 0;
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mIteration--;
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if (mIteration <= 0) {
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        return;
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mHandler.postDelayed(mRunnable, mPause);
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void run() {
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mNext = 0;
8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mHandler.postDelayed(mRunnable, mPause);
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
809c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato
810c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato    void timeNotification(int n, String label, long time) {
811c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato        mNM.notify(n, new Notification(NotificationTestList.this,
812c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                    R.drawable.ic_statusbar_missedcall, null,
813c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato                    time, label, "" + new java.util.Date(time), null));
814c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato
815c83bb730ec0333e52990a40edf6d54bb66b1d5baJoe Onorato    }
816ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato
817ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato    Bitmap loadBitmap(int resId) {
818ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        BitmapDrawable bd = (BitmapDrawable)getResources().getDrawable(resId);
819ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato        return Bitmap.createBitmap(bd.getBitmap());
820ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato    }
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
823