diff --git a/app/src/main/java/eu/faircode/email/TwoStateOwner.java b/app/src/main/java/eu/faircode/email/TwoStateOwner.java index d73aeaa1ff..ccce38be24 100644 --- a/app/src/main/java/eu/faircode/email/TwoStateOwner.java +++ b/app/src/main/java/eu/faircode/email/TwoStateOwner.java @@ -16,9 +16,11 @@ public class TwoStateOwner implements LifecycleOwner { TwoStateOwner(String aname) { name = aname; + // Initialize registry registry = new LifecycleRegistry(this); registry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); + // Logging registry.addObserver(new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_ANY) public void onAny() { @@ -30,6 +32,8 @@ public class TwoStateOwner implements LifecycleOwner { TwoStateOwner(LifecycleOwner owner, String aname) { this(aname); + + // Destroy when parent destroyed owner.getLifecycle().addObserver(new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestroyed() { @@ -54,7 +58,12 @@ public class TwoStateOwner implements LifecycleOwner { } void destroy() { - if (!registry.getCurrentState().equals(Lifecycle.State.DESTROYED)) + Lifecycle.State state = registry.getCurrentState(); + if (state.equals(Lifecycle.State.INITIALIZED)) + registry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); + if (state.equals(Lifecycle.State.STARTED)) + registry.handleLifecycleEvent(Lifecycle.Event.ON_STOP); // transition to created + if (!state.equals(Lifecycle.State.DESTROYED)) registry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); }