fixed #52. thanks @strb

Daniel Gultsch created

Change summary

res/xml/preferences.xml                                        |  5 +
src/eu/siacs/conversations/services/XmppConnectionService.java | 12 +++
2 files changed, 16 insertions(+), 1 deletion(-)

Detailed changes

res/xml/preferences.xml 🔗

@@ -41,6 +41,11 @@
             android:key="notify_in_conversation_when_highlighted"
             android:title="Conference notification"
             android:summary="Always notify when a new conference message arrives instead of only when highlighted"/>
+        <CheckBoxPreference
+            android:key="notification_grace_period_after_carbon_received"
+            android:title="Notification grace period"
+            android:summary="Disable notifications for a short time after a carbon copy was received"
+            android:defaultValue="true"/>
     </PreferenceCategory>
     <PreferenceCategory 
         android:title="UI Options">

src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -84,6 +84,7 @@ public class XmppConnectionService extends Service {
 	private static final int PING_MIN_INTERVAL = 10;
 	private static final int PING_TIMEOUT = 5;
 	private static final int CONNECT_TIMEOUT = 60;
+	private static final long CARBON_GRACE_PERIOD = 60000L;
 
 	private List<Account> accounts;
 	private List<Conversation> conversations = null;
@@ -101,6 +102,8 @@ public class XmppConnectionService extends Service {
 
 	private Random mRandom = new Random(System.currentTimeMillis());
 
+	private long lastCarbonMessageReceived = -CARBON_GRACE_PERIOD;
+
 	private ContentObserver contactObserver = new ContentObserver(null) {
 		@Override
 		public void onChange(boolean selfChange) {
@@ -120,6 +123,12 @@ public class XmppConnectionService extends Service {
 				MessagePacket packet) {
 			Message message = null;
 			boolean notify = true;
+			if(PreferenceManager
+					.getDefaultSharedPreferences(getApplicationContext())
+					.getBoolean("notification_grace_period_after_carbon_received", true)){
+				notify=(SystemClock.elapsedRealtime() - lastCarbonMessageReceived) > CARBON_GRACE_PERIOD;
+			}
+
 			if ((packet.getType() == MessagePacket.TYPE_CHAT)) {
 				String pgpBody = MessageParser.getPgpBody(packet);
 				if (pgpBody != null) {
@@ -143,6 +152,7 @@ public class XmppConnectionService extends Service {
 							service);
 					if (message != null) {
 						if (message.getStatus() == Message.STATUS_SEND) {
+							lastCarbonMessageReceived = SystemClock.elapsedRealtime();
 							notify = false;
 							message.getConversation().markRead();
 						} else {
@@ -1351,4 +1361,4 @@ public class XmppConnectionService extends Service {
 		}
 
 	}
-}
+}