made grace period on a per account basis

iNPUTmice created

Change summary

src/eu/siacs/conversations/Config.java                         |  2 
src/eu/siacs/conversations/entities/Account.java               | 27 ++-
src/eu/siacs/conversations/parser/MessageParser.java           |  6 
src/eu/siacs/conversations/parser/PresenceParser.java          |  3 
src/eu/siacs/conversations/services/NotificationService.java   | 25 --
src/eu/siacs/conversations/services/XmppConnectionService.java |  4 
6 files changed, 30 insertions(+), 37 deletions(-)

Detailed changes

src/eu/siacs/conversations/Config.java 🔗

@@ -10,7 +10,7 @@ public final class Config {
 	public static final int PING_MIN_INTERVAL = 30;
 	public static final int PING_TIMEOUT = 10;
 	public static final int CONNECT_TIMEOUT = 90;
-	public static final int CARBON_GRACE_PERIOD = 120;
+	public static final int CARBON_GRACE_PERIOD = 60;
 
 	public static final int AVATAR_SIZE = 192;
 	public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.WEBP;

src/eu/siacs/conversations/entities/Account.java 🔗

@@ -11,6 +11,7 @@ import net.java.otr4j.crypto.OtrCryptoException;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.crypto.OtrEngine;
 import eu.siacs.conversations.persistance.FileBackend;
@@ -21,6 +22,7 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.graphics.Bitmap;
+import android.os.SystemClock;
 
 public class Account extends AbstractEntity {
 
@@ -64,16 +66,14 @@ public class Account extends AbstractEntity {
 
 	protected boolean online = false;
 
-	transient OtrEngine otrEngine = null;
-	transient XmppConnection xmppConnection = null;
-	transient protected Presences presences = new Presences();
-
+	private OtrEngine otrEngine = null;
+	private XmppConnection xmppConnection = null;
+	private Presences presences = new Presences();
+	private long mEndGracePeriod = 0L;
 	private String otrFingerprint;
-
 	private Roster roster = null;
-
+	
 	private List<Bookmark> bookmarks = new CopyOnWriteArrayList<Bookmark>();
-
 	public List<Conversation> pendingConferenceJoins = new CopyOnWriteArrayList<Conversation>();
 	public List<Conversation> pendingConferenceLeaves = new CopyOnWriteArrayList<Conversation>();
 
@@ -401,4 +401,17 @@ public class Account extends AbstractEntity {
 			return R.string.account_status_unknown;
 		}
 	}
+	
+	public void activateGracePeriod() {
+		this.mEndGracePeriod = SystemClock.elapsedRealtime()
+				+ (Config.CARBON_GRACE_PERIOD * 1000);
+	}
+
+	public void deactivateGracePeriod() {
+		this.mEndGracePeriod = 0L;
+	}
+
+	public boolean inGracePeriod() {
+		return SystemClock.elapsedRealtime() < this.mEndGracePeriod;
+	}
 }

src/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -417,8 +417,7 @@ public class MessageParser extends AbstractParser implements
 				message = this.parseCarbonMessage(packet, account);
 				if (message != null) {
 					if (message.getStatus() == Message.STATUS_SEND) {
-						mXmppConnectionService.getNotificationService()
-								.activateGracePeriod();
+						account.activateGracePeriod();
 						notify = false;
 						mXmppConnectionService.markRead(
 								message.getConversation(), false);
@@ -440,8 +439,7 @@ public class MessageParser extends AbstractParser implements
 				} else {
 					mXmppConnectionService.markRead(message.getConversation(),
 							false);
-					mXmppConnectionService.getNotificationService()
-							.activateGracePeriod();
+					account.activateGracePeriod();
 					notify = false;
 				}
 			}

src/eu/siacs/conversations/parser/PresenceParser.java 🔗

@@ -58,8 +58,7 @@ public class PresenceParser extends AbstractParser implements
 							Presences.parseShow(packet.findChild("show")));
 				} else if (type.equals("unavailable")) {
 					account.removePresence(fromParts[1]);
-					mXmppConnectionService.getNotificationService()
-							.deactivateGracePeriod();
+					account.deactivateGracePeriod();
 				}
 			}
 		} else {

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

@@ -20,6 +20,7 @@ import android.text.Html;
 
 import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.ui.ConversationActivity;
@@ -34,9 +35,7 @@ public class NotificationService {
 	public int NOTIFICATION_ID = 0x2342;
 	private Conversation mOpenConversation;
 	private boolean mIsInForeground;
-
-	private long mEndGracePeriod = 0L;
-
+	
 	public NotificationService(XmppConnectionService service) {
 		this.mXmppConnectionService = service;
 		this.mNotificationManager = (NotificationManager) service
@@ -62,8 +61,9 @@ public class NotificationService {
 				notifications.put(conversationUuid, mList);
 			}
 		}
+		Account account = message.getConversation().getAccount();
 		updateNotification((!(this.mIsInForeground && this.mOpenConversation == null) || !isScreenOn)
-				&& !inGracePeriod());
+				&& !account.inGracePeriod());
 	}
 
 	public void clear() {
@@ -170,9 +170,7 @@ public class NotificationService {
 				}
 			}
 			mBuilder.setDeleteIntent(createDeleteIntent());
-			if (!inGracePeriod()) {
-				mBuilder.setLights(0xffffffff, 2000, 4000);
-			}
+			mBuilder.setLights(0xffffffff, 2000, 4000);
 			Notification notification = mBuilder.build();
 			mNotificationManager.notify(NOTIFICATION_ID, notification);
 		}
@@ -231,17 +229,4 @@ public class NotificationService {
 	public void setIsInForeground(boolean foreground) {
 		this.mIsInForeground = foreground;
 	}
-
-	public void activateGracePeriod() {
-		this.mEndGracePeriod = SystemClock.elapsedRealtime()
-				+ (Config.CARBON_GRACE_PERIOD * 1000);
-	}
-
-	public void deactivateGracePeriod() {
-		this.mEndGracePeriod = 0L;
-	}
-
-	private boolean inGracePeriod() {
-		return SystemClock.elapsedRealtime() < this.mEndGracePeriod;
-	}
 }

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

@@ -529,6 +529,7 @@ public class XmppConnectionService extends Service {
 
 	synchronized public void sendMessage(Message message) {
 		Account account = message.getConversation().getAccount();
+		account.deactivateGracePeriod();
 		Conversation conv = message.getConversation();
 		MessagePacket packet = null;
 		boolean saveInDb = true;
@@ -1019,7 +1020,6 @@ public class XmppConnectionService extends Service {
 			return;
 		}
 		synchronized (this.convChangedListenerCount) {
-			this.mNotificationService.deactivateGracePeriod();
 			if (checkListeners()) {
 				switchToForeground();
 			}
@@ -1049,7 +1049,6 @@ public class XmppConnectionService extends Service {
 			return;
 		}
 		synchronized (this.accountChangedListenerCount) {
-			this.mNotificationService.deactivateGracePeriod();
 			if (checkListeners()) {
 				switchToForeground();
 			}
@@ -1077,7 +1076,6 @@ public class XmppConnectionService extends Service {
 			return;
 		}
 		synchronized (this.rosterChangedListenerCount) {
-			this.mNotificationService.deactivateGracePeriod();
 			if (checkListeners()) {
 				switchToForeground();
 			}