package com.example.notification;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v4.app.NotificationCompat;
import com.example.R;
import java.util.List;
// requires android.permission.VIBRATE
public class NotificationMessage
{
private Context mContext;
private Type mType;
private Notification mNotification;
public enum Type
{
TYPE1, TYPE2, TYPE3
}
private NotificationMessage(Context context, Type type, Notification notification)
{
mContext = context; // should be an application context
mType = type;
mNotification = notification;
}
public void show()
{
// show notification
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mType.ordinal(), mNotification);
}
public void cancel()
{
// cancel notification
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(mType.ordinal());
}
public static class Builder
{
private Context mContext;
private Type mType;
private PendingIntent mPendingIntent = null;
private String mTicker = null;
private String mTitle = null;
private String mText = null;
private String mSubText = null;
private String mContentInfo = null;
private int mNumber = -1;
private long mWhen = System.currentTimeMillis();
private int mSmallIcon = R.drawable.ic_stat_notify;
private Bitmap mLargeIcon = null;
private int mProgressMax = -1;
private int mProgress = -1;
private boolean mProgressIndeterminate = false;
private boolean mUsesChronometer = false;
private boolean mOnlyAlertOnce = false;
private boolean mOnGoing = false;
private int mAction1Icon = -1;
private CharSequence mAction1Title = null;
private PendingIntent mAction1PendingIntent = null;
private int mAction2Icon = -1;
private CharSequence mAction2Title = null;
private PendingIntent mAction2PendingIntent = null;
private CharSequence mBigTextStyleBigContentTitle = null;
private CharSequence mBigTextStyleSummaryText = null;
private CharSequence mBigTextStyleBigText = null;
private CharSequence mBigPictureStyleBigContentTitle = null;
private CharSequence mBigPictureStyleSummaryText = null;
private Bitmap mBigPictureStyleBigPicture = null;
private CharSequence mInboxStyleBigContentTitle = null;
private CharSequence mInboxStyleSummaryText = null;
private List<CharSequence> mInboxStyleLines = null;
public Builder(Context context, Type type)
{
mContext = context; // should be an application context
mType = type;
}
public void setIntent(Intent notificationIntent)
{
// pending intent
mPendingIntent = PendingIntent.getActivity(mContext, mType.ordinal(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public void setText(String ticker, String title, String text)
{
mTicker = ticker;
mTitle = title;
mText = text;
}
public void setExtraText(String subText, String contentInfo)
{
mSubText = subText;
mContentInfo = contentInfo;
}
public void setNumber(int number)
{
mNumber = number;
}
public void setTime(long when)
{
mWhen = when;
}
public void setIcon(int smallIcon, Bitmap largeIcon)
{
mSmallIcon = smallIcon;
mLargeIcon = largeIcon;
}
public void setIcon(int smallIcon, int largeIcon)
{
mSmallIcon = smallIcon;
mLargeIcon = BitmapFactory.decodeResource(mContext.getResources(), largeIcon);
}
public void setProgress(int max, int progress, boolean indeterminate)
{
// setProgress() does not work with setExtraText() method
if(indeterminate)
{
mProgressMax = 0;
mProgress = 0;
}
else
{
mProgressMax = max;
mProgress = progress;
}
mProgressIndeterminate = indeterminate;
}
public void setUsesChronometer(boolean usesChronometer)
{
mUsesChronometer = usesChronometer;
}
public void setOnlyAlertOnce(boolean onlyAlertOnce)
{
mOnlyAlertOnce = onlyAlertOnce;
}
public void setOngoing(boolean ongoing)
{
mOnGoing = ongoing;
}
public void setAction1(int icon, CharSequence title, Intent actionIntent)
{
mAction1Icon = icon;
mAction1Title = title;
// pending intent
mAction1PendingIntent = PendingIntent.getActivity(mContext, mType.ordinal(), actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public void setAction2(int icon, CharSequence title, Intent actionIntent)
{
mAction2Icon = icon;
mAction2Title = title;
// pending intent
mAction2PendingIntent = PendingIntent.getActivity(mContext, mType.ordinal(), actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public void setBigTextStyle(CharSequence bigContentTitle, CharSequence summaryText, CharSequence bigText)
{
mBigTextStyleBigContentTitle = bigContentTitle;
mBigTextStyleSummaryText = summaryText;
mBigTextStyleBigText = bigText;
}
public void setBigPictureStyle(CharSequence bigContentTitle, CharSequence summaryText, Bitmap bigPicture)
{
mBigPictureStyleBigContentTitle = bigContentTitle;
mBigPictureStyleSummaryText = summaryText;
mBigPictureStyleBigPicture = bigPicture;
}
public void setBigPictureStyle(CharSequence bigContentTitle, CharSequence summaryText, int bigPicture)
{
mBigPictureStyleBigContentTitle = bigContentTitle;
mBigPictureStyleSummaryText = summaryText;
mBigPictureStyleBigPicture = BitmapFactory.decodeResource(mContext.getResources(), bigPicture);
}
public void setInboxStyle(CharSequence bigContentTitle, CharSequence summaryText, List<CharSequence> lines)
{
mInboxStyleBigContentTitle = bigContentTitle;
mInboxStyleSummaryText = summaryText;
mInboxStyleLines = lines;
}
public NotificationMessage build()
{
// notification builder
NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
if(mPendingIntent != null) builder.setContentIntent(mPendingIntent);
if(mTicker != null) builder.setTicker(mTicker);
if(mTitle != null) builder.setContentTitle(mTitle);
if(mText != null) builder.setContentText(mText);
if(mSubText != null) builder.setSubText(mSubText);
if(mContentInfo != null) builder.setContentInfo(mContentInfo);
if(mNumber > 0) builder.setNumber(mNumber);
if(mWhen > 0L) builder.setWhen(mWhen);
if(mSmallIcon > 0) builder.setSmallIcon(mSmallIcon);
if(mLargeIcon != null) builder.setLargeIcon(mLargeIcon);
if(mProgressMax >= 0 && mProgress >= 0)
builder.setProgress(mProgressMax, mProgress, mProgressIndeterminate);
builder.setUsesChronometer(mUsesChronometer);
builder.setOnlyAlertOnce(mOnlyAlertOnce);
builder.setOngoing(mOnGoing);
builder.setAutoCancel(!mOnGoing);
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
builder.setDefaults(Notification.DEFAULT_ALL);
// notification actions
if(mAction1Icon > 0 || mAction1Title != null || mAction1PendingIntent != null)
{
builder.addAction(mAction1Icon, mAction1Title, mAction1PendingIntent);
}
if(mAction2Icon > 0 || mAction2Title != null || mAction2PendingIntent != null)
{
builder.addAction(mAction2Icon, mAction2Title, mAction2PendingIntent);
}
// notification style
Notification notification;
if(mBigTextStyleBigContentTitle != null || mBigTextStyleSummaryText != null || mBigTextStyleBigText != null)
{
NotificationCompat.BigTextStyle notificationStyle = new NotificationCompat.BigTextStyle();
notificationStyle.setBuilder(builder);
if(mBigTextStyleBigContentTitle != null)
notificationStyle.setBigContentTitle(mBigTextStyleBigContentTitle);
if(mBigTextStyleSummaryText != null)
notificationStyle.setSummaryText(mBigTextStyleSummaryText);
if(mBigTextStyleBigText != null)
notificationStyle.bigText(mBigTextStyleBigText);
notification = notificationStyle.build();
}
else if(mBigPictureStyleBigContentTitle != null || mBigPictureStyleSummaryText != null || mBigPictureStyleBigPicture != null)
{
NotificationCompat.BigPictureStyle notificationStyle = new NotificationCompat.BigPictureStyle();
notificationStyle.setBuilder(builder);
if(mBigPictureStyleBigContentTitle != null)
notificationStyle.setBigContentTitle(mBigPictureStyleBigContentTitle);
if(mBigPictureStyleSummaryText != null)
notificationStyle.setSummaryText(mBigPictureStyleSummaryText);
if(mBigPictureStyleBigPicture != null)
notificationStyle.bigPicture(mBigPictureStyleBigPicture);
notification = notificationStyle.build();
}
else if(mInboxStyleBigContentTitle != null || mInboxStyleSummaryText != null || mInboxStyleLines != null)
{
NotificationCompat.InboxStyle notificationStyle = new NotificationCompat.InboxStyle();
notificationStyle.setBuilder(builder);
if(mInboxStyleBigContentTitle != null)
notificationStyle.setBigContentTitle(mInboxStyleBigContentTitle);
if(mInboxStyleSummaryText != null)
notificationStyle.setSummaryText(mInboxStyleSummaryText);
if(mInboxStyleLines != null)
{
for(int i = 0; i < mInboxStyleLines.size(); i++)
{
notificationStyle.addLine(mInboxStyleLines.get(i));
}
}
notification = notificationStyle.build();
}
else
{
notification = builder.build();
}
return new NotificationMessage(mContext, mType, notification);
}
}
}