Change summary
src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java | 10
src/main/java/eu/siacs/conversations/ui/XmppActivity.java | 2
src/main/java/eu/siacs/conversations/ui/util/AvatarWorkerTask.java | 21
3 files changed, 28 insertions(+), 5 deletions(-)
Detailed changes
@@ -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);
@@ -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);
@@ -22,19 +22,28 @@ import eu.siacs.conversations.ui.XmppActivity;
public class AvatarWorkerTask extends AsyncTask<AvatarService.Avatarable, Void, Drawable> {
private final WeakReference<ImageView> imageViewReference;
+ private final WeakReference<XmppActivity> 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<AvatarService.Avatarable, Void,
if (imageView != null) {
imageView.setImageDrawable(bitmap);
imageView.setBackgroundColor(0x00000000);
- if (Build.VERSION.SDK_INT >= 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();
}
}
}