From 40acf58dfa08bd392988e62ef41d9517801a1013 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Thu, 26 Sep 2024 12:26:43 -0500 Subject: [PATCH] Only get avatar from cache for sidebar And fetch in background if needed --- .../ui/ConversationsActivity.java | 10 ++++++++- .../siacs/conversations/ui/XmppActivity.java | 2 +- .../ui/util/AvatarWorkerTask.java | 21 ++++++++++++++++--- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java index 05318186c6b66fd787077f6f745e677042ec8a7c..383b8f0a58a0368a55e50398feae85555062507e 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java @@ -81,6 +81,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -102,6 +103,7 @@ import eu.siacs.conversations.ui.interfaces.OnConversationRead; import eu.siacs.conversations.ui.interfaces.OnConversationSelected; import eu.siacs.conversations.ui.interfaces.OnConversationsListItemUpdated; import eu.siacs.conversations.ui.util.ActivityResult; +import eu.siacs.conversations.ui.util.AvatarWorkerTask; import eu.siacs.conversations.ui.util.ConversationMenuConfigurator; import eu.siacs.conversations.ui.util.MenuDoubleTabUtil; import eu.siacs.conversations.ui.util.PendingItem; @@ -230,7 +232,13 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio long id = 101; for (final var a : accounts) { - final var avatar = xmppConnectionService.getAvatarService().get(a, (int) getResources().getDimension(R.dimen.avatar_on_drawer), false); + final var size = (int) getResources().getDimension(R.dimen.avatar_on_drawer); + final var avatar = xmppConnectionService.getAvatarService().get(a, size, true); + if (avatar == null) { + final var task = new AvatarWorkerTask(this, R.dimen.avatar_on_drawer); + try { task.execute(a); } catch (final RejectedExecutionException ignored) { } + refreshAccounts = true; + } final var p = new com.mikepenz.materialdrawer.model.ProfileDrawerItem(); p.setIdentifier(id++); p.setTag(a); diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index 02255f23ebda70d852b2d569905087f82679e61b..01b0d1d29b383d300485199dedfd34b9b1ac2b12 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -214,7 +214,7 @@ public abstract class XmppActivity extends ActionBarActivity { mToast.show(); } - protected final void refreshUi() { + public final void refreshUi() { final long diff = SystemClock.elapsedRealtime() - mLastUiRefresh; if (diff > Config.REFRESH_UI_INTERVAL) { mRefreshUiHandler.removeCallbacks(mRefreshUiRunnable); diff --git a/src/main/java/eu/siacs/conversations/ui/util/AvatarWorkerTask.java b/src/main/java/eu/siacs/conversations/ui/util/AvatarWorkerTask.java index a7b7080f05838b574b9b6bbd4ae19d320b4c55e1..51617da155dffe77cf7421a75687f3a691b030be 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/AvatarWorkerTask.java +++ b/src/main/java/eu/siacs/conversations/ui/util/AvatarWorkerTask.java @@ -22,19 +22,28 @@ import eu.siacs.conversations.ui.XmppActivity; public class AvatarWorkerTask extends AsyncTask { private final WeakReference imageViewReference; + private final WeakReference activityReference; private AvatarService.Avatarable avatarable = null; private @DimenRes final int size; public AvatarWorkerTask(ImageView imageView, @DimenRes int size) { imageViewReference = new WeakReference<>(imageView); + activityReference = null; + this.size = size; + } + + + public AvatarWorkerTask(XmppActivity activity, @DimenRes int size) { + activityReference = new WeakReference<>(activity); + imageViewReference = new WeakReference<>(null); this.size = size; } @Override protected Drawable doInBackground(AvatarService.Avatarable... params) { this.avatarable = params[0]; - final XmppActivity activity = XmppActivity.find(imageViewReference); + final XmppActivity activity = activityReference == null ? XmppActivity.find(imageViewReference) : activityReference.get(); if (activity == null) { return null; } @@ -48,8 +57,14 @@ public class AvatarWorkerTask extends AsyncTask= 28 && bitmap instanceof AnimatedImageDrawable) { - ((AnimatedImageDrawable) bitmap).start(); + } + if (Build.VERSION.SDK_INT >= 28 && bitmap instanceof AnimatedImageDrawable) { + ((AnimatedImageDrawable) bitmap).start(); + } + if (activityReference != null) { + final var activity = activityReference.get(); + if (activity != null) { + activity.refreshUi(); } } }