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; + } +}