// Prepare notification data and display it. private void doNotification(Context context, Long messageId, Bitmap srcPhoto) { ChatMsgBaseInfo message = WalkArroundMsgManager.getInstance(context).getMessageById(messageId); if (message == null) { return; } ContactInfo contact = ContactsManager.getInstance(context).getContactByUsrObjId(message.getContact()); Intent intent = new Intent(); intent.setClass(context.getApplicationContext(), BuildMessageActivity.class); intent.putExtra(BuildMessageActivity.INTENT_RECEIVER_EDITABLE, false); intent.putExtra(BuildMessageActivity.INTENT_CONVERSATION_RECEIVER, message.getContact()); intent.putExtra(BuildMessageActivity.INTENT_CONVERSATION_THREAD_ID, message.getMsgThreadId()); intent.putExtra(BuildMessageActivity.INTENT_CONVERSATION_TYPE, message.getChatType()); // TODO: contact should write to DB & we should crate a content provider for those contacts. if (contact != null) { intent.putExtra(BuildMessageActivity.INTENT_CONVERSATION_DISPLAY_NAME, contact.getUsername()); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent contentIntent = PendingIntent.getActivity( context, (int) message.getMsgThreadId(), intent, PendingIntent.FLAG_UPDATE_CURRENT); // If the contact is null, set the user name as empty. String displayName = (contact == null ? "" : contact.getUsername()); message.setData(MessageUtil.getDisplayStr(context, displayName, message)); Notification notification = new Notification(); notification.flags = Notification.FLAG_AUTO_CANCEL; notification.icon = R.drawable.msg_notify_icon; // TODO: Add Emoji parser later. notification.tickerText = EmojiParser.getInstance(context).getSmileyText(message.getData()); notification.tickerText = message.getData(); if (Build.VERSION.SDK_INT == 19) { contentIntent.cancel(); contentIntent = PendingIntent.getActivity( context, (int) message.getMsgThreadId(), intent, PendingIntent.FLAG_UPDATE_CURRENT); } notification.contentIntent = contentIntent; notification.contentView = new RemoteViews(context.getPackageName(), R.layout.msg_notify_panel); // notification.defaults=Notification.DEFAULT_SOUND; initNotifyView(context, notification.contentView, message, contact, srcPhoto); try { String number = (contact == null ? DEFAULT_NOTIFICATION_ID : contact.getMobilePhoneNumber()); int startPos = number.length() > 5 ? number.length() - 5 : 0; int id = Integer.parseInt(number.substring(startPos)); NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(number, id, notification); } catch (NumberFormatException e) { sLogger.e("notification NumberFormatException:" + e.getMessage()); } }
// Init notification UI. private void initNotifyView( Context context, RemoteViews panelView, ChatMsgBaseInfo message, ContactInfo contact, Bitmap srcPhoto) { if (contact != null) { Bitmap photo = ImageLoaderManager.createCircleImage(srcPhoto); if (photo != null) { panelView.setViewVisibility(R.id.notify_profile_logogram_tv, View.GONE); panelView.setViewVisibility(R.id.notify_profile_iv, View.VISIBLE); panelView.setImageViewBitmap(R.id.notify_profile_iv, photo); } else { panelView.setViewVisibility(R.id.notify_profile_iv, View.VISIBLE); panelView.setImageViewResource( R.id.notify_profile_iv, CommonUtils.getPhotoBgResId(contact.getUsername())); panelView.setViewVisibility(R.id.notify_profile_logogram_tv, View.VISIBLE); panelView.setTextViewText( R.id.notify_profile_logogram_tv, contact.getUsername().substring(contact.getUsername().length() - 1)); } panelView.setTextViewText(R.id.notify_sender_tv, contact.getUsername()); } else { panelView.setTextViewText(R.id.notify_sender_tv, message.getContact()); panelView.setViewVisibility(R.id.notify_profile_logogram_tv, View.GONE); panelView.setViewVisibility(R.id.notify_profile_iv, View.VISIBLE); panelView.setImageViewResource(R.id.notify_profile_iv, R.drawable.contact_default_profile); } // TODO: ADD Emoji parser later. // panelView.setTextViewText(R.id.notify_msg_content_tv, // EmojiParser.getInstance(context).getSmileyText(message.getData())); panelView.setTextViewText(R.id.notify_msg_content_tv, message.getData()); panelView.setTextViewText( R.id.notify_time_tv, TimeFormattedUtil.getDetailDisplayTime(context, message.getTime())); }