package org.aisen.weibo.sina.service.notifier; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.support.v4.app.NotificationCompat; import org.aisen.android.common.utils.DateUtils; import org.aisen.android.common.utils.Logger; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.base.AppSettings; import org.aisen.weibo.sina.sinasdk.bean.UnreadCount; import org.aisen.weibo.sina.ui.activity.base.MainActivity; import java.util.Calendar; public class UnreadCountNotifier extends Notifier { public UnreadCountNotifier(Context context) { super(context); } // 保存最后一次的数据,跟上一次匹配,当数据不同时且大于0时,发出通知提醒用户 public static UnreadCount mCount = new UnreadCount(); public void notinfyUnreadCount(UnreadCount count) { String fromAisen = context.getString(R.string.notifer_from_aisen); // 新粉丝 if (count.getFollower() != 0 && mCount.getFollower() != count.getFollower()) { String contentTitle = String.format(context.getString(R.string.notifer_new_followers), count.getFollower()); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.statusbar_ic_follower_small).setContentTitle(contentTitle).setContentText(fromAisen); Intent intent = new Intent(context, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setAction(MainActivity.ACTION_NOTIFICATION); intent.putExtra("type", "4"); PendingIntent contentIntent = PendingIntent.getActivity(context, RemindUnreadForFollowers, intent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(contentIntent).setAutoCancel(true); builder.setTicker(contentTitle); notify(RemindUnreadForFollowers, builder); } mCount.setFollower(count.getFollower()); if (count.getFollower() == 0) cancelNotification(RemindUnreadForFollowers); // 新评论 if (count.getCmt() != 0 && mCount.getCmt() != count.getCmt()) { String contentTitle = String.format(context.getString(R.string.notifer_new_cmts), count.getCmt()); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.statusbar_ic_comment_small).setContentTitle(contentTitle).setContentText(fromAisen); builder.setTicker(contentTitle); Intent intent = new Intent(context, MainActivity.class); intent.setAction(MainActivity.ACTION_NOTIFICATION); intent.putExtra("type", "3"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent contentIntent = PendingIntent.getActivity(context, RemindUnreadComments, intent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(contentIntent).setAutoCancel(true); notify(RemindUnreadComments, builder); } mCount.setCmt(count.getCmt()); if (count.getCmt() == 0) cancelNotification(RemindUnreadComments); // 新提及我的微博数 if (count.getMention_status() != 0 && mCount.getMention_status() != count.getMention_status()) { String contentTitle = String.format(context.getString(R.string.notifer_new_mention_status), count.getMention_status()); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.statusbar_ic_mention_small).setContentTitle(contentTitle) .setContentText(fromAisen); builder.setTicker(contentTitle); Intent intent = new Intent(context, MainActivity.class); intent.setAction(MainActivity.ACTION_NOTIFICATION_MS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent contentIntent = PendingIntent.getActivity(context, RemindUnreadForMentionStatus, intent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(contentIntent).setAutoCancel(true); notify(RemindUnreadForMentionStatus, builder); } mCount.setMention_status(count.getMention_status()); if (count.getMention_status() == 0) cancelNotification(RemindUnreadForMentionStatus); // 新提及我的评论数 if (count.getMention_cmt() != 0 && mCount.getMention_cmt() != count.getMention_cmt()) { String contentTitle = String.format(context.getString(R.string.notifer_new_mention_cmt), count.getMention_cmt()); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.statusbar_ic_mention_small).setContentTitle(contentTitle) .setContentText(fromAisen); builder.setTicker(contentTitle); Intent intent = new Intent(context, MainActivity.class); intent.setAction(MainActivity.ACTION_NOTIFICATION_MC); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent contentIntent = PendingIntent.getActivity(context, RemindUnreadForMentionComments, intent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(contentIntent).setAutoCancel(true); notify(RemindUnreadForMentionComments, builder); } mCount.setMention_cmt(count.getMention_cmt()); if (count.getMention_cmt() == 0) cancelNotification(RemindUnreadForMentionComments); Logger.e(mCount); // 新私信 if (count.getDm() != 0 && mCount.getDm() != count.getDm()) { String contentTitle = String.format(context.getString(R.string.notifer_new_dm), count.getDm()); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.statusbar_ic_dm_small).setContentTitle(contentTitle) .setContentText(fromAisen); builder.setTicker(contentTitle); Intent intent = new Intent(context, MainActivity.class); intent.setAction(MainActivity.ACTION_NOTIFICATION); intent.putExtra("type", "10"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent contentIntent = PendingIntent.getActivity(context, RemindUnreadForDM, intent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(contentIntent).setAutoCancel(true); notify(RemindUnreadForDM, builder); } mCount.setDm(count.getDm()); if (count.getDm() == 0) cancelNotification(RemindUnreadForDM); } private void notify(int request, NotificationCompat.Builder builder) { Notification notification = builder.build(); // 判断是否是夜间勿扰 boolean feedback = true; if (AppSettings.isNotifyNightClose()) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(System.currentTimeMillis()); Logger.d(String.format("现在时间是%s", DateUtils.formatDate(cal.getTimeInMillis(), DateUtils.TYPE_01))); if (cal.get(Calendar.HOUR_OF_DAY) >= 1 && cal.get(Calendar.HOUR_OF_DAY) <= 7) { feedback = false; Logger.d("夜间勿扰"); } } if (feedback) { // notification.flags = notification.defaults; if (AppSettings.isNotifyVibrate()) { notification.defaults = 0; notification.vibrate = vibrate; } if (AppSettings.isNotifyLED()) { // notification.defaults = Notification.DEFAULT_LIGHTS; notification.flags = notification.flags | Notification.FLAG_SHOW_LIGHTS; // notification.ledARGB = Color.parseColor(AppSettings.getThemeColor()); notification.ledARGB = Color.BLUE; notification.ledOffMS = 200; notification.ledOnMS = 700; } if (AppSettings.isNotifySound()) { notification.defaults = notification.defaults | Notification.DEFAULT_SOUND; } } notify(request, notification); } }