From 4777d24057ff6f6b4c6ec90709639462e35f7ec6 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 3 May 2019 18:59:27 +0200 Subject: [PATCH] Lifecycle aware popup menu --- .../eu/faircode/email/AdapterAccount.java | 9 +++++- .../java/eu/faircode/email/AdapterFolder.java | 7 +++-- .../eu/faircode/email/AdapterIdentity.java | 9 +++++- .../eu/faircode/email/AdapterMessage.java | 15 +++++---- .../eu/faircode/email/FragmentMessages.java | 2 +- .../eu/faircode/email/PopupMenuLifecycle.java | 31 +++++++++++++++++++ 6 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java diff --git a/app/src/main/java/eu/faircode/email/AdapterAccount.java b/app/src/main/java/eu/faircode/email/AdapterAccount.java index f94baaf285..957305a0aa 100644 --- a/app/src/main/java/eu/faircode/email/AdapterAccount.java +++ b/app/src/main/java/eu/faircode/email/AdapterAccount.java @@ -78,6 +78,8 @@ public class AdapterAccount extends RecyclerView.Adapter selectionTracker) { diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index e8feef711f..92f3a1ba8f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1160,7 +1160,7 @@ public class FragmentMessages extends FragmentBase { @Override protected void onExecuted(Bundle args, final MoreResult result) { - PopupMenu popupMenu = new PopupMenu(getContext(), fabMore); + PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), fabMore); if (result.unseen) // Unseen, not draft popupMenu.getMenu().add(Menu.NONE, action_seen, 1, R.string.title_seen); diff --git a/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java b/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java new file mode 100644 index 0000000000..d8ce67ef81 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java @@ -0,0 +1,31 @@ +package eu.faircode.email; + +import android.content.Context; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.appcompat.widget.PopupMenu; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.OnLifecycleEvent; + +public class PopupMenuLifecycle extends PopupMenu implements LifecycleObserver { + private LifecycleOwner owner; + + public PopupMenuLifecycle(@NonNull Context context, LifecycleOwner owner, @NonNull View anchor) { + super(context, anchor); + this.owner = owner; + } + + @Override + public void show() { + super.show(); + } + + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroy() { + this.dismiss(); + owner = null; + } +}