blob: ef324e7c1377def1bf43880699d6839913e0dc13 [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 static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_MIN;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Icon;
import android.media.AudioAttributes;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemClock;
import android.os.Vibrator;
import android.util.Log;
import android.widget.RemoteViews;
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();
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNM.createNotificationChannel(new NotificationChannel("min", "Min", IMPORTANCE_MIN));
mNM.createNotificationChannel(new NotificationChannel("low", "Low", IMPORTANCE_LOW));
mNM.createNotificationChannel(
new NotificationChannel("default", "Default", IMPORTANCE_DEFAULT));
mNM.createNotificationChannel(new NotificationChannel("high", "High", IMPORTANCE_HIGH));
}
@Override
protected String tag() {
return TAG;
}
@Override
protected Test[] tests() {
return mTests;
}
private Test[] mTests = new Test[] {
new Test("cancel all") {
public void run() {
mNM.cancelAll();
}
},
new Test("Phone call") {
public void run()
{
NotificationChannel phoneCall =
new NotificationChannel("phone call", "Phone Call", IMPORTANCE_HIGH);
phoneCall.setVibrationPattern(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 });
phoneCall.enableVibration(true);
phoneCall.setLightColor(0xff0000ff);
phoneCall.enableLights(true);
phoneCall.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"),
new AudioAttributes.Builder().setUsage(
AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build());
Notification n = new Notification.Builder(NotificationTestList.this,
"phone call")
.setSmallIcon(R.drawable.icon2)
.setFullScreenIntent(makeIntent2(), true)
.build();
mNM.notify(7001, n);
}
},
new Test("with zen") {
public void run()
{
mNM.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALARMS);
Notification n = new Notification.Builder(NotificationTestList.this,
"default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Default priority")
.build();
mNM.notify("default", 7004, n);
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mNM.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
}
},
new Test("repeated") {
public void run()
{
for (int i = 0; i < 50; i++) {
Notification n = new Notification.Builder(NotificationTestList.this,
"default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Default priority")
.build();
mNM.notify("default", 7004, n);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
},
new Test("Post a group") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "min")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority group 1")
.setGroup("group1")
.build();
mNM.notify(6000, n);
n = new Notification.Builder(NotificationTestList.this, "low")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("low priority group 1")
.setGroup("group1")
.build();
mNM.notify(6001, n);
n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("default priority group 1")
.setGroup("group1")
.setOngoing(true)
.setColor(Color.WHITE)
.setColorized(true)
.build();
mNM.notify(6002, n);
n = new Notification.Builder(NotificationTestList.this, "low")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("summary group 1")
.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, "min")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority group 2")
.setGroup("group2")
.build();
mNM.notify(6100, n);
n = new Notification.Builder(NotificationTestList.this, "low")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("low priority group 2")
.setGroup("group2")
.build();
mNM.notify(6101, n);
n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("default priority group 2")
.setGroup("group2")
.build();
mNM.notify(6102, n);
}
},
new Test("Summary for group 2") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "min")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("summary group 2")
.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, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification")
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setGroup("public-secret")
.build();
mNM.notify("public", 7009, n);
n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private only notification")
.setVisibility(Notification.VISIBILITY_PRIVATE)
.setGroup("public-secret")
.build();
mNM.notify("no public", 7010, n);
n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private version of notification")
.setVisibility(Notification.VISIBILITY_PRIVATE)
.setGroup("public-secret")
.setPublicVersion(new Notification.Builder(
NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification of private notification")
.setVisibility(Notification.VISIBILITY_PUBLIC)
.build())
.build();
mNM.notify("priv with pub", 7011, n);
n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("secret notification")
.setVisibility(Notification.VISIBILITY_SECRET)
.setGroup("public-secret")
.build();
mNM.notify("secret", 7012, n);
Notification s = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("summary group public-secret")
.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, "min")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Min priority")
.setTicker("Min priority")
.build();
mNM.notify("min", 7000, n);
}
},
new Test("Low priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "low")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Low priority")
.setTicker("Low priority")
.build();
mNM.notify("low", 7002, n);
}
},
new Test("Default priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Default priority")
.build();
mNM.notify("default", 7004, n);
}
},
new Test("High priority") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "high")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("High priority")
.setTicker("High priority")
.build();
mNM.notify("high", 7006, n);
}
},
new Test("high priority with delay") {
public void run()
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
Notification n = new Notification.Builder(NotificationTestList.this, "high")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("High priority")
.setFullScreenIntent(makeIntent2(), false)
.build();
mNM.notify(7008, n);
}
},
new Test("public notification") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification")
.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, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private only notification")
.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, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("private version of notification")
.setVisibility(Notification.VISIBILITY_PRIVATE)
.setPublicVersion(new Notification.Builder(
NotificationTestList.this, "low")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("public notification of private notification")
.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, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("secret notification")
.setVisibility(Notification.VISIBILITY_SECRET)
.build();
mNM.notify("secret", 7012, n);
}
},
new Test("1 minute timeout") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("timeout in a minute")
.setTimeoutAfter(System.currentTimeMillis() + (1000 * 60))
.build();
mNM.notify("timeout_min", 7013, n);
}
},
new Test("Colorized") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("RED IS BEST")
.setContentText("or is blue?")
.setTimeoutAfter(System.currentTimeMillis() + (1000 * 60))
.setColor(Color.RED)
.setFlag(Notification.FLAG_ONGOING_EVENT, true)
.setColorized(true)
.build();
mNM.notify("timeout_min", 7013, n);
}
},
new Test("Too many cancels") {
public void run()
{
mNM.cancelAll();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle("Cancel then post")
.setContentText("instead of just updating the existing notification")
.build();
mNM.notify("cancel_madness", 7014, 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, "default")
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.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() {
RemoteViews view = new RemoteViews(getPackageName(), R.layout.button_notification);
view.setOnClickPendingIntent(R.id.button, makeIntent2());
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setOngoing(true)
.setCustomContentView(view)
.build();
mNM.notify(1, n);
}
},
new Test("Action Button") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon1)
.setWhen(mActivityCreateTime)
.setContentTitle(name)
.setOngoing(true)
.addAction(new Notification.Action.Builder(
Icon.createWithResource(NotificationTestList.this,
R.drawable.ic_statusbar_chat),
"Button", makeIntent2())
.build())
.build();
mNM.notify(1, n);
}
},
new Test("with intent") {
public void run() {
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.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, "default")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.setSmallIcon(R.drawable.icon4)
.setWhen(System.currentTimeMillis())
.setContentTitle("Stress - Latest")
.setContentText("Notify me!!!")
.build();
mNM.notify(1, n);
}
}
}),
new Test("Long") {
public void run()
{
NotificationChannel channel = new NotificationChannel("v. noisy",
"channel for sound and a custom vibration", IMPORTANCE_DEFAULT);
channel.enableVibration(true);
channel.setVibrationPattern(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 });
mNM.createNotificationChannel(channel);
Notification n = new Notification.Builder(NotificationTestList.this, "v. noisy")
.setSmallIcon(R.drawable.icon1)
.setContentTitle(name)
.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, "low")
.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()
{
NotificationChannel channel = new NotificationChannel("blue",
"blue", IMPORTANCE_DEFAULT);
channel.enableLights(true);
channel.setLightColor(0xff0000ff);
mNM.createNotificationChannel(channel);
Notification n = new Notification.Builder(NotificationTestList.this, "blue")
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.build();
mNM.notify(1, n);
}
},
new Test("Red Lights") {
public void run()
{
NotificationChannel channel = new NotificationChannel("red",
"red", IMPORTANCE_DEFAULT);
channel.enableLights(true);
channel.setLightColor(0xffff0000);
mNM.createNotificationChannel(channel);
Notification n = new Notification.Builder(NotificationTestList.this, "red")
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.build();
mNM.notify(1, n);
}
},
new Test("Lights off") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "default")
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.build();
mNM.notify(1, n);
}
},
new Test("Alert once") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this, "high")
.setSmallIcon(R.drawable.icon2)
.setContentTitle(name)
.setOnlyAlertOnce(true)
.build();
mNM.notify(1, n);
}
},
new Test("Resource Sound") {
public void run()
{
NotificationChannel channel = new NotificationChannel("res_sound",
"resource sound", IMPORTANCE_DEFAULT);
channel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"), Notification.AUDIO_ATTRIBUTES_DEFAULT);
mNM.createNotificationChannel(channel);
Notification n = new Notification.Builder(NotificationTestList.this, "res_sound")
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.build();
Log.d(TAG, "n.sound=" + n.sound);
mNM.notify(1, n);
}
},
new Test("Sound and Cancel") {
public void run()
{
NotificationChannel channel = new NotificationChannel("res_sound",
"resource sound", IMPORTANCE_DEFAULT);
channel.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"), Notification.AUDIO_ATTRIBUTES_DEFAULT);
mNM.createNotificationChannel(channel);
Notification n = new Notification.Builder(NotificationTestList.this, "res_sound")
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.build();
mNM.notify(1, n);
SystemClock.sleep(600);
mNM.cancel(1);
}
},
new Test("Vibrate and cancel") {
public void run()
{
NotificationChannel channel = new NotificationChannel("vibrate",
"vibrate", IMPORTANCE_DEFAULT);
channel.enableVibration(true);
channel.setVibrationPattern(new long[] {0, 700, 500, 1000, 0, 700, 500, 1000,
0, 700, 500, 1000, 0, 700, 500, 1000, 0, 700, 500, 1000, 0, 700, 500, 1000,
0, 700, 500, 1000, 0, 700, 500, 1000});
mNM.createNotificationChannel(channel);
Notification n = new Notification.Builder(NotificationTestList.this, "vibrate")
.setSmallIcon(R.drawable.stat_sys_phone)
.setContentTitle(name)
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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, "low")
.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("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, "low")
.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, PendingIntent.FLAG_MUTABLE_UNAUDITED);
}
private PendingIntent makeIntent2() {
Intent intent = new Intent(this, StatusBarTest.class);
return PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_MUTABLE_UNAUDITED);
}
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, "low")
.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());
}
}