diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index a54772c5039c98ce57e7f6f0d5166d67b4367bf7..0857deba38b60b32eb2829a311d34d843b93fa24 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -1388,7 +1388,11 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl oldConversation.pagerAdapter.mTabs = null; } - if (mPager == null) return; + if (mPager == null) { + page1 = null; + page2 = null; + return; + } if (sessions != null) show(); if (pager.getChildAt(0) != null) page1 = pager.getChildAt(0); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 660376e72e63ab612bea452be5bdd963a1082382..00ddfede9d31c8369c6c980087b2b4901c5e6c52 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -1215,7 +1215,7 @@ public class ConversationFragment extends XmppFragment public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); - activity.getOnBackPressedDispatcher().addCallback(backPressedLeaveSingleThread); + activity.getOnBackPressedDispatcher().addCallback(this, backPressedLeaveSingleThread); } @Override @@ -1378,6 +1378,7 @@ public class ConversationFragment extends XmppFragment messageListAdapter.setOnContactPictureClicked(null); messageListAdapter.setOnContactPictureLongClicked(null); messageListAdapter.setOnInlineImageLongClicked(null); + binding.conversationViewPager.setAdapter(null); if (conversation != null) conversation.setupViewPager(null, null, false, null); } diff --git a/src/main/java/eu/siacs/conversations/ui/XmppFragment.java b/src/main/java/eu/siacs/conversations/ui/XmppFragment.java index e9844b055df90ae2c3e6b88246c4b34c6da7398d..a7216a7d74bd8e568dad614fbf0af647ddc62879 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppFragment.java @@ -32,9 +32,15 @@ package eu.siacs.conversations.ui; import android.app.Activity; import android.app.Fragment; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleRegistry; +import androidx.lifecycle.LifecycleOwner; + import eu.siacs.conversations.ui.interfaces.OnBackendConnected; -public abstract class XmppFragment extends Fragment implements OnBackendConnected { +public abstract class XmppFragment extends Fragment implements OnBackendConnected, LifecycleOwner { + + protected LifecycleRegistry lifecycle = new LifecycleRegistry(this); abstract void refresh(); public void refreshForNewCaps() { } @@ -45,4 +51,39 @@ public abstract class XmppFragment extends Fragment implements OnBackendConnecte activity.runOnUiThread(runnable); } } + + @Override + public void onStart() { + super.onStart(); + lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_START); + } + + @Override + public void onResume() { + super.onResume(); + lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_RESUME); + } + + @Override + public void onPause() { + lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE); + super.onPause(); + } + + @Override + public void onStop() { + lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP); + super.onStop(); + } + + @Override + public void onDestroy() { + lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); + super.onDestroy(); + } + + @Override + public Lifecycle getLifecycle() { + return lifecycle; + } }