Prevent thread from changing after user selects manually

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/Conversation.java   |  9 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 11 
2 files changed, 18 insertions(+), 2 deletions(-)

Detailed changes

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)) {

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