From c3b5418f537e536116db381e5599c9878dfef492 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Mon, 10 Mar 2014 19:55:33 +0000
Subject: [PATCH] Notifications were leading to wrong conversations/groups. Bug
 #49.

---
 .../AndroidNotificationManagerImpl.java       | 22 ++++++++++---------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
index c37b7b8211..8167de5a4f 100644
--- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
@@ -2,9 +2,8 @@ package org.briarproject.android;
 
 import static android.app.Notification.DEFAULT_LIGHTS;
 import static android.app.Notification.DEFAULT_SOUND;
-import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
 import static android.content.Context.NOTIFICATION_SERVICE;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
 import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
 import static java.util.logging.Level.WARNING;
 
@@ -58,6 +57,7 @@ Service, EventListener {
 			new HashMap<GroupId, Integer>(); // Locking: this
 
 	private int privateTotal = 0, groupTotal = 0; // Locking: this
+	private int nextRequestId = 0; // Locking: this
 
 	private volatile Settings settings = new Settings();
 
@@ -128,22 +128,23 @@ Service, EventListener {
 					privateTotal));
 			b.setDefaults(getDefaults());
 			b.setOnlyAlertOnce(true);
+			b.setAutoCancel(true);
 			if(contactCounts.size() == 1) {
 				Intent i = new Intent(appContext, ConversationActivity.class);
 				ContactId c = contactCounts.keySet().iterator().next();
 				i.putExtra("briar.CONTACT_ID", c.getInt());
-				i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
+				i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
 				TaskStackBuilder t = TaskStackBuilder.create(appContext);
 				t.addParentStack(ConversationActivity.class);
 				t.addNextIntent(i);
-				b.setContentIntent(t.getPendingIntent(0, FLAG_UPDATE_CURRENT));
+				b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
 			} else {
 				Intent i = new Intent(appContext, ContactListActivity.class);
-				i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
+				i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
 				TaskStackBuilder t = TaskStackBuilder.create(appContext);
 				t.addParentStack(ContactListActivity.class);
 				t.addNextIntent(i);
-				b.setContentIntent(t.getPendingIntent(0, FLAG_UPDATE_CURRENT));
+				b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
 			}
 			Object o = appContext.getSystemService(NOTIFICATION_SERVICE);
 			NotificationManager nm = (NotificationManager) o;
@@ -198,22 +199,23 @@ Service, EventListener {
 					groupTotal));
 			b.setDefaults(getDefaults());
 			b.setOnlyAlertOnce(true);
+			b.setAutoCancel(true);
 			if(groupCounts.size() == 1) {
 				Intent i = new Intent(appContext, GroupActivity.class);
 				GroupId g = groupCounts.keySet().iterator().next();
 				i.putExtra("briar.GROUP_ID", g.getBytes());
-				i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
+				i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
 				TaskStackBuilder t = TaskStackBuilder.create(appContext);
 				t.addParentStack(GroupActivity.class);
 				t.addNextIntent(i);
-				b.setContentIntent(t.getPendingIntent(0, FLAG_UPDATE_CURRENT));
+				b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
 			} else {
 				Intent i = new Intent(appContext, GroupListActivity.class);
-				i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP);
+				i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
 				TaskStackBuilder t = TaskStackBuilder.create(appContext);
 				t.addParentStack(GroupListActivity.class);
 				t.addNextIntent(i);
-				b.setContentIntent(t.getPendingIntent(0, FLAG_UPDATE_CURRENT));
+				b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
 			}
 			Object o = appContext.getSystemService(NOTIFICATION_SERVICE);
 			NotificationManager nm = (NotificationManager) o;
-- 
GitLab