use of im.actor.core.entity.Notification in project actor-platform by actorapp.
the class JsNotificationsProvider method onNotification.
@Override
public void onNotification(Messenger messenger, List<Notification> topNotifications, int messagesCount, int conversationsCount) {
String peerTitle;
String peerKey = null;
String peerAvatarUrl = null;
String contentMessage = "";
Notification notification = topNotifications.get(0);
// Peer info
Peer peer = notification.getPeer();
if (conversationsCount == 1) {
Avatar peerAvatar;
JsPeer jsPeer = JsPeer.create(peer);
if (peer.getPeerType() == PeerType.PRIVATE) {
UserVM userVM = messenger.getUser(peer.getPeerId());
peerTitle = userVM.getName().get();
peerAvatar = userVM.getAvatar().get();
} else {
GroupVM groupVM = messenger.getGroup(peer.getPeerId());
peerTitle = groupVM.getName().get();
peerAvatar = groupVM.getAvatar().get();
}
if (peerAvatar != null && peerAvatar.getSmallImage() != null) {
peerAvatarUrl = ((JsMessenger) messenger).getFileUrl(peerAvatar.getSmallImage().getFileReference());
}
peerKey = jsPeer.getPeerKey();
} else {
peerTitle = "New messages";
peerAvatarUrl = "assets/img/notification_icon_512.png";
}
// Notification body
int nCount = Math.min(topNotifications.size(), 5);
boolean showCounters = false;
if (topNotifications.size() > 5) {
nCount--;
showCounters = true;
}
boolean isChannel = peer.getPeerType() == PeerType.GROUP && messenger.getGroups().get(peer.getPeerId()).getGroupType() == GroupType.CHANNEL;
if (conversationsCount == 1) {
for (int i = 0; i < nCount; i++) {
Notification n = topNotifications.get(i);
if (contentMessage.length() > 0) {
contentMessage += "\n";
}
if (peer.getPeerType() == PeerType.GROUP) {
contentMessage += messenger.getUser(notification.getSender()).getName().get() + ": ";
}
contentMessage += messenger.getFormatter().formatContentText(n.getSender(), n.getContentDescription().getContentType(), n.getContentDescription().getText(), n.getContentDescription().getRelatedUser(), isChannel);
}
if (showCounters) {
contentMessage += "\n+" + (messagesCount - 4) + " new messages";
}
} else {
for (int i = 0; i < nCount; i++) {
Notification n = topNotifications.get(i);
if (contentMessage.length() > 0) {
contentMessage += "\n";
}
String senderName = messenger.getUser(n.getSender()).getName().get();
if (n.getPeer().getPeerType() == PeerType.GROUP) {
String groupName = messenger.getGroup(n.getPeer().getPeerId()).getName().get();
contentMessage += "[" + groupName + "] " + senderName + ": ";
} else {
contentMessage += senderName + ": ";
}
contentMessage += messenger.getFormatter().formatContentText(n.getSender(), n.getContentDescription().getContentType(), n.getContentDescription().getText(), n.getContentDescription().getRelatedUser(), isChannel);
}
if (showCounters) {
contentMessage += "\n+" + (messagesCount - 4) + " new messages in " + conversationsCount + " conversations";
}
}
if (!JsElectronApp.isElectron()) {
playSound();
}
if (!JsNotification.isSupported()) {
return;
}
if (!JsNotification.isGranted()) {
return;
}
JsManagedNotification.show(peerKey, peerTitle, contentMessage, peerAvatarUrl);
}
use of im.actor.core.entity.Notification in project actor-platform by actorapp.
the class NotificationsActor method performNotificationImp.
/**
* Method for showing/updating notifications
*
* @param performUpdate is need to perform update instead of showing
*/
private void performNotificationImp(boolean performUpdate) {
// Getting pending notifications list
List<PendingNotification> destNotifications = getNotifications();
if (destNotifications.size() == 0) {
hideNotification();
return;
}
// Converting to PendingNotifications
List<Notification> res = new ArrayList<>();
for (PendingNotification p : destNotifications) {
boolean isChannel = false;
if (p.getPeer().getPeerType() == PeerType.GROUP) {
isChannel = groups().getValue(p.getPeer().getPeerId()).getGroupType() == GroupType.CHANNEL;
}
res.add(new Notification(p.getPeer(), isChannel, p.getSender(), p.getContent()));
}
// Performing notifications
if (performUpdate) {
config().getNotificationProvider().onUpdateNotification(context().getMessenger(), res, pendingStorage.getMessagesCount(), pendingStorage.getDialogsCount());
} else {
config().getNotificationProvider().onNotification(context().getMessenger(), res, pendingStorage.getMessagesCount(), pendingStorage.getDialogsCount());
}
}
use of im.actor.core.entity.Notification in project actor-platform by actorapp.
the class AndroidNotifications method onNotification.
@Override
public void onNotification(Messenger messenger, List<Notification> topNotifications, int messagesCount, int conversationsCount) {
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
builder.setSmallIcon(R.drawable.ic_app_notify);
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
builder.setCategory(NotificationCompat.CATEGORY_MESSAGE);
int defaults = NotificationCompat.DEFAULT_LIGHTS;
if (messenger.isNotificationVibrationEnabled()) {
defaults |= NotificationCompat.DEFAULT_VIBRATE;
}
// if (silentUpdate) {
// defaults = 0;
// }
builder.setDefaults(defaults);
// Wearable
// builder.extend(new NotificationCompat.WearableExtender()
// .setBackground(((BitmapDrawable) AppContext.getContext().getResources().getDrawable(R.drawable.wear_bg)).getBitmap())
// .setHintHideIcon(true));
final Notification topNotification = topNotifications.get(topNotifications.size() - 1);
// if (!silentUpdate) {
// builder.setTicker(getNotificationTextFull(topNotification, messenger));
// }
android.app.Notification result;
if (messagesCount == 1) {
// Single message notification
final String sender = getNotificationSender(topNotification);
// final CharSequence text = bypass.markdownToSpannable(messenger().getFormatter().formatNotificationText(topNotification), true).toString();
final CharSequence text = messenger.getFormatter().formatNotificationText(topNotification);
visiblePeer = topNotification.getPeer();
Avatar avatar = null;
int id = 0;
String avatarTitle = "";
switch(visiblePeer.getPeerType()) {
case PRIVATE:
avatar = messenger().getUsers().get(visiblePeer.getPeerId()).getAvatar().get();
id = messenger().getUsers().get(visiblePeer.getPeerId()).getId();
avatarTitle = messenger().getUsers().get(visiblePeer.getPeerId()).getName().get();
break;
case GROUP:
avatar = messenger().getGroups().get(visiblePeer.getPeerId()).getAvatar().get();
id = messenger().getGroups().get(visiblePeer.getPeerId()).getId();
avatarTitle = messenger().getGroups().get(visiblePeer.getPeerId()).getName().get();
break;
}
Drawable avatarDrawable = new AvatarPlaceholderDrawable(avatarTitle, id, 18, context);
result = buildSingleMessageNotification(avatarDrawable, builder, sender, text, topNotification);
final NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, result);
if (avatar != null && avatar.getSmallImage() != null && avatar.getSmallImage().getFileReference() != null) {
messenger.bindFile(avatar.getSmallImage().getFileReference(), true, new FileVMCallback() {
@Override
public void onNotDownloaded() {
}
@Override
public void onDownloading(float progress) {
}
@Override
public void onDownloaded(FileSystemReference reference) {
RoundedBitmapDrawable d = getRoundedBitmapDrawable(reference);
android.app.Notification result = buildSingleMessageNotification(d, builder, sender, text, topNotification);
// NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, result);
}
});
} else {
manager.notify(NOTIFICATION_ID, result);
}
} else if (conversationsCount == 1) {
// Single conversation notification
String sender = getNotificationSender(topNotification);
builder.setContentTitle(sender);
builder.setContentText(messagesCount + context.getString(R.string.notifications_single_conversation_аfter_messages_count));
visiblePeer = topNotification.getPeer();
final NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
for (Notification n : topNotifications) {
if (topNotification.getPeer().getPeerType() == PeerType.GROUP) {
inboxStyle.addLine(getNotificationTextFull(n, messenger));
} else {
inboxStyle.addLine(messenger.getFormatter().formatNotificationText(n));
}
}
inboxStyle.setSummaryText(messagesCount + context.getString(R.string.notifications_single_conversation_аfter_messages_count));
Avatar avatar = null;
int id = 0;
String avatarTitle = "";
switch(visiblePeer.getPeerType()) {
case PRIVATE:
avatar = messenger().getUsers().get(visiblePeer.getPeerId()).getAvatar().get();
id = messenger().getUsers().get(visiblePeer.getPeerId()).getId();
avatarTitle = messenger().getUsers().get(visiblePeer.getPeerId()).getName().get();
break;
case GROUP:
avatar = messenger().getGroups().get(visiblePeer.getPeerId()).getAvatar().get();
id = messenger().getGroups().get(visiblePeer.getPeerId()).getId();
avatarTitle = messenger().getGroups().get(visiblePeer.getPeerId()).getName().get();
break;
}
Drawable avatarDrawable = new AvatarPlaceholderDrawable(avatarTitle, id, 18, context);
result = buildSingleConversationNotification(builder, inboxStyle, avatarDrawable, topNotification);
final NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, result);
if (avatar != null && avatar.getSmallImage() != null && avatar.getSmallImage().getFileReference() != null) {
messenger.bindFile(avatar.getSmallImage().getFileReference(), true, new FileVMCallback() {
@Override
public void onNotDownloaded() {
}
@Override
public void onDownloading(float progress) {
}
@Override
public void onDownloaded(FileSystemReference reference) {
RoundedBitmapDrawable d = getRoundedBitmapDrawable(reference);
android.app.Notification result = buildSingleConversationNotification(builder, inboxStyle, d, topNotification);
manager.notify(NOTIFICATION_ID, result);
}
});
} else {
manager.notify(NOTIFICATION_ID, result);
}
} else {
// Multiple conversations notification
builder.setContentTitle(ActorSDK.sharedActor().getAppName());
builder.setContentText(messagesCount + context.getString(R.string.notification_multiple_canversations_after_msg_count) + conversationsCount + context.getString(R.string.notifications_multiple_canversations_after_coversations_count));
visiblePeer = null;
intent = new Intent(context, RootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
for (Notification n : topNotifications) {
inboxStyle.addLine(getNotificationTextFull(n, messenger));
}
inboxStyle.setSummaryText(messagesCount + context.getString(R.string.notification_multiple_canversations_after_msg_count) + conversationsCount + context.getString(R.string.notifications_multiple_canversations_after_coversations_count));
result = builder.setStyle(inboxStyle).build();
addCustomLedAndSound(topNotification, result);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, result);
}
}
Aggregations