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