From 7edddb4961c7c64f8d2a06495f742e04b5cc7696 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Mon, 6 Apr 2015 16:49:28 -0400 Subject: Tests for Notification object construction and parceling. The tests use the new hidden Parcel APIs (if available on the running platform) to emit statistics about ashmem usage. Bug: 20153922 Bug: 20079551 Change-Id: I400d2a932f297e582c335389570f93c0d4a19fc9 --- tests/notification/Android.mk | 16 + tests/notification/AndroidManifest.xml | 28 ++ .../res/drawable-nodpi/arubin_hed.jpeg | Bin 0 -> 7568 bytes tests/notification/res/drawable-nodpi/bucket.png | Bin 0 -> 50391 bytes .../notification/res/drawable-nodpi/matias_hed.jpg | Bin 0 -> 15835 bytes tests/notification/res/drawable-nodpi/page_hed.jpg | Bin 0 -> 9186 bytes .../res/drawable-nodpi/romainguy_hed.jpg | Bin 0 -> 19692 bytes .../res/drawable-nodpi/romainguy_rockaway.jpg | Bin 0 -> 414841 bytes tests/notification/res/drawable-xhdpi/add.png | Bin 0 -> 211 bytes .../res/drawable-xhdpi/ic_dial_action_call.png | Bin 0 -> 3629 bytes .../res/drawable-xhdpi/ic_end_call.png | Bin 0 -> 2774 bytes .../res/drawable-xhdpi/ic_media_next.png | Bin 0 -> 1364 bytes .../res/drawable-xhdpi/ic_menu_upload.png | Bin 0 -> 1142 bytes tests/notification/res/drawable-xhdpi/icon.png | Bin 0 -> 485 bytes .../res/drawable-xhdpi/stat_notify_alarm.png | Bin 0 -> 1750 bytes .../res/drawable-xhdpi/stat_notify_calendar.png | Bin 0 -> 823 bytes .../res/drawable-xhdpi/stat_notify_email.png | Bin 0 -> 1055 bytes .../res/drawable-xhdpi/stat_notify_missed_call.png | Bin 0 -> 1355 bytes .../res/drawable-xhdpi/stat_notify_sms.png | Bin 0 -> 1207 bytes .../res/drawable-xhdpi/stat_notify_snooze.png | Bin 0 -> 2298 bytes .../drawable-xhdpi/stat_notify_snooze_longer.png | Bin 0 -> 2302 bytes .../res/drawable-xhdpi/stat_notify_talk_text.png | Bin 0 -> 1282 bytes .../res/drawable-xhdpi/stat_sys_phone_call.png | Bin 0 -> 1164 bytes tests/notification/res/layout/full_screen.xml | 13 + tests/notification/res/layout/main.xml | 11 + tests/notification/res/values/dimens.xml | 23 + tests/notification/res/values/strings.xml | 10 + .../tests/notification/NotificationTests.java | 494 +++++++++++++++++++++ 28 files changed, 595 insertions(+) create mode 100644 tests/notification/Android.mk create mode 100644 tests/notification/AndroidManifest.xml create mode 100644 tests/notification/res/drawable-nodpi/arubin_hed.jpeg create mode 100644 tests/notification/res/drawable-nodpi/bucket.png create mode 100644 tests/notification/res/drawable-nodpi/matias_hed.jpg create mode 100644 tests/notification/res/drawable-nodpi/page_hed.jpg create mode 100644 tests/notification/res/drawable-nodpi/romainguy_hed.jpg create mode 100644 tests/notification/res/drawable-nodpi/romainguy_rockaway.jpg create mode 100644 tests/notification/res/drawable-xhdpi/add.png create mode 100644 tests/notification/res/drawable-xhdpi/ic_dial_action_call.png create mode 100644 tests/notification/res/drawable-xhdpi/ic_end_call.png create mode 100644 tests/notification/res/drawable-xhdpi/ic_media_next.png create mode 100644 tests/notification/res/drawable-xhdpi/ic_menu_upload.png create mode 100644 tests/notification/res/drawable-xhdpi/icon.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_alarm.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_calendar.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_email.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_missed_call.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_sms.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_snooze.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_snooze_longer.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_notify_talk_text.png create mode 100644 tests/notification/res/drawable-xhdpi/stat_sys_phone_call.png create mode 100644 tests/notification/res/layout/full_screen.xml create mode 100644 tests/notification/res/layout/main.xml create mode 100644 tests/notification/res/values/dimens.xml create mode 100644 tests/notification/res/values/strings.xml create mode 100644 tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java (limited to 'tests') diff --git a/tests/notification/Android.mk b/tests/notification/Android.mk new file mode 100644 index 0000000..0669553 --- /dev/null +++ b/tests/notification/Android.mk @@ -0,0 +1,16 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +# We only want this apk build for tests. +LOCAL_MODULE_TAGS := tests + +# Include all test java files. +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_JAVA_LIBRARIES := android.test.runner +LOCAL_PACKAGE_NAME := NotificationTests + +LOCAL_SDK_VERSION := 21 + +include $(BUILD_PACKAGE) + diff --git a/tests/notification/AndroidManifest.xml b/tests/notification/AndroidManifest.xml new file mode 100644 index 0000000..7cee00a --- /dev/null +++ b/tests/notification/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/tests/notification/res/drawable-nodpi/arubin_hed.jpeg b/tests/notification/res/drawable-nodpi/arubin_hed.jpeg new file mode 100644 index 0000000..c6d8ae9 Binary files /dev/null and b/tests/notification/res/drawable-nodpi/arubin_hed.jpeg differ diff --git a/tests/notification/res/drawable-nodpi/bucket.png b/tests/notification/res/drawable-nodpi/bucket.png new file mode 100644 index 0000000..c865649 Binary files /dev/null and b/tests/notification/res/drawable-nodpi/bucket.png differ diff --git a/tests/notification/res/drawable-nodpi/matias_hed.jpg b/tests/notification/res/drawable-nodpi/matias_hed.jpg new file mode 100644 index 0000000..8cc3081 Binary files /dev/null and b/tests/notification/res/drawable-nodpi/matias_hed.jpg differ diff --git a/tests/notification/res/drawable-nodpi/page_hed.jpg b/tests/notification/res/drawable-nodpi/page_hed.jpg new file mode 100644 index 0000000..ea950c8 Binary files /dev/null and b/tests/notification/res/drawable-nodpi/page_hed.jpg differ diff --git a/tests/notification/res/drawable-nodpi/romainguy_hed.jpg b/tests/notification/res/drawable-nodpi/romainguy_hed.jpg new file mode 100644 index 0000000..5b7643e Binary files /dev/null and b/tests/notification/res/drawable-nodpi/romainguy_hed.jpg differ diff --git a/tests/notification/res/drawable-nodpi/romainguy_rockaway.jpg b/tests/notification/res/drawable-nodpi/romainguy_rockaway.jpg new file mode 100644 index 0000000..68473ba Binary files /dev/null and b/tests/notification/res/drawable-nodpi/romainguy_rockaway.jpg differ diff --git a/tests/notification/res/drawable-xhdpi/add.png b/tests/notification/res/drawable-xhdpi/add.png new file mode 100644 index 0000000..7226b3d Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/add.png differ diff --git a/tests/notification/res/drawable-xhdpi/ic_dial_action_call.png b/tests/notification/res/drawable-xhdpi/ic_dial_action_call.png new file mode 100644 index 0000000..ca20a91 Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/ic_dial_action_call.png differ diff --git a/tests/notification/res/drawable-xhdpi/ic_end_call.png b/tests/notification/res/drawable-xhdpi/ic_end_call.png new file mode 100644 index 0000000..c464a6d Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/ic_end_call.png differ diff --git a/tests/notification/res/drawable-xhdpi/ic_media_next.png b/tests/notification/res/drawable-xhdpi/ic_media_next.png new file mode 100644 index 0000000..4def965 Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/ic_media_next.png differ diff --git a/tests/notification/res/drawable-xhdpi/ic_menu_upload.png b/tests/notification/res/drawable-xhdpi/ic_menu_upload.png new file mode 100644 index 0000000..f1438ed Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/ic_menu_upload.png differ diff --git a/tests/notification/res/drawable-xhdpi/icon.png b/tests/notification/res/drawable-xhdpi/icon.png new file mode 100644 index 0000000..189e85b Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/icon.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_alarm.png b/tests/notification/res/drawable-xhdpi/stat_notify_alarm.png new file mode 100644 index 0000000..658d04f Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_alarm.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_calendar.png b/tests/notification/res/drawable-xhdpi/stat_notify_calendar.png new file mode 100644 index 0000000..5ae7782 Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_calendar.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_email.png b/tests/notification/res/drawable-xhdpi/stat_notify_email.png new file mode 100644 index 0000000..23c4672 Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_email.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_missed_call.png b/tests/notification/res/drawable-xhdpi/stat_notify_missed_call.png new file mode 100644 index 0000000..8719eff Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_missed_call.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_sms.png b/tests/notification/res/drawable-xhdpi/stat_notify_sms.png new file mode 100644 index 0000000..323cb3d Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_sms.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_snooze.png b/tests/notification/res/drawable-xhdpi/stat_notify_snooze.png new file mode 100644 index 0000000..26dcda35 Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_snooze.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_snooze_longer.png b/tests/notification/res/drawable-xhdpi/stat_notify_snooze_longer.png new file mode 100644 index 0000000..b8b2f8a Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_snooze_longer.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_notify_talk_text.png b/tests/notification/res/drawable-xhdpi/stat_notify_talk_text.png new file mode 100644 index 0000000..12cae9f Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_notify_talk_text.png differ diff --git a/tests/notification/res/drawable-xhdpi/stat_sys_phone_call.png b/tests/notification/res/drawable-xhdpi/stat_sys_phone_call.png new file mode 100644 index 0000000..db42b7c Binary files /dev/null and b/tests/notification/res/drawable-xhdpi/stat_sys_phone_call.png differ diff --git a/tests/notification/res/layout/full_screen.xml b/tests/notification/res/layout/full_screen.xml new file mode 100644 index 0000000..6ff7552 --- /dev/null +++ b/tests/notification/res/layout/full_screen.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/tests/notification/res/layout/main.xml b/tests/notification/res/layout/main.xml new file mode 100644 index 0000000..f5a740f --- /dev/null +++ b/tests/notification/res/layout/main.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/tests/notification/res/values/dimens.xml b/tests/notification/res/values/dimens.xml new file mode 100644 index 0000000..21e7bc3 --- /dev/null +++ b/tests/notification/res/values/dimens.xml @@ -0,0 +1,23 @@ + + + + + 64dp + + 64dp + diff --git a/tests/notification/res/values/strings.xml b/tests/notification/res/values/strings.xml new file mode 100644 index 0000000..80bf103 --- /dev/null +++ b/tests/notification/res/values/strings.xml @@ -0,0 +1,10 @@ + + + Hello World, NotificationShowcaseActivity! + NotificationShowcase + Post Notifications + Remove Notifications + call answered + call ignored + Full Screen Activity + diff --git a/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java b/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java new file mode 100644 index 0000000..7cda977 --- /dev/null +++ b/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java @@ -0,0 +1,494 @@ +/* + * Copyright (C) 2015 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 android.app; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Typeface; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Parcel; +import android.os.SystemClock; +import android.provider.ContactsContract; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.Suppress; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.StyleSpan; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import java.lang.reflect.Method; +import java.lang.InterruptedException; +import java.lang.NoSuchMethodError; +import java.lang.NoSuchMethodException; +import java.util.ArrayList; + +import com.android.frameworks.tests.notification.R; + +public class NotificationTests extends AndroidTestCase { + private static final String TAG = "NOTEST"; + public static void L(String msg, Object... args) { + Log.v(TAG, (args == null || args.length == 0) ? msg : String.format(msg, args)); + } + + public static final String ACTION_CREATE = "create"; + public static final int NOTIFICATION_ID = 31338; + + public static final boolean SHOW_PHONE_CALL = false; + public static final boolean SHOW_INBOX = true; + public static final boolean SHOW_BIG_TEXT = true; + public static final boolean SHOW_BIG_PICTURE = true; + public static final boolean SHOW_MEDIA = true; + public static final boolean SHOW_STOPWATCH = false; + public static final boolean SHOW_SOCIAL = false; + public static final boolean SHOW_CALENDAR = false; + public static final boolean SHOW_PROGRESS = false; + + private static Bitmap getBitmap(Context context, int resId) { + int largeIconWidth = (int) context.getResources() + .getDimension(R.dimen.notification_large_icon_width); + int largeIconHeight = (int) context.getResources() + .getDimension(R.dimen.notification_large_icon_height); + Drawable d = context.getResources().getDrawable(resId); + Bitmap b = Bitmap.createBitmap(largeIconWidth, largeIconHeight, Bitmap.Config.ARGB_8888); + Canvas c = new Canvas(b); + d.setBounds(0, 0, largeIconWidth, largeIconHeight); + d.draw(c); + return b; + } + + private static PendingIntent makeEmailIntent(Context context, String who) { + final Intent intent = new Intent(android.content.Intent.ACTION_SENDTO, + Uri.parse("mailto:" + who)); + return PendingIntent.getActivity( + context, 0, intent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + static final String[] LINES = new String[] { + "Uh oh", + "Getting kicked out of this room", + "I'll be back in 5-10 minutes.", + "And now \u2026 I have to find my shoes. \uD83D\uDC63", + "\uD83D\uDC5F \uD83D\uDC5F", + "\uD83D\uDC60 \uD83D\uDC60", + }; + static final int MAX_LINES = 5; + public static Notification makeBigTextNotification(Context context, int update, int id, + long when) { + String personUri = null; + /* + Cursor c = null; + try { + String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY }; + String selections = ContactsContract.Contacts.DISPLAY_NAME + " = 'Mike Cleron'"; + final ContentResolver contentResolver = context.getContentResolver(); + c = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, + projection, selections, null, null); + if (c != null && c.getCount() > 0) { + c.moveToFirst(); + int lookupIdx = c.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY); + int idIdx = c.getColumnIndex(ContactsContract.Contacts._ID); + String lookupKey = c.getString(lookupIdx); + long contactId = c.getLong(idIdx); + Uri lookupUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); + personUri = lookupUri.toString(); + } + } finally { + if (c != null) { + c.close(); + } + } + if (TextUtils.isEmpty(personUri)) { + Log.w(TAG, "failed to find contact for Mike Cleron"); + } else { + Log.w(TAG, "Mike Cleron is " + personUri); + } + */ + + StringBuilder longSmsText = new StringBuilder(); + int end = 2 + update; + if (end > LINES.length) { + end = LINES.length; + } + final int start = Math.max(0, end - MAX_LINES); + for (int i=start; i= LINES.length) break; + if (i > start) longSmsText.append("\n"); + longSmsText.append(LINES[i]); + } + if (update > 2) { + when = System.currentTimeMillis(); + } + Notification.BigTextStyle bigTextStyle = new Notification.BigTextStyle() + .bigText(longSmsText); + Notification bigText = new Notification.Builder(context) + .setContentTitle("Mike Cleron") + .setContentIntent(ToastService.getPendingIntent(context, "Clicked on bigText")) + .setContentText(longSmsText) + //.setTicker("Mike Cleron: " + longSmsText) + .setWhen(when) + .setLargeIcon(getBitmap(context, R.drawable.bucket)) + .setPriority(Notification.PRIORITY_HIGH) + .setNumber(update) + .setSmallIcon(R.drawable.stat_notify_talk_text) + .setStyle(bigTextStyle) + .setDefaults(Notification.DEFAULT_SOUND) + .addPerson(personUri) + .build(); + return bigText; + } + + public static Notification makeUploadNotification(Context context, int progress, long when) { + Notification.Builder uploadNotification = new Notification.Builder(context) + .setContentTitle("File Upload") + .setContentText("foo.txt") + .setPriority(Notification.PRIORITY_MIN) + .setContentIntent(ToastService.getPendingIntent(context, "Clicked on Upload")) + .setWhen(when) + .setSmallIcon(R.drawable.ic_menu_upload) + .setProgress(100, Math.min(progress, 100), false); + return uploadNotification.build(); + } + + static SpannableStringBuilder BOLD(CharSequence str) { + final SpannableStringBuilder ssb = new SpannableStringBuilder(str); + ssb.setSpan(new StyleSpan(Typeface.BOLD), 0, ssb.length(), 0); + return ssb; + } + + public static class ToastService extends IntentService { + + private static final String TAG = "ToastService"; + + private static final String ACTION_TOAST = "toast"; + + private Handler handler; + + public ToastService() { + super(TAG); + } + public ToastService(String name) { + super(name); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + handler = new Handler(); + return super.onStartCommand(intent, flags, startId); + } + + @Override + protected void onHandleIntent(Intent intent) { + Log.v(TAG, "clicked a thing! intent=" + intent.toString()); + if (intent.hasExtra("text")) { + final String text = intent.getStringExtra("text"); + handler.post(new Runnable() { + @Override + public void run() { + Toast.makeText(ToastService.this, text, Toast.LENGTH_LONG).show(); + Log.v(TAG, "toast " + text); + } + }); + } + } + + public static PendingIntent getPendingIntent(Context context, String text) { + Intent toastIntent = new Intent(context, ToastService.class); + toastIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + toastIntent.setAction(ACTION_TOAST + ":" + text); // one per toast message + toastIntent.putExtra("text", text); + PendingIntent pi = PendingIntent.getService( + context, 58, toastIntent, PendingIntent.FLAG_UPDATE_CURRENT); + return pi; + } + } + + public static void sleepIfYouCan(int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) {} + } + + @Override + public void setUp() throws Exception { + super.setUp(); + } + + public static String summarize(Notification n) { + return String.format("", + n.extras.get(Notification.EXTRA_TITLE), + n.icon, + String.valueOf(n.contentView)); + } + + public void testCreate() throws Exception { + ArrayList mNotifications = new ArrayList(); + NotificationManager noMa = + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + + L("Constructing notifications..."); + if (SHOW_BIG_TEXT) { + int bigtextId = mNotifications.size(); + final long time = SystemClock.currentThreadTimeMillis(); + final Notification n = makeBigTextNotification(mContext, 0, bigtextId, System.currentTimeMillis()); + L(" %s: create=%dms", summarize(n), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(n); + } + + int uploadId = mNotifications.size(); + long uploadWhen = System.currentTimeMillis(); + + if (SHOW_PROGRESS) { + mNotifications.add(makeUploadNotification(mContext, 0, uploadWhen)); + } + + if (SHOW_PHONE_CALL) { + int phoneId = mNotifications.size(); + final PendingIntent fullscreenIntent + = FullScreenActivity.getPendingIntent(mContext, phoneId); + final long time = SystemClock.currentThreadTimeMillis(); + Notification phoneCall = new Notification.Builder(mContext) + .setContentTitle("Incoming call") + .setContentText("Matias Duarte") + .setLargeIcon(getBitmap(mContext, R.drawable.matias_hed)) + .setSmallIcon(R.drawable.stat_sys_phone_call) + .setDefaults(Notification.DEFAULT_SOUND) + .setPriority(Notification.PRIORITY_MAX) + .setContentIntent(fullscreenIntent) + .setFullScreenIntent(fullscreenIntent, true) + .addAction(R.drawable.ic_dial_action_call, "Answer", + ToastService.getPendingIntent(mContext, "Clicked on Answer")) + .addAction(R.drawable.ic_end_call, "Ignore", + ToastService.getPendingIntent(mContext, "Clicked on Ignore")) + .setOngoing(true) + .addPerson(Uri.fromParts("tel", "1 (617) 555-1212", null).toString()) + .build(); + L(" %s: create=%dms", phoneCall.toString(), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(phoneCall); + } + + if (SHOW_STOPWATCH) { + final long time = SystemClock.currentThreadTimeMillis(); + final Notification n = new Notification.Builder(mContext) + .setContentTitle("Stopwatch PRO") + .setContentText("Counting up") + .setContentIntent(ToastService.getPendingIntent(mContext, "Clicked on Stopwatch")) + .setSmallIcon(R.drawable.stat_notify_alarm) + .setUsesChronometer(true) + .build(); + L(" %s: create=%dms", summarize(n), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(n); + } + + if (SHOW_CALENDAR) { + final long time = SystemClock.currentThreadTimeMillis(); + final Notification n = new Notification.Builder(mContext) + .setContentTitle("J Planning") + .setContentText("The Botcave") + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.stat_notify_calendar) + .setContentIntent(ToastService.getPendingIntent(mContext, "Clicked on calendar event")) + .setContentInfo("7PM") + .addAction(R.drawable.stat_notify_snooze, "+10 min", + ToastService.getPendingIntent(mContext, "snoozed 10 min")) + .addAction(R.drawable.stat_notify_snooze_longer, "+1 hour", + ToastService.getPendingIntent(mContext, "snoozed 1 hr")) + .addAction(R.drawable.stat_notify_email, "Email", + ToastService.getPendingIntent(mContext, + "Congratulations, you just destroyed someone's inbox zero")) + .build(); + L(" %s: create=%dms", summarize(n), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(n); + } + + if (SHOW_BIG_PICTURE) { + BitmapDrawable d = + (BitmapDrawable) mContext.getResources().getDrawable(R.drawable.romainguy_rockaway); + final long time = SystemClock.currentThreadTimeMillis(); + final Notification n = new Notification.Builder(mContext) + .setContentTitle("Romain Guy") + .setContentText("I was lucky to find a Canon 5D Mk III at a local Bay Area " + + "store last week but I had not been able to try it in the field " + + "until tonight. After a few days of rain the sky finally cleared " + + "up. Rockaway Beach did not disappoint and I was finally able to " + + "see what my new camera feels like when shooting landscapes.") + .setSmallIcon(android.R.drawable.stat_notify_chat) + .setContentIntent( + ToastService.getPendingIntent(mContext, "Clicked picture")) + .setLargeIcon(getBitmap(mContext, R.drawable.romainguy_hed)) + .addAction(R.drawable.add, "Add to Gallery", + ToastService.getPendingIntent(mContext, "Added")) + .setStyle(new Notification.BigPictureStyle() + .bigPicture(d.getBitmap())) + .build(); + L(" %s: create=%dms", summarize(n), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(n); + } + + if (SHOW_INBOX) { + final long time = SystemClock.currentThreadTimeMillis(); + final Notification n = new Notification.Builder(mContext) + .setContentTitle("New mail") + .setContentText("3 new messages") + .setSubText("example@gmail.com") + .setContentIntent(ToastService.getPendingIntent(mContext, "Clicked on Mail")) + .setSmallIcon(R.drawable.stat_notify_email) + .setStyle(new Notification.InboxStyle() + .setSummaryText("example@gmail.com") + .addLine(BOLD("Alice:").append(" hey there!")) + .addLine(BOLD("Bob:").append(" hi there!")) + .addLine(BOLD("Charlie:").append(" Iz IN UR EMAILZ!!")) + ).build(); + L(" %s: create=%dms", summarize(n), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(n); + } + + if (SHOW_SOCIAL) { + final long time = SystemClock.currentThreadTimeMillis(); + final Notification n = new Notification.Builder(mContext) + .setContentTitle("Social Network") + .setContentText("You were mentioned in a post") + .setContentInfo("example@gmail.com") + .setContentIntent(ToastService.getPendingIntent(mContext, "Clicked on Social")) + .setSmallIcon(android.R.drawable.stat_notify_chat) + .setPriority(Notification.PRIORITY_LOW) + .build(); + L(" %s: create=%dms", summarize(n), SystemClock.currentThreadTimeMillis() - time); + mNotifications.add(n); + } + + L("Posting notifications..."); + for (int i=0; i= 0) { + NotificationManager noMa = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + noMa.cancel(NOTIFICATION_ID + id); + } + } + } + + public void dismiss(View v) { + finish(); + } + + public static PendingIntent getPendingIntent(Context context, int id) { + Intent fullScreenIntent = new Intent(context, FullScreenActivity.class); + fullScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + fullScreenIntent.putExtra(EXTRA_ID, id); + PendingIntent pi = PendingIntent.getActivity( + context, 22, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT); + return pi; + } + } +} + -- cgit v1.1