/*******************************************************************************
* 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;
}
}
}