Close boundary on destroy

This commit is contained in:
M66B
2019-08-09 19:29:17 +02:00
parent e09bd95cc6
commit 47da32aa97
3 changed files with 84 additions and 82 deletions

View File

@@ -71,10 +71,8 @@ public class ViewModelMessages extends ViewModel {
if (model == null || !model.args.equals(args)) {
Log.i("Creating model=" + viewType + " replace=" + (model != null));
if (model != null) {
if (model != null)
model.list.removeObservers(owner);
model.clear();
}
DB db = DB.getInstance(context);
@@ -174,7 +172,7 @@ public class ViewModelMessages extends ViewModel {
if (viewType == AdapterMessage.ViewType.THREAD || lowmem) {
Log.i("Remove model=" + viewType);
remove(viewType);
models.remove(viewType);
}
dump();
@@ -182,10 +180,10 @@ public class ViewModelMessages extends ViewModel {
});
if (viewType == AdapterMessage.ViewType.UNIFIED) {
remove(AdapterMessage.ViewType.FOLDER);
remove(AdapterMessage.ViewType.SEARCH);
models.remove(AdapterMessage.ViewType.FOLDER);
models.remove(AdapterMessage.ViewType.SEARCH);
} else if (viewType == AdapterMessage.ViewType.FOLDER)
remove(AdapterMessage.ViewType.SEARCH);
models.remove(AdapterMessage.ViewType.SEARCH);
if (viewType != AdapterMessage.ViewType.THREAD) {
last = viewType;
@@ -201,15 +199,7 @@ public class ViewModelMessages extends ViewModel {
@Override
protected void onCleared() {
for (AdapterMessage.ViewType viewType : new ArrayList<>(models.keySet()))
remove(viewType);
}
private void remove(AdapterMessage.ViewType viewType) {
Model model = models.get(viewType);
if (model != null) {
model.clear();
models.remove(viewType);
}
}
void observePrevNext(LifecycleOwner owner, final long id, final IPrevNext intf) {
@@ -385,20 +375,23 @@ public class ViewModelMessages extends ViewModel {
this.boundary = boundary;
}
void setCallback(BoundaryCallbackMessages.IBoundaryCallbackMessages callback) {
if (boundary != null)
void setCallback(LifecycleOwner owner, BoundaryCallbackMessages.IBoundaryCallbackMessages callback) {
if (boundary != null) {
boundary.setCallback(callback);
owner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyed() {
boundary.close();
}
});
}
}
void setObserver(LifecycleOwner owner, @NonNull Observer<PagedList<TupleMessageEx>> observer) {
//list.removeObservers(owner);
list.observe(owner, observer);
}
private void clear() {
if (this.boundary != null)
this.boundary.clear();
}
}
interface IPrevNext {