blob: 6c39bfe48907b740ec8f24a7a8889d55cbba3bf0 [file] [log] [blame]
package ${packageName};
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
<#if expandedStyle == 'list'>
import android.graphics.Color;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
</#if>
<#if applicationPackage??>import ${applicationPackage}.R;</#if>
/**
* Helper class for showing and canceling ${display_title?lower_case}
* notifications.
* <p>
* This class makes heavy use of the {@link NotificationCompat.Builder} helper
* class to create notifications in a backward-compatible way.
*/
public class ${className} {
/**
* The unique identifier for this type of notification.
*/
private static final String NOTIFICATION_TAG = "${notificationName}";
/**
* Shows the notification, or updates a previously shown notification of
* this type, with the given parameters.
* <p>
* TODO: Customize this method's arguments to present relevant content in
* the notification.
* <p>
* TODO: Customize the contents of this method to tweak the behavior and
* presentation of ${display_title?lower_case} notifications. Make
* sure to follow the
* <a href="https://developer.android.com/design/patterns/notifications.html">
* Notification design guidelines</a> when doing so.
*
* @see #cancel(Context)
*/
public static void notify(final Context context,
final String exampleString, final int number) {
final Resources res = context.getResources();
<#if expandedStyle == "picture">
// This image is used as the notification's large icon (thumbnail) when
// the notification is collapsed, and as the big picture to show when
// the notification is expanded.
<#else>
// This image is used as the notification's large icon (thumbnail).
// TODO: Remove this if your notification has no relevant thumbnail.
</#if>
final Bitmap picture = BitmapFactory.decodeResource(res, R.drawable.example_picture);
<#if expandedStyle == 'list'>
final SpannableStringBuilder exampleItem = new SpannableStringBuilder();
exampleItem.append("Dummy");
exampleItem.setSpan(new ForegroundColorSpan(Color.WHITE), 0, exampleItem.length(), 0);
exampleItem.append(" Example content");
</#if>
final String ticker = exampleString;
final String title = res.getString(
R.string.${notification_name}_notification_title_template, exampleString);
final String text = res.getString(
R.string.${notification_name}_notification_placeholder_text_template, exampleString);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
// Set appropriate defaults for the notification light, sound,
// and vibration.
.setDefaults(Notification.DEFAULT_ALL)
// Set required fields, including the small icon, the
// notification title, and text.
.setSmallIcon(R.drawable.${icon_resource})
.setContentTitle(title)
.setContentText(text)
// All fields below this line are optional.
// Use a default priority (recognized on devices running Android
// 4.1 or later)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
// Provide a large icon, shown with the notification in the
// notification drawer on devices running Android 3.0 or later.
.setLargeIcon(picture)
// Set ticker text (preview) information for this notification.
.setTicker(ticker)
// Show a number. This is useful when stacking notifications of
// a single type.
.setNumber(number)
// If this notification relates to a past or upcoming event, you
// should set the relevant time information using the setWhen
// method below. If this call is omitted, the notification's
// timestamp will by set to the time at which it was shown.
// TODO: Call setWhen if this notification relates to a past or
// upcoming event. The sole argument to this method should be
// the notification timestamp in milliseconds.
//.setWhen(...)
// Set the pending intent to be initiated when the user touches
// the notification.
.setContentIntent(
PendingIntent.getActivity(
context,
0,
new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")),
PendingIntent.FLAG_UPDATE_CURRENT))
<#if expandedStyle == 'picture'>
// Show an expanded photo on devices running Android 4.1 or
// later.
.setStyle(new NotificationCompat.BigPictureStyle()<#--
TODO: .bigLargeIcon(null) when the support library supports it -->
.bigPicture(picture)
.setBigContentTitle(title)
.setSummaryText("Dummy summary text"))
<#elseif expandedStyle == 'list'>
// Show an expanded list of items on devices running Android 4.1
// or later.
.setStyle(new NotificationCompat.InboxStyle()
.addLine(exampleItem)
.addLine(exampleItem)
.addLine(exampleItem)
.addLine(exampleItem)
.setBigContentTitle(title)
.setSummaryText("Dummy summary text"))
<#elseif expandedStyle == 'text'>
// Show expanded text content on devices running Android 4.1 or
// later.
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(text)
.setBigContentTitle(title)
.setSummaryText("Dummy summary text"))
</#if>
<#if moreActions>
// Example additional actions for this notification. These will
// only show on devices running Android 4.1 or later, so you
// should ensure that the activity in this notification's
// content intent provides access to the same actions in
// another way.
.addAction(
R.drawable.ic_action_stat_share,
res.getString(R.string.action_share),
PendingIntent.getActivity(
context,
0,
Intent.createChooser(new Intent(Intent.ACTION_SEND)
.setType("text/plain")
.putExtra(Intent.EXTRA_TEXT, "Dummy text"), "Dummy title"),
PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(
R.drawable.ic_action_stat_reply,
res.getString(R.string.action_reply),
null)
</#if>
// Automatically dismiss the notification when it is touched.
.setAutoCancel(true);
notify(context, builder.build());
}
@TargetApi(Build.VERSION_CODES.ECLAIR)
private static void notify(final Context context, final Notification notification) {
final NotificationManager nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
nm.notify(NOTIFICATION_TAG, 0, notification);
} else {
nm.notify(NOTIFICATION_TAG.hashCode(), notification);
}
}
/**
* Cancels any notifications of this type previously shown using
* {@link #notify(Context, String, int)}.
*/
@TargetApi(Build.VERSION_CODES.ECLAIR)
public static void cancel(final Context context) {
final NotificationManager nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
nm.cancel(NOTIFICATION_TAG, 0);
} else {
nm.cancel(NOTIFICATION_TAG.hashCode());
}
}
}