Fixed navigation for searching

pull/147/head
M66B 7 years ago
parent d950157f3b
commit 2add8a9ca5

@ -1070,13 +1070,16 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
}
private void onViewThread(Intent intent) {
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
boolean found = intent.getBooleanExtra("found", false);
if (!found && getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
getSupportFragmentManager().popBackStack("thread", FragmentManager.POP_BACK_STACK_INCLUSIVE);
Bundle args = new Bundle();
args.putLong("account", intent.getLongExtra("account", -1));
args.putString("thread", intent.getStringExtra("thread"));
args.putLong("id", intent.getLongExtra("id", -1));
args.putBoolean("found", found);
FragmentMessages fragment = new FragmentMessages();
fragment.setArguments(args);

@ -991,7 +991,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
new Intent(ActivityView.ACTION_VIEW_THREAD)
.putExtra("account", message.account)
.putExtra("thread", message.thread)
.putExtra("id", message.id));
.putExtra("id", message.id)
.putExtra("found", viewType == ViewType.SEARCH));
}
}
}

@ -147,7 +147,8 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
new Intent(ActivityView.ACTION_VIEW_THREAD)
.putExtra("account", message.account)
.putExtra("thread", message.thread)
.putExtra("id", message.id));
.putExtra("id", message.id)
.putExtra("found", false));
}
@Override

@ -116,6 +116,7 @@ public class FragmentMessages extends FragmentBase {
private long folder;
private String thread;
private long id;
private boolean found;
private String search;
private boolean pane;
@ -176,6 +177,7 @@ public class FragmentMessages extends FragmentBase {
folder = args.getLong("folder", -1);
thread = args.getString("thread");
id = args.getLong("id", -1);
found = args.getBoolean("found", false);
search = args.getString("search");
pane = args.getBoolean("pane", false);
primary = args.getLong("primary", -1);
@ -376,7 +378,7 @@ public class FragmentMessages extends FragmentBase {
if (viewType == AdapterMessage.ViewType.THREAD) {
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
model.observePrevNext(getViewLifecycleOwner(), id, new ViewModelMessages.IPrevNext() {
model.observePrevNext(getViewLifecycleOwner(), id, found, new ViewModelMessages.IPrevNext() {
@Override
public void onPrevious(boolean exists, Long id) {
previous = id;
@ -1825,7 +1827,7 @@ public class FragmentMessages extends FragmentBase {
private void loadMessages() {
if (viewType == AdapterMessage.ViewType.THREAD && autonext) {
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
model.observePrevNext(getViewLifecycleOwner(), id, new ViewModelMessages.IPrevNext() {
model.observePrevNext(getViewLifecycleOwner(), id, found, new ViewModelMessages.IPrevNext() {
boolean once = false;
@Override
@ -2224,6 +2226,7 @@ public class FragmentMessages extends FragmentBase {
nargs.putLong("account", message.account);
nargs.putString("thread", message.thread);
nargs.putLong("id", message.id);
nargs.putBoolean("found", found);
nargs.putBoolean("pane", pane);
nargs.putLong("primary", primary);
nargs.putBoolean("connected", connected);

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

Loading…
Cancel
Save