package com.odoo.util.notification;
import java.util.ArrayList;
import java.util.List;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.Builder;
import com.odoo.R;
public class NotificationBuilder {
private Context mContext;
private Builder mNotificationBuilder = null;
private PendingIntent mNotificationResultIntent = null;
private NotificationManager mNotificationManager = null;
private String title, text, bigText;
private boolean mOnGoing = false, mAutoCancel = true;
private Intent resultIntent = null;
private int icon = R.drawable.ic_odoo_o;
private List<NotificationAction> mActions = new ArrayList<NotificationBuilder.NotificationAction>();
public NotificationBuilder(Context context) {
mContext = context;
}
public NotificationBuilder setTitle(String title) {
this.title = title;
return this;
}
public NotificationBuilder setText(String text) {
this.text = text;
return this;
}
public NotificationBuilder setIcon(int res_id) {
icon = res_id;
return this;
}
public NotificationBuilder setBigText(String bigText) {
this.bigText = bigText;
return this;
}
public NotificationBuilder setOngoing(boolean onGoing) {
mOnGoing = onGoing;
return this;
}
public NotificationBuilder setAutoCancel(boolean autoCancel) {
mAutoCancel = autoCancel;
return this;
}
public NotificationBuilder addAction(NotificationAction action) {
mActions.add(action);
return this;
}
private void init() {
mNotificationManager = (NotificationManager) mContext
.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationBuilder = new NotificationCompat.Builder(mContext);
mNotificationBuilder.setContentTitle(title);
mNotificationBuilder.setContentText(text);
mNotificationBuilder.setSmallIcon(icon);
mNotificationBuilder.setAutoCancel(mAutoCancel);
mNotificationBuilder.setOngoing(mOnGoing);
if (bigText != null) {
NotificationCompat.BigTextStyle notiStyle = new NotificationCompat.BigTextStyle();
notiStyle.setBigContentTitle(title);
notiStyle.setSummaryText(text);
notiStyle.bigText(bigText);
mNotificationBuilder.setStyle(notiStyle);
}
setSoundForNotification();
setVibrateForNotification();
}
private void setSoundForNotification() {
mNotificationBuilder.setVibrate(new long[] { 1000, 1000, 1000, 1000,
1000 });
}
private void setVibrateForNotification() {
Uri uri = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mNotificationBuilder.setSound(uri);
}
public NotificationBuilder setResultIntent(Intent intent) {
resultIntent = intent;
return this;
}
public NotificationBuilder build() {
init();
if (resultIntent != null) {
_setResultIntent();
}
return this;
}
private void _setResultIntent() {
mNotificationResultIntent = PendingIntent.getActivity(mContext, 0,
resultIntent, PendingIntent.FLAG_UPDATE_CURRENT
| Notification.FLAG_AUTO_CANCEL);
mNotificationBuilder.setDefaults(Notification.DEFAULT_ALL);
mNotificationBuilder.setContentIntent(mNotificationResultIntent);
}
public void show() {
mNotificationManager.notify(0, mNotificationBuilder.build());
}
public class NotificationAction {
private int icon;
private int requestCode;
private String title;
private String action;
private Bundle extras;
public NotificationAction(int icon, String title, int requestCode,
String action, Bundle extras) {
super();
this.icon = icon;
this.title = title;
this.requestCode = requestCode;
this.action = action;
this.extras = extras;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
public int getRequestCode() {
return requestCode;
}
public void setRequestCode(int requestCode) {
this.requestCode = requestCode;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public Bundle getExtras() {
return extras;
}
public void setExtras(Bundle extras) {
this.extras = extras;
}
}
}