Fixed changing view model type

pull/156/head
M66B 6 years ago
parent 869ffd3c36
commit 9e301af6ad

@ -71,7 +71,6 @@ import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
@ -2620,10 +2619,15 @@ public class FragmentMessages extends FragmentBase {
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class); ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
LiveData<PagedList<TupleMessageEx>> liveMessages = model.getPagedList( ViewModelMessages.Model vmodel = model.getModel(
getContext(), getViewLifecycleOwner(), getContext(), getViewLifecycleOwner(),
viewType, account, folder, thread, id, query, server, viewType, account, folder, thread, id, query, server);
new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
vmodel.setCallback(callback);
vmodel.setObserver(getViewLifecycleOwner(), observer);
}
private BoundaryCallbackMessages.IBoundaryCallbackMessages callback = new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
@Override @Override
public void onLoading() { public void onLoading() {
loading = true; loading = true;
@ -2654,9 +2658,9 @@ public class FragmentMessages extends FragmentBase {
.create() .create()
.show(); .show();
} }
}); };
liveMessages.observe(getViewLifecycleOwner(), new Observer<PagedList<TupleMessageEx>>() { private Observer<PagedList<TupleMessageEx>> observer = new Observer<PagedList<TupleMessageEx>>() {
@Override @Override
public void onChanged(@Nullable PagedList<TupleMessageEx> messages) { public void onChanged(@Nullable PagedList<TupleMessageEx> messages) {
if (messages == null) if (messages == null)
@ -2690,8 +2694,7 @@ public class FragmentMessages extends FragmentBase {
grpReady.setVisibility(View.VISIBLE); grpReady.setVisibility(View.VISIBLE);
} }
} }
}); };
}
private boolean handleThreadActions(@NonNull PagedList<TupleMessageEx> messages) { private boolean handleThreadActions(@NonNull PagedList<TupleMessageEx> messages) {
// Auto close / next // Auto close / next

@ -52,12 +52,11 @@ public class ViewModelMessages extends ViewModel {
private static final int LOCAL_PAGE_SIZE = 100; private static final int LOCAL_PAGE_SIZE = 100;
private static final int REMOTE_PAGE_SIZE = 10; private static final int REMOTE_PAGE_SIZE = 10;
LiveData<PagedList<TupleMessageEx>> getPagedList( Model getModel(
Context context, LifecycleOwner owner, Context context, final LifecycleOwner owner,
final AdapterMessage.ViewType viewType, final AdapterMessage.ViewType viewType,
long account, long folder, String thread, long id, long account, long folder, String thread, long id,
String query, boolean server, String query, boolean server) {
BoundaryCallbackMessages.IBoundaryCallbackMessages callback) {
Args args = new Args(context, account, folder, thread, id, query, server); Args args = new Args(context, account, folder, thread, id, query, server);
Log.i("Get model " + viewType + " " + args); Log.i("Get model " + viewType + " " + args);
@ -67,8 +66,10 @@ public class ViewModelMessages extends ViewModel {
if (model == null || !model.args.equals(args)) { if (model == null || !model.args.equals(args)) {
Log.i("Creating model"); Log.i("Creating model");
if (model != null) if (model != null) {
model.clear(); model.clear();
model.list.removeObservers(owner);
}
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
@ -168,9 +169,6 @@ public class ViewModelMessages extends ViewModel {
}); });
} }
if (model.boundary != null)
model.boundary.setCallback(callback);
if (viewType == AdapterMessage.ViewType.UNIFIED) { if (viewType == AdapterMessage.ViewType.UNIFIED) {
remove(AdapterMessage.ViewType.FOLDER); remove(AdapterMessage.ViewType.FOLDER);
remove(AdapterMessage.ViewType.SEARCH); remove(AdapterMessage.ViewType.SEARCH);
@ -182,7 +180,7 @@ public class ViewModelMessages extends ViewModel {
Log.i("Returning model=" + viewType); Log.i("Returning model=" + viewType);
dump(); dump();
return model.list; return model;
} }
@Override @Override
@ -193,11 +191,9 @@ public class ViewModelMessages extends ViewModel {
private void remove(AdapterMessage.ViewType viewType) { private void remove(AdapterMessage.ViewType viewType) {
Model model = models.get(viewType); Model model = models.get(viewType);
if (model != null) { if (model != null)
model.clear();
models.remove(viewType); models.remove(viewType);
} }
}
void observePrevNext(LifecycleOwner owner, final long id, final IPrevNext intf) { void observePrevNext(LifecycleOwner owner, final long id, final IPrevNext intf) {
Log.i("Observe prev/next model=" + last); Log.i("Observe prev/next model=" + last);
@ -321,7 +317,7 @@ public class ViewModelMessages extends ViewModel {
Log.i("Current models=" + TextUtils.join(", ", models.keySet())); Log.i("Current models=" + TextUtils.join(", ", models.keySet()));
} }
private class Model { class Model {
private Args args; private Args args;
private LiveData<PagedList<TupleMessageEx>> list; private LiveData<PagedList<TupleMessageEx>> list;
private BoundaryCallbackMessages boundary; private BoundaryCallbackMessages boundary;
@ -332,6 +328,15 @@ public class ViewModelMessages extends ViewModel {
this.boundary = boundary; this.boundary = boundary;
} }
void setCallback(BoundaryCallbackMessages.IBoundaryCallbackMessages callback) {
if (boundary != null)
boundary.setCallback(callback);
}
void setObserver(LifecycleOwner owner, @NonNull Observer<PagedList<TupleMessageEx>> observer) {
list.observe(owner, observer);
}
private void clear() { private void clear() {
if (this.boundary != null) if (this.boundary != null)
this.boundary.clear(); this.boundary.clear();

Loading…
Cancel
Save