Change summary
src/main/java/eu/siacs/conversations/entities/Conversation.java | 6
src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 8
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 7
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 18
4 files changed, 36 insertions(+), 3 deletions(-)
Detailed changes
@@ -1256,6 +1256,12 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
}
+ public void remove(Message message) {
+ synchronized (this.messages) {
+ this.messages.remove(message);
+ }
+ }
+
public void add(Message message) {
synchronized (this.messages) {
this.messages.add(message);
@@ -1351,6 +1351,14 @@ public class DatabaseBackend extends SQLiteOpenHelper {
db.update("cheogram." + Message.TABLENAME, message.getCheogramContentValues(), Message.UUID + "=?", args) == 1;
}
+
+ public boolean deleteMessage(String uuid) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ String[] args = {uuid};
+ return db.delete(Message.TABLENAME, Message.UUID + "=?", args) == 1 &&
+ db.delete("cheogram." + Message.TABLENAME, Message.UUID + "=?", args) == 1;
+ }
+
public void readRoster(Roster roster) {
final SQLiteDatabase db = this.getReadableDatabase();
final String[] args = {roster.getAccount().getUuid()};
@@ -4349,6 +4349,13 @@ public class XmppConnectionService extends Service {
return mBinder;
}
+ public void deleteMessage(Message message) {
+ mScheduledMessages.remove(message.getUuid());
+ databaseBackend.deleteMessage(message.getUuid());
+ ((Conversation) message.getConversation()).remove(message);
+ updateConversationUi();
+ }
+
public void updateMessage(Message message) {
updateMessage(message, true);
}
@@ -1003,9 +1003,17 @@ public class ConversationFragment extends XmppFragment
message.setBody(hasSubject && body.length() == 0 ? null : body);
if (hasSubject) message.setSubject(binding.textinputSubject.getText().toString());
message.setThread(conversation.getThread());
- message.putEdited(message.getUuid(), message.getServerMsgId());
- message.setServerMsgId(null);
- message.setUuid(UUID.randomUUID().toString());
+ if (message.getStatus() == Message.STATUS_WAITING) {
+ if (sendAt != null) message.setTime(sendAt);
+ activity.xmppConnectionService.updateMessage(message);
+ setupReply(null);
+ messageSent();
+ return;
+ } else {
+ message.putEdited(message.getUuid(), message.getServerMsgId());
+ message.setServerMsgId(null);
+ message.setUuid(UUID.randomUUID().toString());
+ }
}
if (sendAt != null) message.setTime(sendAt);
switch (conversation.getNextEncryption()) {
@@ -1810,6 +1818,10 @@ public class ConversationFragment extends XmppFragment
while (message.mergeable(message.next())) {
message = message.next();
}
+ if (message.getStatus() == Message.STATUS_WAITING || message.getStatus() == Message.STATUS_OFFERED) {
+ activity.xmppConnectionService.deleteMessage(message);
+ return;
+ }
Element reactions = message.getReactions();
if (reactions != null) {
final Message previousReaction = conversation.findMessageReactingTo(reactions.getAttribute("id"), null);