do not update foreground notification on error if it wasn’t enabled

This commit is contained in:
Daniel Gultsch 2018-11-11 09:54:52 +01:00
parent 306e12b24e
commit 4c88fce3b8
2 changed files with 13 additions and 12 deletions

View file

@ -31,8 +31,6 @@ import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
import org.conscrypt.Conscrypt;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -73,7 +71,7 @@ public class NotificationService {
private static final String CONVERSATIONS_GROUP = "eu.siacs.conversations"; private static final String CONVERSATIONS_GROUP = "eu.siacs.conversations";
private static final int NOTIFICATION_ID_MULTIPLIER = 1024 * 1024; private static final int NOTIFICATION_ID_MULTIPLIER = 1024 * 1024;
private static final int NOTIFICATION_ID = 2 * NOTIFICATION_ID_MULTIPLIER; private static final int NOTIFICATION_ID = 2 * NOTIFICATION_ID_MULTIPLIER;
public static final int FOREGROUND_NOTIFICATION_ID = NOTIFICATION_ID_MULTIPLIER * 4; static final int FOREGROUND_NOTIFICATION_ID = NOTIFICATION_ID_MULTIPLIER * 4;
private static final int ERROR_NOTIFICATION_ID = NOTIFICATION_ID_MULTIPLIER * 6; private static final int ERROR_NOTIFICATION_ID = NOTIFICATION_ID_MULTIPLIER * 6;
private final XmppConnectionService mXmppConnectionService; private final XmppConnectionService mXmppConnectionService;
private final LinkedHashMap<String, ArrayList<Message>> notifications = new LinkedHashMap<>(); private final LinkedHashMap<String, ArrayList<Message>> notifications = new LinkedHashMap<>();
@ -226,7 +224,7 @@ public class NotificationService {
} }
} }
public void pushFromDirectReply(final Message message) { void pushFromDirectReply(final Message message) {
synchronized (notifications) { synchronized (notifications) {
pushToStack(message); pushToStack(message);
updateNotification(false); updateNotification(false);
@ -252,8 +250,7 @@ public class NotificationService {
private List<String> getBacklogConversations(Account account) { private List<String> getBacklogConversations(Account account) {
final List<String> conversations = new ArrayList<>(); final List<String> conversations = new ArrayList<>();
for (Iterator<Map.Entry<Conversation, AtomicInteger>> it = mBacklogMessageCounter.entrySet().iterator(); it.hasNext(); ) { for (Map.Entry<Conversation, AtomicInteger> entry : mBacklogMessageCounter.entrySet()) {
Map.Entry<Conversation, AtomicInteger> entry = it.next();
if (entry.getKey().getAccount() == account) { if (entry.getKey().getAccount() == account) {
conversations.add(entry.getKey().getUuid()); conversations.add(entry.getKey().getUuid());
} }
@ -274,7 +271,7 @@ public class NotificationService {
return count; return count;
} }
public void finishBacklog(boolean notify) { void finishBacklog(boolean notify) {
finishBacklog(notify, null); finishBacklog(notify, null);
} }
@ -369,7 +366,7 @@ public class NotificationService {
updateNotification(notify, null, false); updateNotification(notify, null, false);
} }
public void updateNotification(final boolean notify, final List<String> conversations) { private void updateNotification(final boolean notify, final List<String> conversations) {
updateNotification(notify, conversations, false); updateNotification(notify, conversations, false);
} }
@ -885,7 +882,7 @@ public class NotificationService {
return PendingIntent.getActivity(mXmppConnectionService, 0, new Intent(mXmppConnectionService, ConversationsActivity.class), 0); return PendingIntent.getActivity(mXmppConnectionService, 0, new Intent(mXmppConnectionService, ConversationsActivity.class), 0);
} }
public void updateErrorNotification() { void updateErrorNotification() {
if (Config.SUPPRESS_ERROR_NOTIFICATION) { if (Config.SUPPRESS_ERROR_NOTIFICATION) {
cancel(ERROR_NOTIFICATION_ID); cancel(ERROR_NOTIFICATION_ID);
return; return;
@ -897,7 +894,7 @@ public class NotificationService {
errors.add(account); errors.add(account);
} }
} }
if (Compatibility.keepForegroundService(mXmppConnectionService)) { if (mXmppConnectionService.foregroundNotificationNeedsUpdatingWhenErrorStateChanges()) {
notify(FOREGROUND_NOTIFICATION_ID, createForegroundNotification()); notify(FOREGROUND_NOTIFICATION_ID, createForegroundNotification());
} }
final Notification.Builder mBuilder = new Notification.Builder(mXmppConnectionService); final Notification.Builder mBuilder = new Notification.Builder(mXmppConnectionService);
@ -940,7 +937,7 @@ public class NotificationService {
notify(ERROR_NOTIFICATION_ID, mBuilder.build()); notify(ERROR_NOTIFICATION_ID, mBuilder.build());
} }
public void updateFileAddingNotification(int current, Message message) { void updateFileAddingNotification(int current, Message message) {
Notification.Builder mBuilder = new Notification.Builder(mXmppConnectionService); Notification.Builder mBuilder = new Notification.Builder(mXmppConnectionService);
mBuilder.setContentTitle(mXmppConnectionService.getString(R.string.transcoding_video)); mBuilder.setContentTitle(mXmppConnectionService.getString(R.string.transcoding_video));
mBuilder.setProgress(100, current, false); mBuilder.setProgress(100, current, false);
@ -954,7 +951,7 @@ public class NotificationService {
notify(FOREGROUND_NOTIFICATION_ID, notification); notify(FOREGROUND_NOTIFICATION_ID, notification);
} }
public void dismissForcedForegroundNotification() { void dismissForcedForegroundNotification() {
cancel(FOREGROUND_NOTIFICATION_ID); cancel(FOREGROUND_NOTIFICATION_ID);
} }

View file

@ -1105,6 +1105,10 @@ public class XmppConnectionService extends Service {
Log.d(Config.LOGTAG,"ForegroundService: "+(status?"on":"off")); Log.d(Config.LOGTAG,"ForegroundService: "+(status?"on":"off"));
} }
public boolean foregroundNotificationNeedsUpdatingWhenErrorStateChanges() {
return !mForceForegroundService.get() && Compatibility.keepForegroundService(this) && hasEnabledAccounts();
}
@Override @Override
public void onTaskRemoved(final Intent rootIntent) { public void onTaskRemoved(final Intent rootIntent) {
super.onTaskRemoved(rootIntent); super.onTaskRemoved(rootIntent);