package com.openims.service.chat;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.openims.model.SharedData;
import com.openims.model.chat.MessageRecord;
import com.openims.model.chat.RosterDataBase;
import com.openims.service.XmppManager;
import com.openims.utility.DataAccessException;
import com.openims.utility.LogUtil;
import com.openims.view.chat.MultiChatActivity;
import com.smit.EasyLauncher.R;
public class ChatPacketListener implements PacketListener{
private static final String LOGTAG = LogUtil.makeLogTag(ChatPacketListener.class);
private static final String TAG = LogUtil.makeTag(ChatPacketListener.class);
private final XmppManager xmppManager;
public ChatPacketListener(XmppManager xmpp){
xmppManager = xmpp;
}
public void processPacket(Packet packet){
Message message = (Message) packet;
if (message.getBody() != null) {
Log.i(LOGTAG, TAG+packet.toXML());
// write to database
try {
String fromJid = message.getFrom().substring(0,
message.getFrom().lastIndexOf("/") );
MessageRecord mr = new MessageRecord(xmppManager.getContext(),
MessageRecord.getMessageRecordTableName(
xmppManager.getUserNameWithHostName(), fromJid));
long id = mr.insert(fromJid, xmppManager.getUserNameWithHostName(),
message.getBody(),
String.valueOf(System.currentTimeMillis()));
mr.close();
RosterDataBase roster = new RosterDataBase(xmppManager.getContext(),
xmppManager.getUserNameWithHostName());
roster.updateUnReadMsg(fromJid, 1, id);
roster.close();
xmppManager.notifyNewMessage(fromJid);
// send notification to task bar
if(SharedData.getInstance().isShowNewMessageNotify()){
NotificationManager mNotificationManager =
(NotificationManager) xmppManager.getContext().
getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(xmppManager.getContext(),
MultiChatActivity.class);
intent.putExtra(MultiChatActivity.ACCOUNT_JID, fromJid);
PendingIntent pendingIntent = PendingIntent.getActivity(
xmppManager.getContext(),0, intent, 0);
Notification notification = new Notification(R.drawable.icon,
xmppManager.getContext().getResources()
.getString(R.string.im_new_message),
System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(xmppManager.getContext(),
fromJid, message.getBody(), pendingIntent);
mNotificationManager.notify(1, notification);
}
} catch(DataAccessException e) {
e.printStackTrace();
}
}
}
}