Home | History | Annotate | Download | only in statusbartest
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.statusbartest;
     18 
     19 import android.app.Notification;
     20 import android.app.NotificationManager;
     21 import android.app.PendingIntent;
     22 import android.content.Context;
     23 import android.content.ContentResolver;
     24 import android.content.Intent;
     25 import android.graphics.Bitmap;
     26 import android.graphics.drawable.BitmapDrawable;
     27 import android.os.Bundle;
     28 import android.os.Environment;
     29 import android.os.Vibrator;
     30 import android.os.Handler;
     31 import android.util.Log;
     32 import android.net.Uri;
     33 import android.os.SystemClock;
     34 import android.widget.RemoteViews;
     35 import android.widget.TextView;
     36 import android.widget.ProgressBar;
     37 import android.os.PowerManager;
     38 
     39 // private NM API
     40 import android.app.INotificationManager;
     41 import com.android.internal.statusbar.StatusBarNotification;
     42 
     43 public class NotificationTestList extends TestActivity
     44 {
     45     private final static String TAG = "NotificationTestList";
     46 
     47     NotificationManager mNM;
     48     Vibrator mVibrator;
     49     Handler mHandler = new Handler();
     50 
     51     long mActivityCreateTime;
     52     long mChronometerBase = 0;
     53 
     54     boolean mProgressDone = true;
     55 
     56     final int[] kNumberedIconResIDs = {
     57         R.drawable.notification0,
     58         R.drawable.notification1,
     59         R.drawable.notification2,
     60         R.drawable.notification3,
     61         R.drawable.notification4,
     62         R.drawable.notification5,
     63         R.drawable.notification6,
     64         R.drawable.notification7,
     65         R.drawable.notification8,
     66         R.drawable.notification9
     67     };
     68     final int kUnnumberedIconResID = R.drawable.notificationx;
     69 
     70     @Override
     71     public void onCreate(Bundle icicle) {
     72         super.onCreate(icicle);
     73         mVibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
     74         mActivityCreateTime = System.currentTimeMillis();
     75     }
     76 
     77     @Override
     78     protected String tag() {
     79         return TAG;
     80     }
     81 
     82     @Override
     83     protected Test[] tests() {
     84         mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
     85 
     86         return mTests;
     87     }
     88 
     89     private Test[] mTests = new Test[] {
     90         new Test("Off and sound") {
     91             public void run() {
     92                 PowerManager pm = (PowerManager)NotificationTestList.this.getSystemService(Context.POWER_SERVICE);
     93                 PowerManager.WakeLock wl =
     94                             pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "sound");
     95                 wl.acquire();
     96 
     97                 pm.goToSleep(SystemClock.uptimeMillis());
     98 
     99                 Notification n = new Notification();
    100                 n.sound = Uri.parse("file://" + Environment.getExternalStorageDirectory() +
    101                         "/virtual-void.mp3");
    102                 Log.d(TAG, "n.sound=" + n.sound);
    103 
    104                 mNM.notify(1, n);
    105 
    106                 Log.d(TAG, "releasing wake lock");
    107                 wl.release();
    108                 Log.d(TAG, "released wake lock");
    109             }
    110         },
    111 
    112         new Test("Cancel #1") {
    113             public void run()
    114             {
    115                 mNM.cancel(1);
    116             }
    117         },
    118 
    119         new Test("Button") {
    120             public void run() {
    121                 Notification n = new Notification(R.drawable.icon1, null,
    122                         mActivityCreateTime);
    123                 n.contentView = new RemoteViews(getPackageName(), R.layout.button_notification);
    124                 n.flags |= Notification.FLAG_ONGOING_EVENT;
    125                 n.contentIntent = makeIntent();
    126                 n.contentView.setOnClickPendingIntent(R.id.button, makeIntent2());
    127 
    128                 mNM.notify(1, n);
    129             }
    130         },
    131 
    132         new Test("custom intent on text view") {
    133             public void run() {
    134                 Notification n = new Notification(R.drawable.icon1, null,
    135                         mActivityCreateTime);
    136                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    137                             "This is a notification!!!", null);
    138                 n.contentView.setOnClickPendingIntent(com.android.internal.R.id.text,
    139                         makeIntent2());
    140                 mNM.notify(1, n);
    141             }
    142         },
    143 
    144         new Test("Ticker 1 line") {
    145             public void run() {
    146                 Notification n = new Notification(R.drawable.icon1, "tick tick tick",
    147                         mActivityCreateTime);
    148                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    149                             "This is a notification!!!", makeIntent());
    150                 mNM.notify(1, n);
    151             }
    152         },
    153 
    154         new Test("No view") {
    155             public void run() {
    156                 Notification n = new Notification(R.drawable.icon1, "No view",
    157                         System.currentTimeMillis());
    158                 mNM.notify(1, n);
    159             }
    160         },
    161 
    162         new Test("No intent") {
    163             public void run() {
    164                 Notification n = new Notification(R.drawable.icon1, "No intent",
    165                         System.currentTimeMillis());
    166                 n.setLatestEventInfo(NotificationTestList.this, "No intent",
    167                             "No intent", null);
    168                 mNM.notify(1, n);
    169             }
    170         },
    171 
    172         new Test("Layout") {
    173             public void run()
    174             {
    175                 Notification n;
    176 
    177                 n = new Notification(NotificationTestList.this,
    178                             R.drawable.ic_statusbar_missedcall,
    179                             null, System.currentTimeMillis()-(1000*60*60*24),
    180                             "(453) 123-2328",
    181                             "", null);
    182                 n.flags |= Notification.FLAG_ONGOING_EVENT;
    183 
    184                 mNM.notify(1, n);
    185 
    186                 mNM.notify(2, new Notification(NotificationTestList.this,
    187                             R.drawable.ic_statusbar_email,
    188                             null, System.currentTimeMillis(),
    189                             "Mark Willem, Me (2)",
    190                             "Re: Didn't you get the memo?", null));
    191 
    192                 mNM.notify(3, new Notification(NotificationTestList.this,
    193                             R.drawable.ic_statusbar_chat,
    194                             null, System.currentTimeMillis()+(1000*60*60*24),
    195                             "Sophia Winterlanden",
    196                             "Lorem ipsum dolor sit amet.", null));
    197             }
    198         },
    199 
    200         new Test("Bad Icon #1 (when=create)") {
    201             public void run() {
    202                 Notification n = new Notification(R.layout.chrono_notification /* not an icon */,
    203                         null, mActivityCreateTime);
    204                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    205                             "This is the same notification!!!", makeIntent());
    206                 mNM.notify(1, n);
    207             }
    208         },
    209 
    210         new Test("Bad Icon #1 (when=now)") {
    211             public void run() {
    212                 Notification n = new Notification(R.layout.chrono_notification /* not an icon */,
    213                         null, System.currentTimeMillis());
    214                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    215                             "This is the same notification!!!", makeIntent());
    216                 mNM.notify(1, n);
    217             }
    218         },
    219 
    220         new Test("Null Icon #1 (when=now)") {
    221             public void run() {
    222                 Notification n = new Notification(0, null, System.currentTimeMillis());
    223                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    224                             "This is the same notification!!!", makeIntent());
    225                 mNM.notify(1, n);
    226             }
    227         },
    228 
    229         new Test("Bad resource #1 (when=create)") {
    230             public void run() {
    231                 Notification n = new Notification(R.drawable.icon2,
    232                         null, mActivityCreateTime);
    233                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    234                             "This is the same notification!!!", makeIntent());
    235                 n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
    236                 mNM.notify(1, n);
    237             }
    238         },
    239 
    240         new Test("Bad resource #1 (when=now)") {
    241             public void run() {
    242                 Notification n = new Notification(R.drawable.icon2,
    243                         null, System.currentTimeMillis());
    244                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    245                             "This is the same notification!!!", makeIntent());
    246                 n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
    247                 mNM.notify(1, n);
    248             }
    249         },
    250 
    251 
    252         new Test("Bad resource #3") {
    253             public void run()
    254             {
    255                 Notification n = new Notification(NotificationTestList.this,
    256                             R.drawable.ic_statusbar_missedcall,
    257                             null, System.currentTimeMillis()-(1000*60*60*24),
    258                             "(453) 123-2328",
    259                             "", null);
    260                 n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
    261                 mNM.notify(3, n);
    262             }
    263         },
    264 
    265         new Test("Times") {
    266             public void run()
    267             {
    268                 long now = System.currentTimeMillis();
    269 
    270                 timeNotification(7, "24 hours from now", now+(1000*60*60*24));
    271                 timeNotification(6, "12:01:00 from now", now+(1000*60*60*12)+(60*1000));
    272                 timeNotification(5, "12 hours from now", now+(1000*60*60*12));
    273                 timeNotification(4, "now", now);
    274                 timeNotification(3, "11:59:00 ago", now-((1000*60*60*12)-(60*1000)));
    275                 timeNotification(2, "12 hours ago", now-(1000*60*60*12));
    276                 timeNotification(1, "24 hours ago", now-(1000*60*60*24));
    277             }
    278         },
    279         new StateStress("Stress - Ongoing / Latest", 100, 100, new Runnable[] {
    280                 new Runnable() {
    281                     public void run() {
    282                         Log.d(TAG, "Stress - Ongoing/Latest 0");
    283                         Notification n = new Notification(NotificationTestList.this,
    284                                 R.drawable.icon3,
    285                                 null, System.currentTimeMillis(), "Stress - Ongoing",
    286                                 "Notify me!!!", null);
    287                         n.flags |= Notification.FLAG_ONGOING_EVENT;
    288                         mNM.notify(1, n);
    289                     }
    290                 },
    291                 new Runnable() {
    292                     public void run() {
    293                         Log.d(TAG, "Stress - Ongoing/Latest 1");
    294                         Notification n = new Notification(NotificationTestList.this,
    295                                 R.drawable.icon4,
    296                                 null, System.currentTimeMillis(), "Stress - Latest",
    297                                 "Notify me!!!", null);
    298                         //n.flags |= Notification.FLAG_ONGOING_EVENT;
    299                         mNM.notify(1, n);
    300                     }
    301                 }
    302             }),
    303 
    304         new Test("Long") {
    305             public void run()
    306             {
    307                 Notification n = new Notification();
    308                 n.defaults |= Notification.DEFAULT_SOUND ;
    309                 n.vibrate = new long[] {
    310                         300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
    311                         300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
    312                         300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400 };
    313                 mNM.notify(1, n);
    314             }
    315         },
    316 
    317         new Test("Progress #1") {
    318             public void run() {
    319                 final boolean PROGRESS_UPDATES_WHEN = true;
    320                 if (!mProgressDone) return;
    321                 mProgressDone = false;
    322                 Thread t = new Thread() {
    323                     public void run() {
    324                         int x = 0;
    325                         while (!mProgressDone) {
    326                             Notification n = new Notification(R.drawable.icon1, null,
    327                                     PROGRESS_UPDATES_WHEN
    328                                     ? System.currentTimeMillis()
    329                                     : mActivityCreateTime);
    330                             RemoteViews v = new RemoteViews(getPackageName(),
    331                                     R.layout.progress_notification);
    332 
    333                             v.setProgressBar(R.id.progress_bar, 100, x, false);
    334                             v.setTextViewText(R.id.status_text, "Progress: " + x + "%");
    335 
    336                             n.contentView = v;
    337                             n.flags |= Notification.FLAG_ONGOING_EVENT;
    338 
    339                             mNM.notify(500, n);
    340                             x = (x + 7) % 100;
    341 
    342                             try {
    343                                 Thread.sleep(1000);
    344                             } catch (InterruptedException e) {
    345                                 break;
    346                             }
    347                         }
    348                     }
    349                 };
    350                 t.start();
    351             }
    352         },
    353 
    354         new Test("Stop Progress") {
    355             public void run() {
    356                 mProgressDone = true;
    357                 mNM.cancel(500);
    358             }
    359         },
    360 
    361         new Test("Blue Lights") {
    362             public void run()
    363             {
    364                 Notification n = new Notification();
    365                 n.flags |= Notification.FLAG_SHOW_LIGHTS;
    366                 n.ledARGB = 0xff0000ff;
    367                 n.ledOnMS = 1;
    368                 n.ledOffMS = 0;
    369                 mNM.notify(1, n);
    370             }
    371         },
    372 
    373         new Test("Red Lights") {
    374             public void run()
    375             {
    376                 Notification n = new Notification();
    377                 n.flags |= Notification.FLAG_SHOW_LIGHTS;
    378                 n.ledARGB = 0xffff0000;
    379                 n.ledOnMS = 1;
    380                 n.ledOffMS = 0;
    381                 mNM.notify(1, n);
    382             }
    383         },
    384 
    385         new Test("Yellow Lights") {
    386             public void run()
    387             {
    388                 Notification n = new Notification();
    389                 n.flags |= Notification.FLAG_SHOW_LIGHTS;
    390                 n.ledARGB = 0xffffff00;
    391                 n.ledOnMS = 1;
    392                 n.ledOffMS = 0;
    393                 mNM.notify(1, n);
    394             }
    395         },
    396 
    397         new Test("Lights off") {
    398             public void run()
    399             {
    400                 Notification n = new Notification();
    401                 n.flags |= Notification.FLAG_SHOW_LIGHTS;
    402                 n.ledARGB = 0x00000000;
    403                 n.ledOnMS = 0;
    404                 n.ledOffMS = 0;
    405                 mNM.notify(1, n);
    406             }
    407         },
    408 
    409         new Test("Blue Blinking Slow") {
    410             public void run()
    411             {
    412                 Notification n = new Notification();
    413                 n.flags |= Notification.FLAG_SHOW_LIGHTS;
    414                 n.ledARGB = 0xff0000ff;
    415                 n.ledOnMS = 1300;
    416                 n.ledOffMS = 1300;
    417                 mNM.notify(1, n);
    418             }
    419         },
    420 
    421         new Test("Blue Blinking Fast") {
    422             public void run()
    423             {
    424                 Notification n = new Notification();
    425                 n.flags |= Notification.FLAG_SHOW_LIGHTS;
    426                 n.ledARGB = 0xff0000ff;
    427                 n.ledOnMS = 300;
    428                 n.ledOffMS = 300;
    429                 mNM.notify(1, n);
    430             }
    431         },
    432 
    433         new Test("Default All") {
    434             public void run()
    435             {
    436                 Notification n = new Notification();
    437                 n.defaults |= Notification.DEFAULT_ALL;
    438                 mNM.notify(1, n);
    439             }
    440         },
    441 
    442         new Test("Default All, once") {
    443             public void run()
    444             {
    445                 Notification n = new Notification();
    446                 n.defaults |= Notification.DEFAULT_ALL;
    447                 n.flags |= Notification.FLAG_ONLY_ALERT_ONCE ;
    448                 mNM.notify(1, n);
    449             }
    450         },
    451 
    452         new Test("Content Sound") {
    453             public void run()
    454             {
    455                 Notification n = new Notification();
    456                 n.sound = Uri.parse(
    457                         "content://media/internal/audio/media/7");
    458 
    459                 mNM.notify(1, n);
    460             }
    461         },
    462 
    463         new Test("Resource Sound") {
    464             public void run()
    465             {
    466                 Notification n = new Notification();
    467                 n.sound = Uri.parse(
    468                         ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
    469                         getPackageName() + "/raw/ringer");
    470                 Log.d(TAG, "n.sound=" + n.sound);
    471 
    472                 mNM.notify(1, n);
    473             }
    474         },
    475 
    476         new Test("Sound and Cancel") {
    477             public void run()
    478             {
    479                 Notification n = new Notification();
    480                 n.sound = Uri.parse(
    481                             "content://media/internal/audio/media/7");
    482 
    483                 mNM.notify(1, n);
    484                 SystemClock.sleep(200);
    485                 mNM.cancel(1);
    486             }
    487         },
    488 
    489         new Test("Vibrate") {
    490             public void run()
    491             {
    492                 Notification n = new Notification();
    493                     n.vibrate = new long[] { 0, 700, 500, 1000 };
    494 
    495                 mNM.notify(1, n);
    496             }
    497         },
    498 
    499         new Test("Vibrate and cancel") {
    500             public void run()
    501             {
    502                 Notification n = new Notification();
    503                     n.vibrate = new long[] { 0, 700, 500, 1000 };
    504 
    505                 mNM.notify(1, n);
    506                 SystemClock.sleep(500);
    507                 mNM.cancel(1);
    508             }
    509         },
    510 
    511         new Test("Vibrate pattern") {
    512             public void run()
    513             {
    514                 mVibrator.vibrate(new long[] { 250, 1000, 500, 2000 }, -1);
    515             }
    516         },
    517 
    518         new Test("Vibrate pattern repeating") {
    519             public void run()
    520             {
    521                 mVibrator.vibrate(new long[] { 250, 1000, 500 }, 1);
    522             }
    523         },
    524 
    525         new Test("Vibrate 3s") {
    526             public void run()
    527             {
    528                 mVibrator.vibrate(3000);
    529             }
    530         },
    531 
    532         new Test("Vibrate 100s") {
    533             public void run()
    534             {
    535                 mVibrator.vibrate(100000);
    536             }
    537         },
    538 
    539         new Test("Vibrate off") {
    540             public void run()
    541             {
    542                 mVibrator.cancel();
    543             }
    544         },
    545 
    546         new Test("Cancel #1") {
    547             public void run() {
    548                 mNM.cancel(1);
    549             }
    550         },
    551 
    552         new Test("Cancel #1 in 3 sec") {
    553             public void run() {
    554                 mHandler.postDelayed(new Runnable() {
    555                             public void run() {
    556                                 Log.d(TAG, "Cancelling now...");
    557                                 mNM.cancel(1);
    558                             }
    559                         }, 3000);
    560             }
    561         },
    562 
    563         new Test("Cancel #2") {
    564             public void run() {
    565                 mNM.cancel(2);
    566             }
    567         },
    568 
    569         new Test("Persistent #1") {
    570             public void run() {
    571                 Notification n = new Notification(R.drawable.icon1, "tick tick tick",
    572                         mActivityCreateTime);
    573                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    574                             "This is a notification!!!", makeIntent());
    575                 mNM.notify(1, n);
    576             }
    577         },
    578 
    579         new Test("Persistent #1 in 3 sec") {
    580             public void run() {
    581                 mHandler.postDelayed(new Runnable() {
    582                             public void run() {
    583                                 Notification n = new Notification(R.drawable.icon1,
    584                                         "            "
    585                                         + "tick tock tick tock\n\nSometimes notifications can "
    586                                         + "be really long and wrap to more than one line.\n"
    587                                         + "Sometimes."
    588                                         + "Ohandwhathappensifwehaveonereallylongstringarewesure"
    589                                         + "thatwesegmentitcorrectly?\n",
    590                                         System.currentTimeMillis());
    591                                 n.setLatestEventInfo(NotificationTestList.this,
    592                                         "Still Persistent #1",
    593                                         "This is still a notification!!!",
    594                                         makeIntent());
    595                                 mNM.notify(1, n);
    596                             }
    597                         }, 3000);
    598             }
    599         },
    600 
    601         new Test("Persistent #2") {
    602             public void run() {
    603                 Notification n = new Notification(R.drawable.icon2, "tock tock tock",
    604                         System.currentTimeMillis());
    605                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #2",
    606                             "Notify me!!!", makeIntent());
    607                 mNM.notify(2, n);
    608             }
    609         },
    610 
    611         new Test("Persistent #3") {
    612             public void run() {
    613                 Notification n = new Notification(R.drawable.icon2, "tock tock tock\nmooooo",
    614                         System.currentTimeMillis());
    615                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #3",
    616                             "Notify me!!!", makeIntent());
    617                 mNM.notify(3, n);
    618             }
    619         },
    620 
    621         new Test("Persistent #2 Vibrate") {
    622             public void run() {
    623                 Notification n = new Notification(R.drawable.icon2, "tock tock tock",
    624                         System.currentTimeMillis());
    625                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #2",
    626                             "Notify me!!!", makeIntent());
    627                 n.defaults = Notification.DEFAULT_VIBRATE;
    628                 mNM.notify(2, n);
    629             }
    630         },
    631 
    632         new Test("Persistent #1 - different icon") {
    633             public void run() {
    634                 Notification n = new Notification(R.drawable.icon2, null,
    635                         mActivityCreateTime);
    636                 n.setLatestEventInfo(NotificationTestList.this, "Persistent #1",
    637                             "This is the same notification!!!", makeIntent());
    638                 mNM.notify(1, n);
    639             }
    640         },
    641 
    642         new Test("Chronometer Start") {
    643             public void run() {
    644                 Notification n = new Notification(R.drawable.icon2, "me me me me",
    645                                                     System.currentTimeMillis());
    646                 n.contentView = new RemoteViews(getPackageName(), R.layout.chrono_notification);
    647                 mChronometerBase = SystemClock.elapsedRealtime();
    648                 n.contentView.setChronometer(R.id.time, mChronometerBase, "Yay! (%s)", true);
    649                 n.flags |= Notification.FLAG_ONGOING_EVENT;
    650                 n.contentIntent = makeIntent();
    651                 mNM.notify(2, n);
    652             }
    653         },
    654 
    655         new Test("Chronometer Stop") {
    656             public void run() {
    657                 mHandler.postDelayed(new Runnable() {
    658                         public void run() {
    659                             Log.d(TAG, "Chronometer Stop");
    660                             Notification n = new Notification();
    661                             n.icon = R.drawable.icon1;
    662                             n.contentView = new RemoteViews(getPackageName(),
    663                                                              R.layout.chrono_notification);
    664                             n.contentView.setChronometer(R.id.time, mChronometerBase, null, false);
    665                             n.contentIntent = makeIntent();
    666                             mNM.notify(2, n);
    667                         }
    668                     }, 3000);
    669             }
    670         },
    671 
    672         new Test("Sequential Persistent") {
    673             public void run() {
    674                 mNM.notify(1, notificationWithNumbers(1));
    675                 mNM.notify(2, notificationWithNumbers(2));
    676             }
    677         },
    678 
    679         new Test("Replace Persistent") {
    680             public void run() {
    681                 mNM.notify(1, notificationWithNumbers(1));
    682                 mNM.notify(1, notificationWithNumbers(1));
    683             }
    684         },
    685 
    686         new Test("Run and Cancel (n=1)") {
    687             public void run() {
    688                 mNM.notify(1, notificationWithNumbers(1));
    689                 mNM.cancel(1);
    690             }
    691         },
    692 
    693         new Test("Run an Cancel (n=2)") {
    694             public void run() {
    695                 mNM.notify(1, notificationWithNumbers(1));
    696                 mNM.notify(2, notificationWithNumbers(2));
    697                 mNM.cancel(2);
    698             }
    699         },
    700 
    701         // Repeatedly notify and cancel -- triggers bug #670627
    702         new Test("Bug 670627") {
    703             public void run() {
    704                 for (int i = 0; i < 10; i++) {
    705                   Log.d(TAG, "Add two notifications");
    706                   mNM.notify(1, notificationWithNumbers(1));
    707                   mNM.notify(2, notificationWithNumbers(2));
    708                   Log.d(TAG, "Cancel two notifications");
    709                   mNM.cancel(1);
    710                   mNM.cancel(2);
    711                 }
    712             }
    713         },
    714 
    715         new Test("Ten Notifications") {
    716             public void run() {
    717                 for (int i = 0; i < 2; i++) {
    718                     Notification n = new Notification(
    719                             kNumberedIconResIDs[i],
    720                             null, System.currentTimeMillis());
    721                     n.number = i;
    722                     n.setLatestEventInfo(
    723                             NotificationTestList.this,
    724                             "Persistent #" + i,
    725                             "Notify me!!!" + i,
    726                             null);
    727                     n.flags |= Notification.FLAG_ONGOING_EVENT;
    728                     mNM.notify((i+1)*10, n);
    729                 }
    730                 for (int i = 2; i < 10; i++) {
    731                     Notification n = new Notification(
    732                             kNumberedIconResIDs[i],
    733                             null, System.currentTimeMillis());
    734                     n.number = i;
    735                     n.setLatestEventInfo(
    736                             NotificationTestList.this,
    737                             "Persistent #" + i,
    738                             "Notify me!!!" + i,
    739                             null);
    740                     mNM.notify((i+1)*10, n);
    741                 }
    742             }
    743         },
    744 
    745         new Test("Cancel eight notifications") {
    746             public void run() {
    747                 for (int i = 1; i < 9; i++) {
    748                     mNM.cancel((i+1)*10);
    749                 }
    750             }
    751         },
    752 
    753         new Test("Cancel the other two notifications") {
    754             public void run() {
    755                 mNM.cancel(10);
    756                 mNM.cancel(100);
    757             }
    758         },
    759 
    760         new Test("Persistent with numbers 1") {
    761             public void run() {
    762                 mNM.notify(1, notificationWithNumbers(1));
    763             }
    764         },
    765 
    766         new Test("Persistent with numbers 22") {
    767             public void run() {
    768                 mNM.notify(1, notificationWithNumbers(22));
    769             }
    770         },
    771 
    772         new Test("Persistent with numbers 333") {
    773             public void run() {
    774                 mNM.notify(1, notificationWithNumbers(333));
    775             }
    776         },
    777 
    778         new Test("Persistent with numbers 4444") {
    779             public void run() {
    780                 mNM.notify(1, notificationWithNumbers(4444));
    781             }
    782         },
    783 
    784         new Test("PRIORITY_HIGH") {
    785             public void run() {
    786                 Notification n = new Notification.Builder(NotificationTestList.this)
    787                     .setSmallIcon(R.drawable.notification5)
    788                     .setContentTitle("High priority")
    789                     .setContentText("This should appear before all others")
    790                     .setPriority(Notification.PRIORITY_HIGH)
    791                     .getNotification();
    792 
    793                 int[] idOut = new int[1];
    794                 try {
    795                     INotificationManager directLine = mNM.getService();
    796                     directLine.enqueueNotificationWithTag(
    797                             getPackageName(),
    798                             null,
    799                             100,
    800                             n,
    801                             idOut);
    802                 } catch (android.os.RemoteException ex) {
    803                     // oh well
    804                 }
    805             }
    806         },
    807 
    808         new Test("PRIORITY_MAX") {
    809             public void run() {
    810                 Notification n = new Notification.Builder(NotificationTestList.this)
    811                     .setSmallIcon(R.drawable.notification9)
    812                     .setContentTitle("MAX priority")
    813                     .setContentText("This might appear as an intruder alert")
    814                     .setPriority(Notification.PRIORITY_MAX)
    815                     .getNotification();
    816 
    817                 int[] idOut = new int[1];
    818                 try {
    819                     INotificationManager directLine = mNM.getService();
    820                     directLine.enqueueNotificationWithTag(
    821                             getPackageName(),
    822                             null,
    823                             200,
    824                             n,
    825                             idOut);
    826                 } catch (android.os.RemoteException ex) {
    827                     // oh well
    828                 }
    829             }
    830         },
    831 
    832         new Test("PRIORITY_MIN") {
    833             public void run() {
    834                 Notification n = new Notification.Builder(NotificationTestList.this)
    835                     .setSmallIcon(R.drawable.notification0)
    836                     .setContentTitle("MIN priority")
    837                     .setContentText("You should not see this")
    838                     .setPriority(Notification.PRIORITY_MIN)
    839                     .getNotification();
    840 
    841                 int[] idOut = new int[1];
    842                 try {
    843                     INotificationManager directLine = mNM.getService();
    844                     directLine.enqueueNotificationWithTag(
    845                             getPackageName(),
    846                             null,
    847                             1,
    848                             n,
    849                             idOut);
    850                 } catch (android.os.RemoteException ex) {
    851                     // oh well
    852                 }
    853             }
    854         },
    855 
    856         new Test("Crash") {
    857             public void run()
    858             {
    859                 PowerManager.WakeLock wl
    860                         = ((PowerManager)NotificationTestList.this.getSystemService(Context.POWER_SERVICE))
    861                             .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "crasher");
    862                 wl.acquire();
    863                 mHandler.postDelayed(new Runnable() {
    864                             public void run() {
    865                                 throw new RuntimeException("Die!");
    866                             }
    867                         }, 10000);
    868 
    869             }
    870         },
    871 
    872     };
    873 
    874     private Notification notificationWithNumbers(int num) {
    875         Notification n = new Notification(this,
    876                 (num >= 0 && num < kNumberedIconResIDs.length)
    877                     ? kNumberedIconResIDs[num]
    878                     : kUnnumberedIconResID,
    879                 null,
    880                 System.currentTimeMillis(),
    881                 "Notification", "Number=" + num,
    882                 null);
    883         n.number = num;
    884         return n;
    885     }
    886 
    887     private PendingIntent makeIntent() {
    888         Intent intent = new Intent(Intent.ACTION_MAIN);
    889         intent.addCategory(Intent.CATEGORY_HOME);
    890         return PendingIntent.getActivity(this, 0, intent, 0);
    891     }
    892 
    893     private PendingIntent makeIntent2() {
    894         Intent intent = new Intent(this, StatusBarTest.class);
    895         return PendingIntent.getActivity(this, 0, intent, 0);
    896     }
    897 
    898 
    899     class StateStress extends Test {
    900         StateStress(String name, int pause, int iterations, Runnable[] tasks) {
    901             super(name);
    902             mPause = pause;
    903             mTasks = tasks;
    904             mIteration = iterations;
    905         }
    906         Runnable[] mTasks;
    907         int mNext;
    908         int mIteration;
    909         long mPause;
    910         Runnable mRunnable = new Runnable() {
    911             public void run() {
    912                 mTasks[mNext].run();
    913                 mNext++;
    914                 if (mNext >= mTasks.length) {
    915                     mNext = 0;
    916                     mIteration--;
    917                     if (mIteration <= 0) {
    918                         return;
    919                     }
    920                 }
    921                 mHandler.postDelayed(mRunnable, mPause);
    922             }
    923         };
    924         public void run() {
    925             mNext = 0;
    926             mHandler.postDelayed(mRunnable, mPause);
    927         }
    928     }
    929 
    930     void timeNotification(int n, String label, long time) {
    931         mNM.notify(n, new Notification(NotificationTestList.this,
    932                     R.drawable.ic_statusbar_missedcall, null,
    933                     time, label, "" + new java.util.Date(time), null));
    934 
    935     }
    936 
    937     Bitmap loadBitmap(int resId) {
    938         BitmapDrawable bd = (BitmapDrawable)getResources().getDrawable(resId);
    939         return Bitmap.createBitmap(bd.getBitmap());
    940     }
    941 }
    942 
    943