From c5cfb95f7b40b4e06d8b583802e81a9d9c6b43df Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 26 Oct 2022 13:03:35 -0500 Subject: [PATCH] Prevent thread from changing after user selects manually --- .../eu/siacs/conversations/entities/Conversation.java | 9 +++++++++ .../siacs/conversations/ui/ConversationFragment.java | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 49cbb720f31a4ad2d7abd7e31175953d92edc1de..0a25dd7b869020fcb2ed9babbffea391e04ff04f 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -149,6 +149,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl protected int mCurrentTab = -1; protected ConversationPagerAdapter pagerAdapter = new ConversationPagerAdapter(); protected Element thread = null; + protected boolean userSelectedThread = false; public Conversation(final String name, final Account account, final Jid contactJid, final int mode) { @@ -637,6 +638,14 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl this.thread = thread; } + public void setUserSelectedThread(boolean flag) { + this.userSelectedThread = flag; + } + + public boolean getUserSelectedThread() { + return this.userSelectedThread; + } + public boolean isRead() { synchronized (this.messages) { for(final Message message : Lists.reverse(this.messages)) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 746b1ae6b642a217497e3e85f424ca2016e7a478..af1cfc16342bc306100f14bf1aac26ae3d555fed 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -854,6 +854,7 @@ public class ConversationFragment extends XmppFragment } private void sendMessage() { + conversation.setUserSelectedThread(false); if (mediaPreviewAdapter.hasAttachments()) { commitAttachments(); return; @@ -1251,7 +1252,10 @@ public class ConversationFragment extends XmppFragment new EditMessageActionModeCallback(this.binding.textinput)); } - binding.threadIdenticon.setOnClickListener(v -> newThread()); + binding.threadIdenticon.setOnClickListener(v -> { + newThread(); + conversation.setUserSelectedThread(true); + }); return binding.getRoot(); } @@ -1281,6 +1285,7 @@ public class ConversationFragment extends XmppFragment private void quoteMessage(Message message) { setThread(message.getThread()); + conversation.setUserSelectedThread(true); quoteText(MessageUtils.prepareQuote(message)); } @@ -2142,7 +2147,7 @@ public class ConversationFragment extends XmppFragment } private void updateThreadFromLastMessage() { - if (activity != null && this.conversation != null && TextUtils.isEmpty(binding.textinput.getText())) { + if (this.conversation != null && !this.conversation.getUserSelectedThread() && TextUtils.isEmpty(binding.textinput.getText())) { Message message = getLastVisibleMessage(); if (message == null) { newThread(); @@ -3726,6 +3731,8 @@ public class ConversationFragment extends XmppFragment @Override public void onContactPictureClicked(Message message) { setThread(message.getThread()); + conversation.setUserSelectedThread(true); + final boolean received = message.getStatus() <= Message.STATUS_RECEIVED; if (received) { if (message.getConversation() instanceof Conversation