fixed notifications for images

This commit is contained in:
iNPUTmice 2014-11-05 21:37:40 +01:00
parent 6a43bda4d7
commit 2253814519
2 changed files with 35 additions and 28 deletions

View File

@ -401,12 +401,6 @@ public class MessageParser extends AbstractParser implements
@Override @Override
public void onMessagePacketReceived(Account account, MessagePacket packet) { public void onMessagePacketReceived(Account account, MessagePacket packet) {
Message message = null; Message message = null;
boolean notify = mXmppConnectionService.getPreferences().getBoolean(
"show_notification", true);
boolean alwaysNotifyInConference = notify
&& mXmppConnectionService.getPreferences().getBoolean(
"always_notify_in_conference", false);
this.parseNick(packet, account); this.parseNick(packet, account);
if ((packet.getType() == MessagePacket.TYPE_CHAT || packet.getType() == MessagePacket.TYPE_NORMAL)) { if ((packet.getType() == MessagePacket.TYPE_CHAT || packet.getType() == MessagePacket.TYPE_NORMAL)) {
@ -429,7 +423,6 @@ public class MessageParser extends AbstractParser implements
if (message != null) { if (message != null) {
if (message.getStatus() == Message.STATUS_SEND) { if (message.getStatus() == Message.STATUS_SEND) {
account.activateGracePeriod(); account.activateGracePeriod();
notify = false;
mXmppConnectionService.markRead( mXmppConnectionService.markRead(
message.getConversation(), false); message.getConversation(), false);
} else { } else {
@ -444,14 +437,10 @@ public class MessageParser extends AbstractParser implements
if (message != null) { if (message != null) {
if (message.getStatus() == Message.STATUS_RECEIVED) { if (message.getStatus() == Message.STATUS_RECEIVED) {
message.markUnread(); message.markUnread();
notify = alwaysNotifyInConference
|| NotificationService
.wasHighlightedOrPrivate(message);
} else { } else {
mXmppConnectionService.markRead(message.getConversation(), mXmppConnectionService.markRead(message.getConversation(),
false); false);
account.activateGracePeriod(); account.activateGracePeriod();
notify = false;
} }
} }
} else if (packet.getType() == MessagePacket.TYPE_ERROR) { } else if (packet.getType() == MessagePacket.TYPE_ERROR) {
@ -498,10 +487,7 @@ public class MessageParser extends AbstractParser implements
if (message.trusted() && message.bodyContainsDownloadable()) { if (message.trusted() && message.bodyContainsDownloadable()) {
this.mXmppConnectionService.getHttpConnectionManager() this.mXmppConnectionService.getHttpConnectionManager()
.createNewConnection(message); .createNewConnection(message);
notify = false; } else {
}
notify = notify && !conversation.isMuted();
if (notify) {
mXmppConnectionService.getNotificationService().push(message); mXmppConnectionService.getNotificationService().push(message);
} }
mXmppConnectionService.updateConversationUi(); mXmppConnectionService.updateConversationUi();

View File

@ -1,11 +1,5 @@
package eu.siacs.conversations.services; package eu.siacs.conversations.services;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
@ -23,6 +17,12 @@ import android.support.v4.app.TaskStackBuilder;
import android.text.Html; import android.text.Html;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import eu.siacs.conversations.Config; import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Account;
@ -46,7 +46,28 @@ public class NotificationService {
this.mXmppConnectionService = service; this.mXmppConnectionService = service;
} }
public boolean notify(Message message) {
return (message.getStatus() == Message.STATUS_RECEIVED)
&& notificationsEnabled()
&& !message.getConversation().isMuted()
&& (message.getConversation().getMode() == Conversation.MODE_SINGLE
|| conferenceNotificationsEnabled()
|| wasHighlightedOrPrivate(message)
);
}
public boolean notificationsEnabled() {
return mXmppConnectionService.getPreferences().getBoolean("show_notification", true);
}
public boolean conferenceNotificationsEnabled() {
return mXmppConnectionService.getPreferences().getBoolean("always_notify_in_conference", false);
}
public void push(Message message) { public void push(Message message) {
if (!notify(message)) {
return;
}
PowerManager pm = (PowerManager) mXmppConnectionService PowerManager pm = (PowerManager) mXmppConnectionService
.getSystemService(Context.POWER_SERVICE); .getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn(); boolean isScreenOn = pm.isScreenOn();
@ -110,7 +131,7 @@ public class NotificationService {
if (notify) { if (notify) {
if (vibrate) { if (vibrate) {
int dat = 70; int dat = 70;
long[] pattern = { 0, 3 * dat, dat, dat }; long[] pattern = {0, 3 * dat, dat, dat};
mBuilder.setVibrate(pattern); mBuilder.setVibrate(pattern);
} }
if (ringtone != null) { if (ringtone != null) {
@ -132,7 +153,7 @@ public class NotificationService {
style.setBigContentTitle(notifications.size() style.setBigContentTitle(notifications.size()
+ " " + " "
+ mXmppConnectionService + mXmppConnectionService
.getString(R.string.unread_conversations)); .getString(R.string.unread_conversations));
StringBuilder names = new StringBuilder(); StringBuilder names = new StringBuilder();
Conversation conversation = null; Conversation conversation = null;
for (ArrayList<Message> messages : notifications.values()) { for (ArrayList<Message> messages : notifications.values()) {
@ -151,7 +172,7 @@ public class NotificationService {
mBuilder.setContentTitle(notifications.size() mBuilder.setContentTitle(notifications.size()
+ " " + " "
+ mXmppConnectionService + mXmppConnectionService
.getString(R.string.unread_conversations)); .getString(R.string.unread_conversations));
mBuilder.setContentText(names.toString()); mBuilder.setContentText(names.toString());
mBuilder.setStyle(style); mBuilder.setStyle(style);
if (conversation != null) { if (conversation != null) {
@ -184,7 +205,7 @@ public class NotificationService {
} }
private void modifyForImage(Builder builder, Message message, private void modifyForImage(Builder builder, Message message,
ArrayList<Message> messages, boolean notify) { ArrayList<Message> messages, boolean notify) {
try { try {
Bitmap bitmap = mXmppConnectionService.getFileBackend() Bitmap bitmap = mXmppConnectionService.getFileBackend()
.getThumbnail(message, getPixel(288), false); .getThumbnail(message, getPixel(288), false);
@ -210,7 +231,7 @@ public class NotificationService {
} }
private void modifyForTextOnly(Builder builder, private void modifyForTextOnly(Builder builder,
ArrayList<Message> messages, boolean notify) { ArrayList<Message> messages, boolean notify) {
builder.setStyle(new NotificationCompat.BigTextStyle() builder.setStyle(new NotificationCompat.BigTextStyle()
.bigText(getMergedBodies(messages))); .bigText(getMergedBodies(messages)));
builder.setContentText(getReadableBody(messages.get(0))); builder.setContentText(getReadableBody(messages.get(0)));
@ -244,7 +265,7 @@ public class NotificationService {
private String getReadableBody(Message message) { private String getReadableBody(Message message) {
if (message.getDownloadable() != null if (message.getDownloadable() != null
&& (message.getDownloadable().getStatus() == Downloadable.STATUS_OFFER || message && (message.getDownloadable().getStatus() == Downloadable.STATUS_OFFER || message
.getDownloadable().getStatus() == Downloadable.STATUS_OFFER_CHECK_FILESIZE)) { .getDownloadable().getStatus() == Downloadable.STATUS_OFFER_CHECK_FILESIZE)) {
return mXmppConnectionService.getText( return mXmppConnectionService.getText(
R.string.image_offered_for_download).toString(); R.string.image_offered_for_download).toString();
} else if (message.getEncryption() == Message.ENCRYPTION_PGP) { } else if (message.getEncryption() == Message.ENCRYPTION_PGP) {
@ -287,7 +308,7 @@ public class NotificationService {
return PendingIntent.getService(mXmppConnectionService, 0, intent, 0); return PendingIntent.getService(mXmppConnectionService, 0, intent, 0);
} }
public static boolean wasHighlightedOrPrivate(Message message) { private boolean wasHighlightedOrPrivate(Message message) {
String nick = message.getConversation().getMucOptions().getActualNick(); String nick = message.getConversation().getMucOptions().getActualNick();
Pattern highlight = generateNickHighlightPattern(nick); Pattern highlight = generateNickHighlightPattern(nick);
if (message.getBody() == null || nick == null) { if (message.getBody() == null || nick == null) {