|
|
@ -32,18 +32,23 @@ import androidx.lifecycle.ViewModel;
|
|
|
|
import androidx.paging.PagedList;
|
|
|
|
import androidx.paging.PagedList;
|
|
|
|
|
|
|
|
|
|
|
|
public class ViewModelMessages extends ViewModel {
|
|
|
|
public class ViewModelMessages extends ViewModel {
|
|
|
|
private Map<Boolean, LiveData<PagedList<TupleMessageEx>>> messages = new HashMap<>();
|
|
|
|
private Map<AdapterMessage.ViewType, LiveData<PagedList<TupleMessageEx>>> messages = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
void setMessages(AdapterMessage.ViewType viewType, LifecycleOwner owner, final LiveData<PagedList<TupleMessageEx>> messages) {
|
|
|
|
void setMessages(AdapterMessage.ViewType viewType, LifecycleOwner owner, final LiveData<PagedList<TupleMessageEx>> messages) {
|
|
|
|
final boolean thread = (viewType == AdapterMessage.ViewType.THREAD);
|
|
|
|
if (viewType == AdapterMessage.ViewType.UNIFIED)
|
|
|
|
this.messages.put(thread, messages);
|
|
|
|
viewType = AdapterMessage.ViewType.FOLDER;
|
|
|
|
|
|
|
|
|
|
|
|
if (thread)
|
|
|
|
this.messages.put(viewType, messages);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (viewType == AdapterMessage.ViewType.FOLDER)
|
|
|
|
|
|
|
|
this.messages.remove(AdapterMessage.ViewType.SEARCH);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (viewType == AdapterMessage.ViewType.THREAD)
|
|
|
|
owner.getLifecycle().addObserver(new LifecycleObserver() {
|
|
|
|
owner.getLifecycle().addObserver(new LifecycleObserver() {
|
|
|
|
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
|
|
|
|
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
|
|
|
|
public void onDestroyed() {
|
|
|
|
public void onDestroyed() {
|
|
|
|
Log.i("Removed model thread");
|
|
|
|
Log.i("Removed model thread");
|
|
|
|
ViewModelMessages.this.messages.remove(thread);
|
|
|
|
ViewModelMessages.this.messages.remove(AdapterMessage.ViewType.THREAD);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
else {
|
|
|
|
else {
|
|
|
@ -57,16 +62,19 @@ public class ViewModelMessages extends ViewModel {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void observe(AdapterMessage.ViewType viewType, LifecycleOwner owner, Observer<PagedList<TupleMessageEx>> observer) {
|
|
|
|
void observe(AdapterMessage.ViewType viewType, LifecycleOwner owner, Observer<PagedList<TupleMessageEx>> observer) {
|
|
|
|
if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.INITIALIZED)) {
|
|
|
|
if (viewType == AdapterMessage.ViewType.UNIFIED)
|
|
|
|
final boolean thread = (viewType == AdapterMessage.ViewType.THREAD);
|
|
|
|
viewType = AdapterMessage.ViewType.FOLDER;
|
|
|
|
messages.get(thread).observe(owner, observer);
|
|
|
|
|
|
|
|
}
|
|
|
|
if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.INITIALIZED))
|
|
|
|
|
|
|
|
messages.get(viewType).observe(owner, observer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void removeObservers(AdapterMessage.ViewType viewType, LifecycleOwner owner) {
|
|
|
|
void removeObservers(AdapterMessage.ViewType viewType, LifecycleOwner owner) {
|
|
|
|
|
|
|
|
if (viewType == AdapterMessage.ViewType.UNIFIED)
|
|
|
|
|
|
|
|
viewType = AdapterMessage.ViewType.FOLDER;
|
|
|
|
|
|
|
|
|
|
|
|
if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.INITIALIZED)) {
|
|
|
|
if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.INITIALIZED)) {
|
|
|
|
boolean thread = (viewType == AdapterMessage.ViewType.THREAD);
|
|
|
|
LiveData<PagedList<TupleMessageEx>> list = messages.get(viewType);
|
|
|
|
LiveData<PagedList<TupleMessageEx>> list = messages.get(thread);
|
|
|
|
|
|
|
|
if (list != null)
|
|
|
|
if (list != null)
|
|
|
|
list.removeObservers(owner);
|
|
|
|
list.removeObservers(owner);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -77,8 +85,11 @@ public class ViewModelMessages extends ViewModel {
|
|
|
|
messages.clear();
|
|
|
|
messages.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void observePrevNext(LifecycleOwner owner, final long id, final IPrevNext intf) {
|
|
|
|
void observePrevNext(LifecycleOwner owner, final long id, boolean found, final IPrevNext intf) {
|
|
|
|
LiveData<PagedList<TupleMessageEx>> list = messages.get(false);
|
|
|
|
AdapterMessage.ViewType viewType =
|
|
|
|
|
|
|
|
(found ? AdapterMessage.ViewType.SEARCH : AdapterMessage.ViewType.FOLDER);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LiveData<PagedList<TupleMessageEx>> list = messages.get(viewType);
|
|
|
|
if (list == null) {
|
|
|
|
if (list == null) {
|
|
|
|
Log.w("Observe previous/next without list");
|
|
|
|
Log.w("Observe previous/next without list");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|