diff --git a/src/eu/siacs/conversations/entities/Conversation.java b/src/eu/siacs/conversations/entities/Conversation.java index fedb0893a..39e54a8f5 100644 --- a/src/eu/siacs/conversations/entities/Conversation.java +++ b/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 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; + } + } + } } diff --git a/src/eu/siacs/conversations/services/NotificationService.java b/src/eu/siacs/conversations/services/NotificationService.java index 53c4707f5..416567071 100644 --- a/src/eu/siacs/conversations/services/NotificationService.java +++ b/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; } diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index 6817a3865..f3db8cb43 100644 --- a/src/eu/siacs/conversations/ui/ConversationActivity.java +++ b/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) { diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index 928bb6f39..cdaa71522 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/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; diff --git a/src/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 25df83966..2671cf50d 100644 --- a/src/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -425,7 +425,7 @@ public class MessageAdapter extends ArrayAdapter { view.getLayoutParams().height = 1; } else { view.getLayoutParams().height = 0; - + } view.setLayoutParams(view.getLayoutParams()); return view;