Return to previously selected tab when opening a conversation

Stephen Paul Weber created

If user manually selects a tab, remember that.

Change summary

src/main/java/eu/siacs/conversations/entities/Conversation.java   | 7 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 8 +
2 files changed, 15 insertions(+)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -85,6 +85,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
     private ChatState mOutgoingChatState = Config.DEFAULT_CHAT_STATE;
     private ChatState mIncomingChatState = Config.DEFAULT_CHAT_STATE;
     private String mFirstMamReference = null;
+    protected int mCurrentTab = -1;
 
     public Conversation(final String name, final Account account, final Jid contactJid,
                         final int mode) {
@@ -1110,7 +1111,13 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
         return getName().toString();
     }
 
+    public void setCurrentTab(int tab) {
+        mCurrentTab = tab;
+    }
+
     public int getCurrentTab() {
+        if (mCurrentTab >= 0) return mCurrentTab;
+
         if (!isRead() || getContact().resourceWhichSupport(Namespace.COMMANDS) == null) {
             return 0;
         }

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -1248,6 +1248,14 @@ public class ConversationFragment extends XmppFragment
         ));
         binding.tabLayout.setupWithViewPager(binding.conversationViewPager);
         binding.conversationViewPager.setCurrentItem(conversation.getCurrentTab());
+        binding.conversationViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+            public void onPageScrollStateChanged(int state) { }
+            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
+
+            public void onPageSelected(int position) {
+                conversation.setCurrentTab(position);
+            }
+        });
 
         commandAdapter = new CommandAdapter((XmppActivity) getActivity());
         binding.commandsView.setAdapter(commandAdapter);