156e1b4d8207e9ae177111bc824877a780723287bChris Wren/* 256e1b4d8207e9ae177111bc824877a780723287bChris Wren * Copyright (C) 2013 The Android Open Source Project 356e1b4d8207e9ae177111bc824877a780723287bChris Wren * 456e1b4d8207e9ae177111bc824877a780723287bChris Wren * Licensed under the Apache License, Version 2.0 (the "License"); 556e1b4d8207e9ae177111bc824877a780723287bChris Wren * you may not use this file except in compliance with the License. 656e1b4d8207e9ae177111bc824877a780723287bChris Wren * You may obtain a copy of the License at 756e1b4d8207e9ae177111bc824877a780723287bChris Wren * 856e1b4d8207e9ae177111bc824877a780723287bChris Wren * http://www.apache.org/licenses/LICENSE-2.0 956e1b4d8207e9ae177111bc824877a780723287bChris Wren * 1056e1b4d8207e9ae177111bc824877a780723287bChris Wren * Unless required by applicable law or agreed to in writing, software 1156e1b4d8207e9ae177111bc824877a780723287bChris Wren * distributed under the License is distributed on an "AS IS" BASIS, 1256e1b4d8207e9ae177111bc824877a780723287bChris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356e1b4d8207e9ae177111bc824877a780723287bChris Wren * See the License for the specific language governing permissions and 1456e1b4d8207e9ae177111bc824877a780723287bChris Wren * limitations under the License. 1556e1b4d8207e9ae177111bc824877a780723287bChris Wren */ 1656e1b4d8207e9ae177111bc824877a780723287bChris Wren 1756e1b4d8207e9ae177111bc824877a780723287bChris Wrenpackage com.android.example.notificationshowcase; 1856e1b4d8207e9ae177111bc824877a780723287bChris Wren 1956e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.IntentService; 2056e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.Notification; 2156e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.NotificationManager; 2256e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.PendingIntent; 230c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wrenimport android.content.ContentResolver; 2456e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.content.Context; 2556e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.content.Intent; 260c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wrenimport android.database.Cursor; 2756e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.graphics.Bitmap; 2856e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.graphics.Canvas; 2956e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.graphics.Typeface; 3056e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.graphics.drawable.BitmapDrawable; 3156e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.graphics.drawable.Drawable; 3256e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.net.Uri; 330c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wrenimport android.provider.ContactsContract; 3456e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.support.v4.app.NotificationCompat; 3556e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.text.SpannableString; 360c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wrenimport android.text.TextUtils; 3756e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.text.style.StyleSpan; 380c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wrenimport android.util.Log; 3956e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.view.View; 4056e1b4d8207e9ae177111bc824877a780723287bChris Wren 4156e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport java.util.ArrayList; 4256e1b4d8207e9ae177111bc824877a780723287bChris Wren 4356e1b4d8207e9ae177111bc824877a780723287bChris Wrenpublic class NotificationService extends IntentService { 4456e1b4d8207e9ae177111bc824877a780723287bChris Wren 4556e1b4d8207e9ae177111bc824877a780723287bChris Wren private static final String TAG = "NotificationService"; 4656e1b4d8207e9ae177111bc824877a780723287bChris Wren 4756e1b4d8207e9ae177111bc824877a780723287bChris Wren public static final String ACTION_CREATE = "create"; 4856e1b4d8207e9ae177111bc824877a780723287bChris Wren public static final int NOTIFICATION_ID = 31338; 4956e1b4d8207e9ae177111bc824877a780723287bChris Wren 5056e1b4d8207e9ae177111bc824877a780723287bChris Wren public NotificationService() { 5156e1b4d8207e9ae177111bc824877a780723287bChris Wren super(TAG); 5256e1b4d8207e9ae177111bc824877a780723287bChris Wren } 5356e1b4d8207e9ae177111bc824877a780723287bChris Wren 5456e1b4d8207e9ae177111bc824877a780723287bChris Wren public NotificationService(String name) { 5556e1b4d8207e9ae177111bc824877a780723287bChris Wren super(name); 5656e1b4d8207e9ae177111bc824877a780723287bChris Wren } 5756e1b4d8207e9ae177111bc824877a780723287bChris Wren 5856e1b4d8207e9ae177111bc824877a780723287bChris Wren private static Bitmap getBitmap(Context context, int resId) { 5956e1b4d8207e9ae177111bc824877a780723287bChris Wren int largeIconWidth = (int) context.getResources() 6056e1b4d8207e9ae177111bc824877a780723287bChris Wren .getDimension(R.dimen.notification_large_icon_width); 6156e1b4d8207e9ae177111bc824877a780723287bChris Wren int largeIconHeight = (int) context.getResources() 6256e1b4d8207e9ae177111bc824877a780723287bChris Wren .getDimension(R.dimen.notification_large_icon_height); 6356e1b4d8207e9ae177111bc824877a780723287bChris Wren Drawable d = context.getResources().getDrawable(resId); 6456e1b4d8207e9ae177111bc824877a780723287bChris Wren Bitmap b = Bitmap.createBitmap(largeIconWidth, largeIconHeight, Bitmap.Config.ARGB_8888); 6556e1b4d8207e9ae177111bc824877a780723287bChris Wren Canvas c = new Canvas(b); 6656e1b4d8207e9ae177111bc824877a780723287bChris Wren d.setBounds(0, 0, largeIconWidth, largeIconHeight); 6756e1b4d8207e9ae177111bc824877a780723287bChris Wren d.draw(c); 6856e1b4d8207e9ae177111bc824877a780723287bChris Wren return b; 6956e1b4d8207e9ae177111bc824877a780723287bChris Wren } 7056e1b4d8207e9ae177111bc824877a780723287bChris Wren 7156e1b4d8207e9ae177111bc824877a780723287bChris Wren private static PendingIntent makeEmailIntent(Context context, String who) { 7256e1b4d8207e9ae177111bc824877a780723287bChris Wren final Intent intent = new Intent(android.content.Intent.ACTION_SENDTO, 7356e1b4d8207e9ae177111bc824877a780723287bChris Wren Uri.parse("mailto:" + who)); 7456e1b4d8207e9ae177111bc824877a780723287bChris Wren return PendingIntent.getActivity( 7556e1b4d8207e9ae177111bc824877a780723287bChris Wren context, 0, intent, 7656e1b4d8207e9ae177111bc824877a780723287bChris Wren PendingIntent.FLAG_CANCEL_CURRENT); 7756e1b4d8207e9ae177111bc824877a780723287bChris Wren } 7856e1b4d8207e9ae177111bc824877a780723287bChris Wren 7956e1b4d8207e9ae177111bc824877a780723287bChris Wren public static Notification makeBigTextNotification(Context context, int update, int id, 8056e1b4d8207e9ae177111bc824877a780723287bChris Wren long when) { 810c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren String personUri = null; 820c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren Cursor c = null; 830c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren try { 840c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY }; 850c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren String selections = ContactsContract.Contacts.DISPLAY_NAME + " = 'Mike Cleron'"; 860c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren final ContentResolver contentResolver = context.getContentResolver(); 870c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren c = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, 880c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren projection, selections, null, null); 890c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren if (c != null && c.getCount() > 0) { 900c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren c.moveToFirst(); 910c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren int lookupIdx = c.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY); 920c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren int idIdx = c.getColumnIndex(ContactsContract.Contacts._ID); 930c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren String lookupKey = c.getString(lookupIdx); 940c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren long contactId = c.getLong(idIdx); 950c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren Uri lookupUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); 960c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren personUri = lookupUri.toString(); 970c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren } 980c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren } finally { 990c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren if (c != null) { 1000c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren c.close(); 1010c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren } 1020c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren } 1030c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren if (TextUtils.isEmpty(personUri)) { 1040c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren Log.w(TAG, "failed to find contact for Mike Cleron"); 1050c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren } else { 1060c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren Log.w(TAG, "Mike Cleron is " + personUri); 1070c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren } 1080c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren 10956e1b4d8207e9ae177111bc824877a780723287bChris Wren String addendum = update > 0 ? "(updated) " : ""; 11056e1b4d8207e9ae177111bc824877a780723287bChris Wren String longSmsText = "Hey, looks like\nI'm getting kicked out of this conference" + 11156e1b4d8207e9ae177111bc824877a780723287bChris Wren " room"; 11256e1b4d8207e9ae177111bc824877a780723287bChris Wren if (update > 1) { 11356e1b4d8207e9ae177111bc824877a780723287bChris Wren longSmsText += ", so stay in the hangout and I'll rejoin in about 5-10 minutes" + 11456e1b4d8207e9ae177111bc824877a780723287bChris Wren ". If you don't see me, assume I got pulled into another meeting. And" + 11556e1b4d8207e9ae177111bc824877a780723287bChris Wren " now \u2026 I have to find my shoes."; 11656e1b4d8207e9ae177111bc824877a780723287bChris Wren } 11756e1b4d8207e9ae177111bc824877a780723287bChris Wren if (update > 2) { 11856e1b4d8207e9ae177111bc824877a780723287bChris Wren when = System.currentTimeMillis(); 11956e1b4d8207e9ae177111bc824877a780723287bChris Wren } 12056e1b4d8207e9ae177111bc824877a780723287bChris Wren NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle(); 12156e1b4d8207e9ae177111bc824877a780723287bChris Wren bigTextStyle.bigText(addendum + longSmsText); 1220c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren Notification bigText = new NotificationCompat.Builder(context) 12356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle(addendum + "Mike Cleron") 12456e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent(ToastService.getPendingIntent(context, "Clicked on bigText")) 12556e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText(addendum + longSmsText) 12656e1b4d8207e9ae177111bc824877a780723287bChris Wren .setTicker(addendum + "Mike Cleron: " + longSmsText) 12756e1b4d8207e9ae177111bc824877a780723287bChris Wren .setWhen(when) 12856e1b4d8207e9ae177111bc824877a780723287bChris Wren .setLargeIcon(getBitmap(context, R.drawable.bucket)) 12956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setPriority(NotificationCompat.PRIORITY_HIGH) 13056e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.ic_media_next, 13156e1b4d8207e9ae177111bc824877a780723287bChris Wren "update: " + update, 13256e1b4d8207e9ae177111bc824877a780723287bChris Wren UpdateService.getPendingIntent(context, update + 1, id, when)) 13356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.stat_notify_talk_text) 1340c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren .setStyle(bigTextStyle) 1350c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren .setDefaults(Notification.DEFAULT_SOUND) 1360c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren .addPerson(personUri) 1370c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren .build(); 1380c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren return bigText; 13956e1b4d8207e9ae177111bc824877a780723287bChris Wren } 14056e1b4d8207e9ae177111bc824877a780723287bChris Wren 14156e1b4d8207e9ae177111bc824877a780723287bChris Wren public static Notification makeUploadNotification(Context context, int progress, long when) { 14256e1b4d8207e9ae177111bc824877a780723287bChris Wren NotificationCompat.Builder uploadNotification = new NotificationCompat.Builder(context) 14356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("File Upload") 14456e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("foo.txt") 14556e1b4d8207e9ae177111bc824877a780723287bChris Wren .setPriority(NotificationCompat.PRIORITY_MIN) 14656e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent(ToastService.getPendingIntent(context, "Clicked on Upload")) 14756e1b4d8207e9ae177111bc824877a780723287bChris Wren .setWhen(when) 14856e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.ic_menu_upload) 14956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setProgress(100, Math.min(progress, 100), false); 15056e1b4d8207e9ae177111bc824877a780723287bChris Wren return uploadNotification.build(); 15156e1b4d8207e9ae177111bc824877a780723287bChris Wren } 15256e1b4d8207e9ae177111bc824877a780723287bChris Wren 15356e1b4d8207e9ae177111bc824877a780723287bChris Wren @Override 15456e1b4d8207e9ae177111bc824877a780723287bChris Wren protected void onHandleIntent(Intent intent) { 15556e1b4d8207e9ae177111bc824877a780723287bChris Wren ArrayList<Notification> mNotifications = new ArrayList<Notification>(); 15656e1b4d8207e9ae177111bc824877a780723287bChris Wren NotificationManager noMa = 15756e1b4d8207e9ae177111bc824877a780723287bChris Wren (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 15856e1b4d8207e9ae177111bc824877a780723287bChris Wren 15956e1b4d8207e9ae177111bc824877a780723287bChris Wren int bigtextId = mNotifications.size(); 16056e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(makeBigTextNotification(this, 0, bigtextId, System.currentTimeMillis())); 16156e1b4d8207e9ae177111bc824877a780723287bChris Wren 16256e1b4d8207e9ae177111bc824877a780723287bChris Wren int uploadId = mNotifications.size(); 16356e1b4d8207e9ae177111bc824877a780723287bChris Wren long uploadWhen = System.currentTimeMillis(); 16456e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(makeUploadNotification(this, 10, uploadWhen)); 16556e1b4d8207e9ae177111bc824877a780723287bChris Wren 1669bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren int phoneId = mNotifications.size(); 1679bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren final PendingIntent fullscreenIntent = FullScreenActivity.getPendingIntent(this, phoneId); 168fcb0b151aa75dfe1545057f9b513fce14e4b0d44Chris Wren Notification phoneCall = new NotificationCompat.Builder(this) 16956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("Incoming call") 17056e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("Matias Duarte") 17156e1b4d8207e9ae177111bc824877a780723287bChris Wren .setLargeIcon(getBitmap(this, R.drawable.matias_hed)) 17256e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.stat_sys_phone_call) 17356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setPriority(NotificationCompat.PRIORITY_MAX) 1749bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren .setContentIntent(fullscreenIntent) 1759bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren .setFullScreenIntent(fullscreenIntent, true) 17656e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.ic_dial_action_call, "Answer", 1779bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren PhoneService.getPendingIntent(this, phoneId, PhoneService.ACTION_ANSWER)) 17856e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.ic_end_call, "Ignore", 1799bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren PhoneService.getPendingIntent(this, phoneId, PhoneService.ACTION_IGNORE)) 1809bf14882a56bfd5e0bd415993da7d37d8b5c7eb6Chris Wren .setOngoing(true) 1810c599a55ac00df73a055831118a7d0c54a7c9f79Chris Wren .addPerson(Uri.fromParts("tel", "1 (617) 555-1212", null).toString()) 182fcb0b151aa75dfe1545057f9b513fce14e4b0d44Chris Wren .build(); 183fcb0b151aa75dfe1545057f9b513fce14e4b0d44Chris Wren mNotifications.add(phoneCall); 18456e1b4d8207e9ae177111bc824877a780723287bChris Wren 18556e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(new NotificationCompat.Builder(this) 18656e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("Stopwatch PRO") 18756e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("Counting up") 18856e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent(ToastService.getPendingIntent(this, "Clicked on Stopwatch")) 18956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.stat_notify_alarm) 19056e1b4d8207e9ae177111bc824877a780723287bChris Wren .setUsesChronometer(true) 19156e1b4d8207e9ae177111bc824877a780723287bChris Wren .build()); 19256e1b4d8207e9ae177111bc824877a780723287bChris Wren 19356e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(new NotificationCompat.Builder(this) 19456e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("J Planning") 19556e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("The Botcave") 19656e1b4d8207e9ae177111bc824877a780723287bChris Wren .setWhen(System.currentTimeMillis()) 19756e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.stat_notify_calendar) 19856e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent(ToastService.getPendingIntent(this, "Clicked on calendar event")) 19956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentInfo("7PM") 20056e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.stat_notify_snooze, "+10 min", 20156e1b4d8207e9ae177111bc824877a780723287bChris Wren ToastService.getPendingIntent(this, "snoozed 10 min")) 20256e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.stat_notify_snooze_longer, "+1 hour", 20356e1b4d8207e9ae177111bc824877a780723287bChris Wren ToastService.getPendingIntent(this, "snoozed 1 hr")) 20456e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.stat_notify_email, "Email", 20556e1b4d8207e9ae177111bc824877a780723287bChris Wren makeEmailIntent(this, 20656e1b4d8207e9ae177111bc824877a780723287bChris Wren "gabec@example.com,mcleron@example.com,dsandler@example.com")) 20756e1b4d8207e9ae177111bc824877a780723287bChris Wren .build()); 20856e1b4d8207e9ae177111bc824877a780723287bChris Wren 20956e1b4d8207e9ae177111bc824877a780723287bChris Wren BitmapDrawable d = 21056e1b4d8207e9ae177111bc824877a780723287bChris Wren (BitmapDrawable) getResources().getDrawable(R.drawable.romainguy_rockaway); 21156e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(new NotificationCompat.BigPictureStyle( 21256e1b4d8207e9ae177111bc824877a780723287bChris Wren new NotificationCompat.Builder(this) 21356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("Romain Guy") 21456e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("I was lucky to find a Canon 5D Mk III at a local Bay Area " 21556e1b4d8207e9ae177111bc824877a780723287bChris Wren + "store last week but I had not been able to try it in the field " 21656e1b4d8207e9ae177111bc824877a780723287bChris Wren + "until tonight. After a few days of rain the sky finally cleared " 21756e1b4d8207e9ae177111bc824877a780723287bChris Wren + "up. Rockaway Beach did not disappoint and I was finally able to " 21856e1b4d8207e9ae177111bc824877a780723287bChris Wren + "see what my new camera feels like when shooting landscapes.") 21956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.ic_stat_gplus) 22056e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent( 22156e1b4d8207e9ae177111bc824877a780723287bChris Wren ToastService.getPendingIntent(this, "Clicked on bigPicture")) 22256e1b4d8207e9ae177111bc824877a780723287bChris Wren .setLargeIcon(getBitmap(this, R.drawable.romainguy_hed)) 22356e1b4d8207e9ae177111bc824877a780723287bChris Wren .addAction(R.drawable.add, "Add to Gallery", 22456e1b4d8207e9ae177111bc824877a780723287bChris Wren ToastService.getPendingIntent(this, "added! (just kidding)")) 22556e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSubText("talk rocks!")) 22656e1b4d8207e9ae177111bc824877a780723287bChris Wren .bigPicture(d.getBitmap()) 22756e1b4d8207e9ae177111bc824877a780723287bChris Wren .build()); 22856e1b4d8207e9ae177111bc824877a780723287bChris Wren 22956e1b4d8207e9ae177111bc824877a780723287bChris Wren // Note: this may conflict with real email notifications 23056e1b4d8207e9ae177111bc824877a780723287bChris Wren StyleSpan bold = new StyleSpan(Typeface.BOLD); 23156e1b4d8207e9ae177111bc824877a780723287bChris Wren SpannableString line1 = new SpannableString("Alice: hey there!"); 23256e1b4d8207e9ae177111bc824877a780723287bChris Wren line1.setSpan(bold, 0, 5, 0); 23356e1b4d8207e9ae177111bc824877a780723287bChris Wren SpannableString line2 = new SpannableString("Bob: hi there!"); 23456e1b4d8207e9ae177111bc824877a780723287bChris Wren line2.setSpan(bold, 0, 3, 0); 23556e1b4d8207e9ae177111bc824877a780723287bChris Wren SpannableString line3 = new SpannableString("Charlie: Iz IN UR EMAILZ!!"); 23656e1b4d8207e9ae177111bc824877a780723287bChris Wren line3.setSpan(bold, 0, 7, 0); 23756e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(new NotificationCompat.InboxStyle( 23856e1b4d8207e9ae177111bc824877a780723287bChris Wren new NotificationCompat.Builder(this) 23956e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("24 new messages") 24056e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("You have mail!") 24156e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSubText("test.hugo2@gmail.com") 24256e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent(ToastService.getPendingIntent(this, "Clicked on Email")) 24356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.stat_notify_email)) 24456e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSummaryText("+21 more") 24556e1b4d8207e9ae177111bc824877a780723287bChris Wren .addLine(line1) 24656e1b4d8207e9ae177111bc824877a780723287bChris Wren .addLine(line2) 24756e1b4d8207e9ae177111bc824877a780723287bChris Wren .addLine(line3) 24856e1b4d8207e9ae177111bc824877a780723287bChris Wren .build()); 24956e1b4d8207e9ae177111bc824877a780723287bChris Wren 25056e1b4d8207e9ae177111bc824877a780723287bChris Wren mNotifications.add(new NotificationCompat.Builder(this) 25156e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentTitle("Twitter") 25256e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentText("New mentions") 25356e1b4d8207e9ae177111bc824877a780723287bChris Wren .setContentIntent(ToastService.getPendingIntent(this, "Clicked on Twitter")) 25456e1b4d8207e9ae177111bc824877a780723287bChris Wren .setSmallIcon(R.drawable.twitter_icon) 25556e1b4d8207e9ae177111bc824877a780723287bChris Wren .setNumber(15) 25656e1b4d8207e9ae177111bc824877a780723287bChris Wren .setPriority(NotificationCompat.PRIORITY_LOW) 25756e1b4d8207e9ae177111bc824877a780723287bChris Wren .build()); 25856e1b4d8207e9ae177111bc824877a780723287bChris Wren 25956e1b4d8207e9ae177111bc824877a780723287bChris Wren 26056e1b4d8207e9ae177111bc824877a780723287bChris Wren for (int i=0; i<mNotifications.size(); i++) { 26156e1b4d8207e9ae177111bc824877a780723287bChris Wren noMa.notify(NOTIFICATION_ID + i, mNotifications.get(i)); 26256e1b4d8207e9ae177111bc824877a780723287bChris Wren } 26356e1b4d8207e9ae177111bc824877a780723287bChris Wren 26456e1b4d8207e9ae177111bc824877a780723287bChris Wren ProgressService.startProgressUpdater(this, uploadId, uploadWhen, 0); 26556e1b4d8207e9ae177111bc824877a780723287bChris Wren } 26656e1b4d8207e9ae177111bc824877a780723287bChris Wren} 267