From e98677b2bbfb24e50d041627a3f4cb07db48fab7 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Wed, 13 Jan 2016 16:13:23 -0200
Subject: [PATCH] Do not show a notification for a conversation we are in

---
 .../AndroidNotificationManagerImpl.java       | 34 ++++++++++++++++---
 .../android/contact/ConversationActivity.java |  2 ++
 .../android/AndroidNotificationManager.java   |  4 +++
 3 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
index ff2c852edf..c3ffb1e31d 100644
--- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
@@ -69,6 +69,7 @@ EventListener {
 			new HashMap<GroupId, Integer>();
 	private int contactTotal = 0, forumTotal = 0;
 	private int nextRequestId = 0;
+	private ContactId activeContact;
 
 	private volatile Settings settings = new Settings();
 
@@ -113,11 +114,14 @@ EventListener {
 	public void showPrivateMessageNotification(ContactId c) {
 		lock.lock();
 		try {
-			Integer count = contactCounts.get(c);
-			if (count == null) contactCounts.put(c, 1);
-			else contactCounts.put(c, count + 1);
-			contactTotal++;
-			updatePrivateMessageNotification();
+			// check first if user has this conversation open at the moment
+			if (activeContact == null || !activeContact.equals(c)) {
+				Integer count = contactCounts.get(c);
+				if (count == null) contactCounts.put(c, 1);
+				else contactCounts.put(c, count + 1);
+				contactTotal++;
+				updatePrivateMessageNotification();
+			}
 		} finally {
 			lock.unlock();
 		}
@@ -135,6 +139,26 @@ EventListener {
 		}
 	}
 
+	public void blockPrivateMessageNotification(ContactId c) {
+		lock.lock();
+		try {
+			activeContact = c;
+		} finally {
+			lock.unlock();
+		}
+	}
+
+	public void unblockPrivateMessageNotification(ContactId c) {
+		lock.lock();
+		try {
+			if (activeContact != null && activeContact.equals(c)) {
+				activeContact = null;
+			}
+		} finally {
+			lock.unlock();
+		}
+	}
+
 	// Locking: lock
 	private void updatePrivateMessageNotification() {
 		if (contactTotal == 0) {
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index f15e90eaf4..18f24f9c99 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -122,6 +122,7 @@ public class ConversationActivity extends BriarActivity
 	public void onResume() {
 		super.onResume();
 		eventBus.addListener(this);
+		notificationManager.blockPrivateMessageNotification(contactId);
 		loadContactAndGroup();
 		loadHeaders();
 
@@ -133,6 +134,7 @@ public class ConversationActivity extends BriarActivity
 	public void onPause() {
 		super.onPause();
 		eventBus.removeListener(this);
+		notificationManager.unblockPrivateMessageNotification(contactId);
 		if (isFinishing()) markMessagesRead();
 	}
 
diff --git a/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java b/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
index 67e6e2a582..d51c6e3f7b 100644
--- a/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
+++ b/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
@@ -14,6 +14,10 @@ public interface AndroidNotificationManager extends Service {
 
 	void clearPrivateMessageNotification(ContactId c);
 
+	void blockPrivateMessageNotification(ContactId c);
+
+	void unblockPrivateMessageNotification(ContactId c);
+
 	void showForumPostNotification(GroupId g);
 
 	void clearForumPostNotification(GroupId g);
-- 
GitLab