made disabled notifications permanent across restarts

iNPUTmice created

Change summary

src/eu/siacs/conversations/entities/Conversation.java        | 23 ++++-
src/eu/siacs/conversations/services/NotificationService.java | 14 +-
src/eu/siacs/conversations/ui/ConversationActivity.java      |  2 
src/eu/siacs/conversations/ui/ConversationFragment.java      | 10 +-
src/eu/siacs/conversations/ui/adapter/MessageAdapter.java    |  2 
5 files changed, 34 insertions(+), 17 deletions(-)

Detailed changes

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

@@ -43,6 +43,7 @@ public class Conversation extends AbstractEntity {
 
 	public static final String ATTRIBUTE_NEXT_ENCRYPTION = "next_encryption";
 	public static final String ATTRIBUTE_MUC_PASSWORD = "muc_password";
+	public static final String ATTRIBUTE_MUTED_TILL = "muted_till";
 
 	private String name;
 	private String contactUuid;
@@ -54,8 +55,6 @@ public class Conversation extends AbstractEntity {
 
 	private JSONObject attributes = new JSONObject();
 
-	private long mutedTill = 0;
-
 	private String nextPresence;
 
 	private transient CopyOnWriteArrayList<Message> messages = null;
@@ -452,12 +451,13 @@ public class Conversation extends AbstractEntity {
 		return false;
 	}
 
-	public void setMutedTill(long mutedTill) {
-		this.mutedTill = mutedTill;
+	public void setMutedTill(long value) {
+		this.setAttribute(ATTRIBUTE_MUTED_TILL, String.valueOf(value));
 	}
 
 	public boolean isMuted() {
-		return SystemClock.elapsedRealtime() < this.mutedTill;
+		return SystemClock.elapsedRealtime() < this.getLongAttribute(
+				ATTRIBUTE_MUTED_TILL, 0);
 	}
 
 	public boolean setAttribute(String key, String value) {
@@ -489,4 +489,17 @@ public class Conversation extends AbstractEntity {
 			}
 		}
 	}
+
+	public long getLongAttribute(String key, long defaultValue) {
+		String value = this.getAttribute(key);
+		if (value == null) {
+			return defaultValue;
+		} else {
+			try {
+				return Long.parseLong(value);
+			} catch (NumberFormatException e) {
+				return defaultValue;
+			}
+		}
+	}
 }

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

@@ -34,7 +34,7 @@ public class NotificationService {
 	public int NOTIFICATION_ID = 0x2342;
 	private Conversation mOpenConversation;
 	private boolean mIsInForeground;
-	
+
 	private long mEndGracePeriod = 0L;
 
 	public NotificationService(XmppConnectionService service) {
@@ -60,8 +60,8 @@ public class NotificationService {
 			mList.add(message);
 			notifications.put(conversationUuid, mList);
 		}
-		updateNotification((!(this.mIsInForeground && this.mOpenConversation == null)
-				|| !isScreenOn) && !inGracePeriod());
+		updateNotification((!(this.mIsInForeground && this.mOpenConversation == null) || !isScreenOn)
+				&& !inGracePeriod());
 	}
 
 	public void clear() {
@@ -226,15 +226,15 @@ public class NotificationService {
 		this.mIsInForeground = foreground;
 	}
 
-	
 	public void activateGracePeriod() {
-		this.mEndGracePeriod = SystemClock.elapsedRealtime() + (Config.CARBON_GRACE_PERIOD * 1000);
+		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/ui/ConversationActivity.java 🔗

@@ -585,6 +585,8 @@ public class ConversationActivity extends XmppActivity implements
 									+ (durations[which] * 1000);
 						}
 						conversation.setMutedTill(till);
+						activity.xmppConnectionService.databaseBackend
+								.updateConversation(conversation);
 						ConversationFragment selectedFragment = (ConversationFragment) getFragmentManager()
 								.findFragmentByTag("conversation");
 						if (selectedFragment != null) {

src/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -131,9 +131,9 @@ public class ConversationFragment extends Fragment {
 			activity.endConversation(conversation);
 		}
 	};
-	
+
 	private OnClickListener joinMuc = new OnClickListener() {
-		
+
 		@Override
 		public void onClick(View v) {
 			activity.xmppConnectionService.joinMuc(conversation);
@@ -438,6 +438,8 @@ public class ConversationFragment extends Fragment {
 							@Override
 							public void onClick(View v) {
 								conversation.setMutedTill(0);
+								activity.xmppConnectionService.databaseBackend
+										.updateConversation(conversation);
 								updateMessages();
 							}
 						});
@@ -502,8 +504,8 @@ public class ConversationFragment extends Fragment {
 								R.string.leave, leaveMuc);
 						break;
 					case MucOptions.KICKED_FROM_ROOM:
-						showSnackbar(R.string.conference_kicked,
-								R.string.join, joinMuc);
+						showSnackbar(R.string.conference_kicked, R.string.join,
+								joinMuc);
 						break;
 					default:
 						break;