Switch to existing session when there is one, for incoming intent

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/Conversation.java   | 19 +
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java |  4 
2 files changed, 22 insertions(+), 1 deletion(-)

Detailed changes

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

@@ -1303,6 +1303,10 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
         pagerAdapter.startCommand(command, xmppConnectionService);
     }
 
+    public boolean switchToSession(final String node) {
+        return pagerAdapter.switchToSession(node);
+    }
+
     public void setupViewPager(ViewPager pager, TabLayout tabs) {
         pagerAdapter.setupViewPager(pager, tabs);
     }
@@ -1420,6 +1424,21 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
             notifyDataSetChanged();
         }
 
+        public boolean switchToSession(final String node) {
+            if (sessions == null) return false;
+
+            int i = 0;
+            for (CommandSession session : sessions) {
+                if (session.mNode.equals(node)) {
+                    if (mPager != null) mPager.setCurrentItem(i + 2);
+                    return true;
+                }
+                i++;
+            }
+
+            return false;
+        }
+
         @NonNull
         @Override
         public Object instantiateItem(@NonNull ViewGroup container, int position) {

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

@@ -2998,7 +2998,9 @@ public class ConversationFragment extends XmppFragment
                     if (discoJid != null) commandJid = discoJid;
                 }
                 if (node != null && commandJid != null) {
-                    conversation.startCommand(commandFor(commandJid, node), activity.xmppConnectionService);
+                    if (!conversation.switchToSession(node)) {
+                        conversation.startCommand(commandFor(commandJid, node), activity.xmppConnectionService);
+                    }
                     if (activity.xmppConnectionService.isOnboarding()) binding.tabLayout.setVisibility(View.GONE);
                 }
             });