From 8ffb1c4156290b3327be00c22ac86f802d539a7f Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 12 Jan 2019 11:54:52 +0000 Subject: [PATCH] Prevent crash --- .../eu/faircode/email/FragmentMessages.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 588f7d5806..1d1179cd9a 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -67,6 +67,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.SearchView; import androidx.constraintlayout.widget.Group; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; @@ -447,21 +448,24 @@ public class FragmentMessages extends FragmentEx { selectionTracker.addObserver(new SelectionTracker.SelectionObserver() { @Override public void onSelectionChanged() { - try { - ViewModelMessages modelMessages = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class); - LifecycleOwner owner = (viewType == AdapterMessage.ViewType.THREAD ? getViewLifecycleOwner() : getActivity()); - if (selectionTracker.hasSelection()) { - swipeRefresh.setEnabled(false); + // Workaround AndroidX bug + FragmentActivity activity = getActivity(); + if (activity != null) { + ViewModelMessages modelMessages = ViewModelProviders.of(activity).get(ViewModelMessages.class); + LifecycleOwner owner = (viewType == AdapterMessage.ViewType.THREAD ? getViewLifecycleOwner() : activity); + if (selectionTracker.hasSelection()) modelMessages.removeObservers(viewType, owner); - fabMore.show(); - } else { - predicate.clearAccount(); - fabMore.hide(); + else modelMessages.observe(viewType, owner, observer); - swipeRefresh.setEnabled(pull); - } - } catch (IllegalStateException ex) { - Log.w(ex); + } + + if (selectionTracker.hasSelection()) { + swipeRefresh.setEnabled(false); + fabMore.show(); + } else { + predicate.clearAccount(); + fabMore.hide(); + swipeRefresh.setEnabled(pull); } } });