Fixed changing view model type

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

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

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

Loading…
Cancel
Save