/******************************************************************************* * Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package com.fanfou.app.opensource.receiver; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import com.fanfou.app.opensource.AppContext; import com.fanfou.app.opensource.HomePage; import com.fanfou.app.opensource.R; import com.fanfou.app.opensource.SendPage; import com.fanfou.app.opensource.StatusPage; import com.fanfou.app.opensource.api.bean.DirectMessage; import com.fanfou.app.opensource.api.bean.Status; import com.fanfou.app.opensource.service.Constants; import com.fanfou.app.opensource.service.NotificationService; import com.fanfou.app.opensource.util.AlarmHelper; /** * @author mcxiaoke * @version 1.0 2011.09.21 * @version 1.1 2011.11.03 * */ public class NotificationReceiver extends BroadcastReceiver { private static final int NOTIFICATION_ID_DM = -101; private static final int NOTIFICATION_ID_MENTION = -102; private static final int NOTIFICATION_ID_HOME = -103; private static final String TAG = NotificationReceiver.class .getSimpleName(); private static void showDmMoreNotification(final Context context, final int count) { if (AppContext.DEBUG) { Log.d(NotificationReceiver.TAG, "showDmMoreNotification count=" + count); } final String title = "饭否私信"; final String message = "收到" + count + "条发给你的私信"; final Intent intent = new Intent(context, HomePage.class); intent.setAction("DUMY_ACTION " + System.currentTimeMillis()); intent.putExtra(Constants.EXTRA_PAGE, 2); final PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); NotificationReceiver.showNotification( NotificationReceiver.NOTIFICATION_ID_DM, context, contentIntent, title, message, R.drawable.ic_notify_dm); } private static void showDmOneNotification(final Context context, final DirectMessage dm) { if (AppContext.DEBUG) { Log.d(NotificationReceiver.TAG, "showDmOneNotification " + dm); } final Intent intent = new Intent(context, SendPage.class); intent.setAction("DUMY_ACTION " + System.currentTimeMillis()); intent.putExtra(Constants.EXTRA_ID, dm.senderId); intent.putExtra(Constants.EXTRA_USER_NAME, dm.senderScreenName); final PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); final String title = "收到" + dm.senderScreenName + "的私信"; final String message = dm.senderScreenName + ":" + dm.text; NotificationReceiver.showNotification( NotificationReceiver.NOTIFICATION_ID_DM, context, contentIntent, title, message, R.drawable.ic_notify_dm); } private static void showHomeMoreNotification(final Context context, final int count) { if (AppContext.DEBUG) { Log.d(NotificationReceiver.TAG, "showHomeMoreNotification count=" + count); } final String title = "饭否消息"; final String message = "收到" + count + "条来自好友的消息"; final Intent intent = new Intent(context, HomePage.class); intent.setAction("DUMY_ACTION " + System.currentTimeMillis()); intent.putExtra(Constants.EXTRA_PAGE, 0); final PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); NotificationReceiver.showNotification( NotificationReceiver.NOTIFICATION_ID_HOME, context, contentIntent, title, message, R.drawable.ic_notify_home); } private static void showHomeOneNotification(final Context context, final Status status) { if (AppContext.DEBUG) { Log.d(NotificationReceiver.TAG, "showHomeOneNotification " + status); } final String title = status.userScreenName; final String message = status.simpleText; final Intent intent = new Intent(context, StatusPage.class); intent.setAction("DUMY_ACTION " + System.currentTimeMillis()); intent.putExtra(Constants.EXTRA_DATA, status); final PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationReceiver.showNotification( NotificationReceiver.NOTIFICATION_ID_HOME, context, contentIntent, title, message, R.drawable.ic_notify_home); } private static void showMentionMoreNotification(final Context context, final int count) { if (AppContext.DEBUG) { Log.d(NotificationReceiver.TAG, "showMentionMoreNotification count=" + count); } final String title = "饭否消息"; final String message = "收到" + count + "条提到你的消息"; final Intent intent = new Intent(context, HomePage.class); intent.setAction("DUMY_ACTION " + System.currentTimeMillis()); intent.putExtra(Constants.EXTRA_PAGE, 1); final PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); NotificationReceiver.showNotification( NotificationReceiver.NOTIFICATION_ID_MENTION, context, contentIntent, title, message, R.drawable.ic_notify_mention); } private static void showMentionOneNotification(final Context context, final Status status) { if (AppContext.DEBUG) { Log.i(NotificationReceiver.TAG, "showMentionOneNotification " + status); } final String title = status.userScreenName + "@你的消息"; final String message = status.simpleText; final Intent intent = new Intent(context, StatusPage.class); intent.setAction("DUMY_ACTION " + System.currentTimeMillis()); intent.putExtra(Constants.EXTRA_DATA, status); final PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationReceiver.showNotification( NotificationReceiver.NOTIFICATION_ID_MENTION, context, contentIntent, title, message, R.drawable.ic_notify_mention); } private static void showNotification(final int notificationId, final Context context, final PendingIntent contentIntent, final String title, final String message, final int iconId) { final NotificationManager nm = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); final Notification notification = new Notification(iconId, title, System.currentTimeMillis()); notification.setLatestEventInfo(context, title, message, contentIntent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE; AlarmHelper.setNotificationType(context, notification); nm.notify(notificationId, notification); } @Override public void onReceive(final Context context, final Intent intent) { final int type = intent.getIntExtra(Constants.EXTRA_TYPE, -1); final int count = intent.getIntExtra(Constants.EXTRA_COUNT, 1); if (AppContext.DEBUG) { Log.d(NotificationReceiver.TAG, "broadcast received type=" + type + " count=" + count); } switch (type) { case NotificationService.NOTIFICATION_TYPE_HOME: if (count == 1) { final Status status = (Status) intent .getParcelableExtra(Constants.EXTRA_DATA); if (status != null) { NotificationReceiver.showHomeOneNotification(context, status); } } else { NotificationReceiver.showHomeMoreNotification(context, count); } break; case NotificationService.NOTIFICATION_TYPE_MENTION: if (count == 1) { final Status status = (Status) intent .getParcelableExtra(Constants.EXTRA_DATA); if (status != null) { NotificationReceiver.showMentionOneNotification(context, status); } } else { NotificationReceiver .showMentionMoreNotification(context, count); } break; case NotificationService.NOTIFICATION_TYPE_DM: if (count == 1) { final DirectMessage dm = (DirectMessage) intent .getParcelableExtra(Constants.EXTRA_DATA); if (dm != null) { NotificationReceiver.showDmOneNotification(context, dm); } } else { NotificationReceiver.showDmMoreNotification(context, count); } break; default: break; } } }