From 48baf56622134144a21cf1ef9b9421c037d9c71f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 1 Oct 2017 22:52:21 +0200 Subject: [PATCH] save message drafts across restarts. fixes #2642 --- .../conversations/entities/Conversation.java | 16 +++++++--------- .../conversations/ui/ConversationFragment.java | 12 +++++++++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 1d48438f3..4aefc95fa 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -54,6 +54,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl public static final String ATTRIBUTE_MUTED_TILL = "muted_till"; public static final String ATTRIBUTE_ALWAYS_NOTIFY = "always_notify"; public static final String ATTRIBUTE_LAST_CLEAR_HISTORY = "last_clear_history"; + public static final String ATTRIBUTE_NEXT_MESSAGE = "next_message"; private static final String ATTRIBUTE_CRYPTO_TARGETS = "crypto_targets"; @@ -81,8 +82,6 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl private transient String otrFingerprint = null; private Smp mSmp = new Smp(); - private String nextMessage; - private transient MucOptions mucOptions = null; private byte[] symmetricKey; @@ -753,19 +752,18 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl } public String getNextMessage() { - if (this.nextMessage == null) { - return ""; - } else { - return this.nextMessage; - } + final String nextMessage = getAttribute(ATTRIBUTE_NEXT_MESSAGE); + return nextMessage == null ? "" : nextMessage; } public boolean smpRequested() { return smp().status == Smp.STATUS_CONTACT_REQUESTED; } - public void setNextMessage(String message) { - this.nextMessage = message; + public boolean setNextMessage(String message) { + boolean changed = !getNextMessage().equals(message); + this.setAttribute(ATTRIBUTE_NEXT_MESSAGE,message); + return changed; } public void setSymmetricKey(byte[] key) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 98fdbf409..3658275da 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -889,7 +889,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } if (this.conversation != null) { final String msg = mEditMessage.getText().toString(); - this.conversation.setNextMessage(msg); + if (this.conversation.setNextMessage(msg)) { + activity.xmppConnectionService.updateConversation(this.conversation); + } updateChatState(this.conversation, msg); } } @@ -910,7 +912,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa setupIme(); if (this.conversation != null) { final String msg = mEditMessage.getText().toString(); - this.conversation.setNextMessage(msg); + if (this.conversation.setNextMessage(msg)) { + activity.xmppConnectionService.updateConversation(conversation); + } if (this.conversation != conversation) { updateChatState(this.conversation, msg); messageListAdapter.stopAudioPlayer(); @@ -1154,7 +1158,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa mEditMessage.append(conversation.getDraftMessage()); conversation.setDraftMessage(null); } - conversation.setNextMessage(mEditMessage.getText().toString()); + if (conversation.setNextMessage(mEditMessage.getText().toString())) { + activity.xmppConnectionService.updateConversation(conversation); + } updateChatMsgHint(); new Handler().post(new Runnable() { @Override