From 0ff0b19b002da52c96677e8ab8ecf22fe15effb8 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 22 Sep 2021 18:06:50 +0200 Subject: [PATCH] Added 2state debugging --- app/src/main/java/eu/faircode/email/Log.java | 5 +- .../java/eu/faircode/email/TwoStateOwner.java | 58 +++++++++++++++---- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index 3130a65b50..9f3a2e2dc6 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -2212,9 +2212,10 @@ public class Log { long size = 0; File file = attachment.getFile(context); try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) { - for (SimpleTask task : SimpleTask.getList()) { + for (SimpleTask task : SimpleTask.getList()) size += write(os, String.format("%s\r\n", task.toString())); - } + for (TwoStateOwner owner : TwoStateOwner.getList()) + size += write(os, String.format("%s\r\n", owner.toString())); } db.attachment().setDownloaded(attachment.id, size); diff --git a/app/src/main/java/eu/faircode/email/TwoStateOwner.java b/app/src/main/java/eu/faircode/email/TwoStateOwner.java index ae53e9d3b7..2b38c98695 100644 --- a/app/src/main/java/eu/faircode/email/TwoStateOwner.java +++ b/app/src/main/java/eu/faircode/email/TwoStateOwner.java @@ -26,19 +26,36 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import androidx.lifecycle.OnLifecycleEvent; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import java.util.Objects; // This class can be used as an externally controlled standalone or child life cycle owner public class TwoStateOwner implements LifecycleOwner { private String name; + private boolean owned = true; private Object condition; private LifecycleRegistry registry; + private long created; + private long changed; + + private static DateFormat DTF = SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); + + private static List list = new ArrayList<>(); + + static List getList() { + return list; + } // https://developer.android.com/topic/libraries/architecture/lifecycle#lc TwoStateOwner(String aname) { name = aname; + created = new Date().getTime(); create(); } @@ -49,23 +66,32 @@ public class TwoStateOwner implements LifecycleOwner { owner.getLifecycle().addObserver(new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestroyed() { - Log.d("LifeCycle " + name + " parent destroyed"); + Log.i(this + " parent destroyed"); + owned = false; destroy(); + owner.getLifecycle().removeObserver(this); } }); } private void create() { - // Initialize - registry = new LifecycleRegistry(this); - registry.addObserver(new LifecycleObserver() { - @OnLifecycleEvent(Lifecycle.Event.ON_ANY) - public void onAny() { - Log.d("LifeCycle " + name + " state=" + registry.getCurrentState() + " " + registry); - } - }); + if (owned) { + // Initialize + registry = new LifecycleRegistry(this); + registry.addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Lifecycle.Event.ON_ANY) + public void onAny() { + Log.i(this + " " + registry); + changed = new Date().getTime(); + } + }); - setState(Lifecycle.State.CREATED); + setState(Lifecycle.State.CREATED); + synchronized (list) { + list.add(this); + } + } else + Log.i(this + " not owned"); } void start() { @@ -103,6 +129,9 @@ public class TwoStateOwner implements LifecycleOwner { if (!state.equals(Lifecycle.State.CREATED)) setState(Lifecycle.State.CREATED); setState(Lifecycle.State.DESTROYED); + synchronized (list) { + list.remove(this); + } } } @@ -131,4 +160,13 @@ public class TwoStateOwner implements LifecycleOwner { */ } } + + @Override + public String toString() { + return "TwoStateOwner " + name + + " state=" + registry.getCurrentState() + + " owned=" + owned + + " created=" + DTF.format(created) + + " change=" + DTF.format(changed); + } } \ No newline at end of file