Prevent crash

pull/147/head
M66B 6 years ago
parent f9b96add3d
commit 0c4f442be0

@ -70,7 +70,6 @@ import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
@ -452,11 +451,10 @@ public class FragmentMessages extends FragmentEx {
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);
modelMessages.removeObservers(viewType, getViewLifecycleOwner());
else
modelMessages.observe(viewType, owner, observer);
modelMessages.observe(viewType, getViewLifecycleOwner(), observer);
}
if (selectionTracker.hasSelection()) {
@ -1758,8 +1756,7 @@ public class FragmentMessages extends FragmentEx {
// Sort changed
final ViewModelMessages modelMessages = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
LifecycleOwner owner = (viewType == AdapterMessage.ViewType.THREAD ? getViewLifecycleOwner() : getActivity());
modelMessages.removeObservers(viewType, owner);
modelMessages.removeObservers(viewType, getViewLifecycleOwner());
DB db = DB.getInstance(getContext());
LivePagedListBuilder<Integer, TupleMessageEx> builder = null;
@ -1847,8 +1844,8 @@ public class FragmentMessages extends FragmentEx {
builder.setFetchExecutor(executor);
modelMessages.setMessages(viewType, builder.build());
modelMessages.observe(viewType, owner, observer);
modelMessages.setMessages(viewType, getActivity(), builder.build());
modelMessages.observe(viewType, getViewLifecycleOwner(), observer);
}
private Observer<PagedList<TupleMessageEx>> observer = new Observer<PagedList<TupleMessageEx>>() {

@ -34,23 +34,30 @@ import androidx.paging.PagedList;
public class ViewModelMessages extends ViewModel {
private Map<Boolean, LiveData<PagedList<TupleMessageEx>>> messages = new HashMap<>();
void setMessages(AdapterMessage.ViewType viewType, LiveData<PagedList<TupleMessageEx>> messages) {
boolean thread = (viewType == AdapterMessage.ViewType.THREAD);
void setMessages(AdapterMessage.ViewType viewType, LifecycleOwner owner, final LiveData<PagedList<TupleMessageEx>> messages) {
final boolean thread = (viewType == AdapterMessage.ViewType.THREAD);
this.messages.put(thread, messages);
// Keep list up-to-date for previous/next navigation
messages.observe(owner, new Observer<PagedList<TupleMessageEx>>() {
@Override
public void onChanged(PagedList<TupleMessageEx> messages) {
}
});
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i("Removed model thread=" + thread);
ViewModelMessages.this.messages.remove(thread);
}
});
}
void observe(AdapterMessage.ViewType viewType, LifecycleOwner owner, Observer<PagedList<TupleMessageEx>> observer) {
if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
final boolean thread = (viewType == AdapterMessage.ViewType.THREAD);
messages.get(thread).observe(owner, observer);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
Log.i("Removed model thread=" + thread);
messages.remove(thread);
}
});
}
}

Loading…
Cancel
Save