blob: a4aab7c268b0d40c789b01e06bf247e6c8d6d6a9 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.statusbartest;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioAttributes;
import android.os.Bundle;
import android.os.Vibrator;
import android.os.Handler;
import android.os.UserHandle;
import android.util.Log;
import android.net.Uri;
import android.os.SystemClock;
import android.widget.RemoteViews;
import android.os.PowerManager;
// private NM API
import android.app.INotificationManager;
import android.widget.Toast;
public class NotificationTestList extends TestActivity
{
private final static String TAG = "NotificationTestList";
NotificationManager mNM;
Vibrator mVibrator;
Handler mHandler = new Handler();
long mActivityCreateTime;
long mChronometerBase = 0;
boolean mProgressDone = true;
final int[] kNumberedIconResIDs = {
R.drawable.notification0,
R.drawable.notification1,
R.drawable.notification2,
R.drawable.notification3,
R.drawable.notification4,
R.drawable.notification5,
R.drawable.notification6,
R.drawable.notification7,
R.drawable.notification8,
R.drawable.notification9
};
final int kUnnumberedIconResID = R.drawable.notificationx;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mVibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
mActivityCreateTime = System.currentTimeMillis();
}
@Override
protected String tag() {
return TAG;
}
@Override
protected Test[] tests() {
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
return mTests;
}
private Test[] mTests = new Test[] {
new Test("Phone call") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("phone call")
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"),
new AudioAttributes.Builder().setUsage(
AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build())
.setPriority(Notification.PRIORITY_MAX)
.setVibrate(new long[] {
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400 })
.setFullScreenIntent(makeIntent2(), true)
.build();
mNM.notify(7001, n);
}
},
new Test("Post a group") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority group 1")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_MIN)
.setGroup("group1")
.build();
mNM.notify(6000, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("low priority group 1")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_LOW)
.setGroup("group1")
.build();
mNM.notify(6001, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("default priority group 1")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_DEFAULT)
.setGroup("group1")
.build();
mNM.notify(6002, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("summary group 1")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_MIN)
.setGroup("group1")
.setGroupSummary(true)
.build();
mNM.notify(6003, n);
}
},
new Test("Post a group (2) w/o summary") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority group 2")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_MIN)
.setGroup("group2")
.build();
mNM.notify(6100, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("low priority group 2")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_LOW)
.setGroup("group2")
.build();
mNM.notify(6101, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("default priority group 2")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_DEFAULT)
.setGroup("group2")
.build();
mNM.notify(6102, n);
}
},
new Test("Summary for group 2") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("summary group 2")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_MIN)
.setGroup("group2")
.setGroupSummary(true)
.build();
mNM.notify(6103, n);
}
},
new Test("Group up public-secret") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setGroup("public-secret")
.build();
mNM.notify("public", 7009, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private only notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PRIVATE)
.setGroup("public-secret")
.build();
mNM.notify("no public", 7010, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private version of notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PRIVATE)
.setGroup("public-secret")
.setPublicVersion(new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification of private notification")
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.build())
.build();
mNM.notify("priv with pub", 7011, n);
n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("secret notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_SECRET)
.setGroup("public-secret")
.build();
mNM.notify("secret", 7012, n);
Notification s = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("summary group public-secret")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_MIN)
.setGroup("public-secret")
.setGroupSummary(true)
.build();
mNM.notify(7113, s);
}
},
new Test("Cancel priority autogroup") {
public void run()
{
try {
mNM.cancel(Integer.MAX_VALUE);
} catch (Exception e) {
Toast.makeText(NotificationTestList.this, "cancel failed (yay)",
Toast.LENGTH_LONG).show();
}
}
},
new Test("Min priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_MIN)
.build();
mNM.notify("min", 7000, n);
}
},
new Test("Min priority, high pri flag") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority, high pri flag")
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.setPriority(Notification.PRIORITY_MIN)
.setFullScreenIntent(makeIntent2(), true)
.build();
mNM.notify(7001, n);
}
},
new Test("Low priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Low priority")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_LOW)
.build();
mNM.notify("low", 7002, n);
}
},
new Test("Default priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Default priority")
.setLights(0xff0000ff, 1, 0)
.setPriority(Notification.PRIORITY_DEFAULT)
.build();
mNM.notify("default", 7004, n);
}
},
new Test("High priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("High priority")
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.setPriority(Notification.PRIORITY_HIGH)
.build();
mNM.notify("high", 7006, n);
}
},
new Test("Max priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Max priority")
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.setPriority(Notification.PRIORITY_MAX)
.setFullScreenIntent(makeIntent2(), false)
.build();
mNM.notify("max", 7007, n);
}
},
new Test("Max priority with delay") {
public void run()
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Max priority")
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.setPriority(Notification.PRIORITY_MAX)
.setFullScreenIntent(makeIntent2(), false)
.build();
mNM.notify(7008, n);
}
},
new Test("public notification") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.build();
mNM.notify("public", 7009, n);
}
},
new Test("private notification, no public") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private only notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PRIVATE)
.build();
mNM.notify("no public", 7010, n);
}
},
new Test("private notification, has public") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private version of notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PRIVATE)
.setPublicVersion(new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification of private notification")
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.build())
.build();
mNM.notify("priv with pub", 7011, n);
}
},
new Test("secret notification") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("secret notification")
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setPriority(Notification.PRIORITY_DEFAULT)
.setVisibility(Notification.VISIBILITY_SECRET)
.build();
mNM.notify("secret", 7012, n);
}
},
new Test("Off") {
public void run() {
PowerManager pm = (PowerManager)NotificationTestList.this.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl =
pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "sound");
wl.acquire();
pm.goToSleep(SystemClock.uptimeMillis());
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.build();
Log.d(TAG, "n.sound=" + n.sound);
mNM.notify(1, n);
Log.d(TAG, "releasing wake lock");
wl.release();
Log.d(TAG, "released wake lock");
}
},
new Test("Cancel #1") {
public void run()
{
mNM.cancel(1);
}
},
new Test("Custom Button") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setOngoing(true)
.build();
n.contentView = new RemoteViews(getPackageName(), R.layout.button_notification);
n.contentView.setOnClickPendingIntent(R.id.button, makeIntent2());
mNM.notify(1, n);
}
},
new Test("Action Button") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setOngoing(true)
.addAction(R.drawable.ic_statusbar_chat, "Button", makeIntent2())
.build();
mNM.notify(1, n);
}
},
new Test("with intent") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle("Persistent #1")
.setContentText("This is a notification!!!")
.setContentIntent(makeIntent2())
.setOngoing(true)
.build();
mNM.notify(1, n);
}
},
new Test("Is blocked?") {
public void run() {
Toast.makeText(NotificationTestList.this,
"package enabled? " + mNM.areNotificationsEnabled(),
Toast.LENGTH_LONG).show();
}
},
new Test("importance?") {
public void run() {
Toast.makeText(NotificationTestList.this,
"importance? " + mNM.getImportance(),
Toast.LENGTH_LONG).show();
}
},
new Test("Whens") {
public void run()
{
Notification.Builder n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setContentTitle(name)
.setOngoing(true);
mNM.notify(1, n.setContentTitle("(453) 123-2328")
.setWhen(System.currentTimeMillis()-(1000*60*60*24))
.build());
mNM.notify(1, n.setContentTitle("Mark Willem, Me (2)")
.setWhen(System.currentTimeMillis())
.build());
mNM.notify(1, n.setContentTitle("Sophia Winterlanden")
.setWhen(System.currentTimeMillis() + (1000 * 60 * 60 * 24))
.build());
}
},
new Test("Bad Icon #1 (when=create)") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.layout.chrono_notification /* not an icon */)
.setWhen(mActivityCreateTime)
.setContentTitle("Persistent #1")
.setContentText("This is the same notification!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(1, n);
}
},
new Test("Bad Icon #1 (when=now)") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.layout.chrono_notification /* not an icon */)
.setWhen(System.currentTimeMillis())
.setContentTitle("Persistent #1")
.setContentText("This is the same notification!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(1, n);
}
},
new Test("Null Icon #1 (when=now)") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(0)
.setWhen(System.currentTimeMillis())
.setContentTitle("Persistent #1")
.setContentText("This is the same notification!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(1, n);
}
},
new Test("Bad resource #1 (when=create)") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setWhen(mActivityCreateTime)
.setContentTitle("Persistent #1")
.setContentText("This is the same notification!!")
.setContentIntent(makeIntent())
.build();
n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
mNM.notify(1, n);
}
},
new Test("Bad resource #1 (when=now)") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setWhen(System.currentTimeMillis())
.setContentTitle("Persistent #1")
.setContentText("This is the same notification!!")
.setContentIntent(makeIntent())
.build();
n.contentView.setInt(1 /*bogus*/, "bogus method", 666);
mNM.notify(1, n);
}
},
new Test("Times") {
public void run()
{
long now = System.currentTimeMillis();
timeNotification(7, "24 hours from now", now+(1000*60*60*24));
timeNotification(6, "12:01:00 from now", now+(1000*60*60*12)+(60*1000));
timeNotification(5, "12 hours from now", now+(1000*60*60*12));
timeNotification(4, "now", now);
timeNotification(3, "11:59:00 ago", now-((1000*60*60*12)-(60*1000)));
timeNotification(2, "12 hours ago", now-(1000*60*60*12));
timeNotification(1, "24 hours ago", now-(1000*60*60*24));
}
},
new StateStress("Stress - Ongoing / Latest", 100, 100, new Runnable[] {
new Runnable() {
public void run() {
Log.d(TAG, "Stress - Ongoing/Latest 0");
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon3)
.setWhen(System.currentTimeMillis())
.setContentTitle("Stress - Ongoing")
.setContentText("Notify me!!!")
.setOngoing(true)
.build();
mNM.notify(1, n);
}
},
new Runnable() {
public void run() {
Log.d(TAG, "Stress - Ongoing/Latest 1");
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon4)
.setWhen(System.currentTimeMillis())
.setContentTitle("Stress - Latest")
.setContentText("Notify me!!!")
.build();
mNM.notify(1, n);
}
}
}),
new Test("Long") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setContentTitle(name)
.setDefaults(Notification.DEFAULT_SOUND)
.setVibrate(new long[] {
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400 })
.build();
mNM.notify(1, n);
}
},
new Test("Progress #1") {
public void run() {
final boolean PROGRESS_UPDATES_WHEN = true;
if (!mProgressDone) return;
mProgressDone = false;
Thread t = new Thread() {
public void run() {
int x = 0;
final Notification.Builder n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setContentTitle(name)
.setOngoing(true);
while (!mProgressDone) {
n.setWhen(PROGRESS_UPDATES_WHEN
? System.currentTimeMillis()
: mActivityCreateTime);
n.setProgress(100, x, false);
n.setContentText("Progress: " + x + "%");
mNM.notify(500, n.build());
x = (x + 7) % 100;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
}
}
};
t.start();
}
},
new Test("Stop Progress") {
public void run() {
mProgressDone = true;
mNM.cancel(500);
}
},
new Test("Blue Lights") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS)
.build();
mNM.notify(1, n);
}
},
new Test("Red Lights") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setLights(0xffff0000, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS)
.build();
mNM.notify(1, n);
}
},
new Test("Yellow Lights") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setLights(0xffffff00, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS)
.build();
mNM.notify(1, n);
}
},
new Test("Lights off") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setLights(0x00000000, 0, 0)
.setDefaults(Notification.DEFAULT_LIGHTS)
.build();
mNM.notify(1, n);
}
},
new Test("Blue Blinking Slow") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setLights(0xff0000ff, 1300, 1300)
.setDefaults(Notification.DEFAULT_LIGHTS)
.build();
mNM.notify(1, n);
}
},
new Test("Blue Blinking Fast") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setLights(0xff0000ff, 300, 300)
.setDefaults(Notification.DEFAULT_LIGHTS)
.build();
mNM.notify(1, n);
}
},
new Test("Default All") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setDefaults(Notification.DEFAULT_ALL)
.build();
mNM.notify(1, n);
}
},
new Test("Default All, once") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setOnlyAlertOnce(true)
.setDefaults(Notification.DEFAULT_ALL)
.build();
mNM.notify(1, n);
}
},
new Test("Resource Sound") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.build();
Log.d(TAG, "n.sound=" + n.sound);
mNM.notify(1, n);
}
},
new Test("Sound and Cancel") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"))
.build();
Log.d(TAG, "n.sound=" + n.sound);
mNM.notify(1, n);
SystemClock.sleep(200);
mNM.cancel(1);
}
},
new Test("Vibrate") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.setVibrate(new long[]{0, 700, 500, 1000})
.build();
mNM.notify(1, n);
}
},
new Test("Vibrate and cancel") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.setVibrate(new long[]{0, 700, 500, 1000})
.build();
mNM.notify(1, n);
SystemClock.sleep(500);
mNM.cancel(1);
}
},
new Test("Vibrate pattern") {
public void run()
{
mVibrator.vibrate(new long[] { 250, 1000, 500, 2000 }, -1);
}
},
new Test("Vibrate pattern repeating") {
public void run()
{
mVibrator.vibrate(new long[] { 250, 1000, 500 }, 1);
}
},
new Test("Vibrate 3s") {
public void run()
{
mVibrator.vibrate(3000);
}
},
new Test("Vibrate 100s") {
public void run()
{
mVibrator.vibrate(100000);
}
},
new Test("Vibrate off") {
public void run()
{
mVibrator.cancel();
}
},
new Test("Cancel #1") {
public void run() {
mNM.cancel(1);
}
},
new Test("Cancel #1 in 3 sec") {
public void run() {
mHandler.postDelayed(new Runnable() {
public void run() {
Log.d(TAG, "Cancelling now...");
mNM.cancel(1);
}
}, 3000);
}
},
new Test("Cancel #2") {
public void run() {
mNM.cancel(2);
}
},
new Test("Persistent #1") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setContentText("This is a notification!!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(1, n);
}
},
new Test("Persistent #1 in 3 sec") {
public void run() {
mHandler.postDelayed(new Runnable() {
public void run() {
String message = " "
+ "tick tock tick tock\n\nSometimes notifications can "
+ "be really long and wrap to more than one line.\n"
+ "Sometimes."
+ "Ohandwhathappensifwehaveonereallylongstringarewesure"
+ "thatwesegmentitcorrectly?\n";
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setContentTitle(name)
.setContentText("This is still a notification!!!")
.setContentIntent(makeIntent())
.setStyle(new Notification.BigTextStyle().bigText(message))
.build();
mNM.notify(1, n);
}
}, 3000);
}
},
new Test("Persistent #2") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setContentText("This is a notification!!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(2, n);
}
},
new Test("Persistent #3") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setContentText("This is a notification!!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(3, n);
}
},
new Test("Persistent #2 Vibrate") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setContentText("This is a notification!!!")
.setContentIntent(makeIntent())
.setDefaults(Notification.DEFAULT_VIBRATE)
.build();
mNM.notify(2, n);
}
},
new Test("Persistent #1 - different icon") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setContentText("This is a notification!!!")
.setContentIntent(makeIntent())
.build();
mNM.notify(1, n);
}
},
new Test("Chronometer Start") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(System.currentTimeMillis())
.setContentTitle(name)
.setContentIntent(makeIntent())
.setOngoing(true)
.setUsesChronometer(true)
.build();
mNM.notify(2, n);
}
},
new Test("Chronometer Stop") {
public void run() {
mHandler.postDelayed(new Runnable() {
public void run() {
Log.d(TAG, "Chronometer Stop");
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon1)
.setWhen(System.currentTimeMillis())
.setContentTitle(name)
.setContentIntent(makeIntent())
.build();
mNM.notify(2, n);
}
}, 3000);
}
},
new Test("Sequential Persistent") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 1));
mNM.notify(2, notificationWithNumbers(name, 2));
}
},
new Test("Replace Persistent") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 1));
mNM.notify(1, notificationWithNumbers(name, 1));
}
},
new Test("Run and Cancel (n=1)") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 1));
mNM.cancel(1);
}
},
new Test("Run an Cancel (n=2)") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 1));
mNM.notify(2, notificationWithNumbers(name, 2));
mNM.cancel(2);
}
},
// Repeatedly notify and cancel -- triggers bug #670627
new Test("Bug 670627") {
public void run() {
for (int i = 0; i < 10; i++) {
Log.d(TAG, "Add two notifications");
mNM.notify(1, notificationWithNumbers(name, 1));
mNM.notify(2, notificationWithNumbers(name, 2));
Log.d(TAG, "Cancel two notifications");
mNM.cancel(1);
mNM.cancel(2);
}
}
},
new Test("Ten Notifications") {
public void run() {
for (int i = 0; i < 10; i++) {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(kNumberedIconResIDs[i])
.setContentTitle("Persistent #" + i)
.setContentText("Notify me!!!" + i)
.setOngoing(i < 2)
.setNumber(i)
.build();
mNM.notify((i+1)*10, n);
}
}
},
new Test("Cancel eight notifications") {
public void run() {
for (int i = 1; i < 9; i++) {
mNM.cancel((i+1)*10);
}
}
},
new Test("Cancel the other two notifications") {
public void run() {
mNM.cancel(10);
mNM.cancel(100);
}
},
new Test("Persistent with numbers 1") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 1));
}
},
new Test("Persistent with numbers 22") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 22));
}
},
new Test("Persistent with numbers 333") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 333));
}
},
new Test("Persistent with numbers 4444") {
public void run() {
mNM.notify(1, notificationWithNumbers(name, 4444));
}
},
new Test("PRIORITY_HIGH") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.notification5)
.setContentTitle("High priority")
.setContentText("This should appear before all others")
.setPriority(Notification.PRIORITY_HIGH)
.build();
int[] idOut = new int[1];
try {
INotificationManager directLine = mNM.getService();
directLine.enqueueNotificationWithTag(
getPackageName(),
getPackageName(),
null,
100,
n,
idOut,
UserHandle.myUserId());
} catch (android.os.RemoteException ex) {
// oh well
}
}
},
new Test("PRIORITY_MAX") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.notification9)
.setContentTitle("MAX priority")
.setContentText("This might appear as an intruder alert")
.setPriority(Notification.PRIORITY_MAX)
.build();
int[] idOut = new int[1];
try {
INotificationManager directLine = mNM.getService();
directLine.enqueueNotificationWithTag(
getPackageName(),
getPackageName(),
null,
200,
n,
idOut,
UserHandle.myUserId());
} catch (android.os.RemoteException ex) {
// oh well
}
}
},
new Test("PRIORITY_MIN") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.notification0)
.setContentTitle("MIN priority")
.setContentText("You should not see this")
.setPriority(Notification.PRIORITY_MIN)
.build();
int[] idOut = new int[1];
try {
INotificationManager directLine = mNM.getService();
directLine.enqueueNotificationWithTag(
getPackageName(),
getPackageName(),
null,
1,
n,
idOut,
UserHandle.myUserId());
} catch (android.os.RemoteException ex) {
// oh well
}
}
},
new Test("Crash") {
public void run()
{
PowerManager.WakeLock wl
= ((PowerManager)NotificationTestList.this.getSystemService(Context.POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "crasher");
wl.acquire();
mHandler.postDelayed(new Runnable() {
public void run() {
throw new RuntimeException("Die!");
}
}, 10000);
}
},
};
private Notification notificationWithNumbers(String name, int num) {
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon((num >= 0 && num < kNumberedIconResIDs.length)
? kNumberedIconResIDs[num]
: kUnnumberedIconResID)
.setContentTitle(name)
.setContentText("Number=" + num)
.setNumber(num)
.build();
return n;
}
private PendingIntent makeIntent() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
return PendingIntent.getActivity(this, 0, intent, 0);
}
private PendingIntent makeIntent2() {
Intent intent = new Intent(this, StatusBarTest.class);
return PendingIntent.getActivity(this, 0, intent, 0);
}
class StateStress extends Test {
StateStress(String name, int pause, int iterations, Runnable[] tasks) {
super(name);
mPause = pause;
mTasks = tasks;
mIteration = iterations;
}
Runnable[] mTasks;
int mNext;
int mIteration;
long mPause;
Runnable mRunnable = new Runnable() {
public void run() {
mTasks[mNext].run();
mNext++;
if (mNext >= mTasks.length) {
mNext = 0;
mIteration--;
if (mIteration <= 0) {
return;
}
}
mHandler.postDelayed(mRunnable, mPause);
}
};
public void run() {
mNext = 0;
mHandler.postDelayed(mRunnable, mPause);
}
}
void timeNotification(int n, String label, long time) {
mNM.notify(n, new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.ic_statusbar_missedcall)
.setWhen(time)
.setContentTitle(label)
.setContentText(new java.util.Date(time).toString())
.build());
}
Bitmap loadBitmap(int resId) {
BitmapDrawable bd = (BitmapDrawable)getResources().getDrawable(resId);
return Bitmap.createBitmap(bd.getBitmap());
}
}