From c7ba0cb058329bc382de472e0a077a023763f3ca Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 12 Mar 2020 13:40:07 +0100 Subject: [PATCH] Prevent crash --- .../java/eu/faircode/email/TwoStateOwner.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/TwoStateOwner.java b/app/src/main/java/eu/faircode/email/TwoStateOwner.java index 01bd31754e..cbf38c90d6 100644 --- a/app/src/main/java/eu/faircode/email/TwoStateOwner.java +++ b/app/src/main/java/eu/faircode/email/TwoStateOwner.java @@ -62,17 +62,17 @@ public class TwoStateOwner implements LifecycleOwner { } }); - registry.setCurrentState(Lifecycle.State.CREATED); + setState(Lifecycle.State.CREATED); } void start() { if (!registry.getCurrentState().equals(Lifecycle.State.DESTROYED)) - registry.setCurrentState(Lifecycle.State.STARTED); + setState(Lifecycle.State.STARTED); } void stop() { if (!registry.getCurrentState().equals(Lifecycle.State.DESTROYED)) - registry.setCurrentState(Lifecycle.State.CREATED); + setState(Lifecycle.State.CREATED); } void restart() { @@ -88,9 +88,9 @@ public class TwoStateOwner implements LifecycleOwner { void destroy() { Lifecycle.State state = registry.getCurrentState(); if (!state.equals(Lifecycle.State.CREATED)) - registry.setCurrentState(Lifecycle.State.CREATED); + setState(Lifecycle.State.CREATED); if (!state.equals(Lifecycle.State.DESTROYED)) - registry.setCurrentState(Lifecycle.State.DESTROYED); + setState(Lifecycle.State.DESTROYED); } @NonNull @@ -98,4 +98,24 @@ public class TwoStateOwner implements LifecycleOwner { public Lifecycle getLifecycle() { return registry; } + + private void setState(@NonNull Lifecycle.State state) { + try { + registry.setCurrentState(state); + } catch (Throwable ex) { + Log.e(ex); + /* + java.lang.RuntimeException: Failed to call observer method + at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(SourceFile:226) + at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(SourceFile:194) + at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(SourceFile:186) + at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(SourceFile:37) + at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(SourceFile:361) + at androidx.lifecycle.LifecycleRegistry.backwardPass(SourceFile:316) + at androidx.lifecycle.LifecycleRegistry.sync(SourceFile:334) + at androidx.lifecycle.LifecycleRegistry.moveToState(SourceFile:145) + at androidx.lifecycle.LifecycleRegistry.setCurrentState(SourceFile:118) + */ + } + } } \ No newline at end of file