From dd025b1ff3bc81f9ee2749f69a520b10bd132468 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 17 Mar 2019 20:31:24 +0000 Subject: [PATCH] Use restartable two state child owner --- .../eu/faircode/email/AdapterMessage.java | 33 +++++++------------ .../java/eu/faircode/email/TwoStateOwner.java | 17 ++++++++++ 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 43af7d2136..ea5c06e45c 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -117,7 +117,6 @@ import androidx.appcompat.widget.PopupMenu; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Group; import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.paging.AsyncPagedListDiffer; @@ -258,8 +257,7 @@ public class AdapterMessage extends RecyclerView.Adapter> liveAttachments = null; - private Observer> observerAttachments = null; + private TwoStateOwner cowner = new TwoStateOwner(owner); private WebView printWebView = null; @@ -890,14 +888,13 @@ public class AdapterMessage extends RecyclerView.Adapter>() { + cowner.restart(); + db.attachment().liveAttachments(message.id).observe(cowner, new Observer>() { @Override public void onChanged(@Nullable List attachments) { bindAttachments(message, attachments); } - }; - liveAttachments = db.attachment().liveAttachments(message.id); - liveAttachments.observe(owner, observerAttachments); + }); // Setup actions Bundle sargs = new Bundle(); @@ -1024,8 +1021,13 @@ public class AdapterMessage extends RecyclerView.Adapter>() { + @Override + public void onChanged(@Nullable List attachments) { + bindAttachments(message, attachments); + } + }); } }); @@ -1044,13 +1046,6 @@ public class AdapterMessage extends RecyclerView.Adapter selectionTracker) { this.selectionTracker = selectionTracker; } diff --git a/app/src/main/java/eu/faircode/email/TwoStateOwner.java b/app/src/main/java/eu/faircode/email/TwoStateOwner.java index 28e886940c..60a3520a54 100644 --- a/app/src/main/java/eu/faircode/email/TwoStateOwner.java +++ b/app/src/main/java/eu/faircode/email/TwoStateOwner.java @@ -2,8 +2,10 @@ package eu.faircode.email; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; +import androidx.lifecycle.OnLifecycleEvent; public class TwoStateOwner implements LifecycleOwner { private LifecycleRegistry registry; @@ -12,6 +14,16 @@ public class TwoStateOwner implements LifecycleOwner { registry = new LifecycleRegistry(this); } + TwoStateOwner(LifecycleOwner owner) { + this(); + owner.getLifecycle().addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroyed() { + registry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); + } + }); + } + void start() { registry.handleLifecycleEvent(Lifecycle.Event.ON_START); } @@ -20,6 +32,11 @@ public class TwoStateOwner implements LifecycleOwner { registry.handleLifecycleEvent(Lifecycle.Event.ON_STOP); } + void restart() { + registry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); + start(); + } + @NonNull @Override public Lifecycle getLifecycle() {