From 2add8a9ca501fba5445d29076b3ef414a3ea2b3e Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 5 Feb 2019 08:15:05 +0000 Subject: [PATCH] Fixed navigation for searching --- .../java/eu/faircode/email/ActivityView.java | 5 ++- .../eu/faircode/email/AdapterMessage.java | 3 +- .../eu/faircode/email/AdapterOperation.java | 3 +- .../eu/faircode/email/FragmentMessages.java | 7 +++- .../eu/faircode/email/ViewModelMessages.java | 37 ++++++++++++------- 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 5b99701ef8..eb7c988655 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -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); diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 421e3e80b3..662b5219b4 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -991,7 +991,8 @@ public class AdapterMessage extends RecyclerView.Adapter>> messages = new HashMap<>(); + private Map>> messages = new HashMap<>(); void setMessages(AdapterMessage.ViewType viewType, LifecycleOwner owner, final LiveData> 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> 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> list = messages.get(thread); + LiveData> 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> 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> list = messages.get(viewType); if (list == null) { Log.w("Observe previous/next without list"); return;