diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java index ff2c852edf8d2e677ddb93ba68bfd6f3b6f1a90c..c3ffb1e31dfdafe059192e1a1a1a4ba438fa4021 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 f15e90eaf484bf8b49b9d82fcd4edb46ff7df01c..18f24f9c992811be40f3a5eed8c7e016ea31ec1f 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 67e6e2a5823e3ff234c470e80034437acef3f565..d51c6e3f7b5ccf90c37c7a8e5946c4e4505b9bb7 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);