aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2019-01-27 14:07:08 +0100
committerChristian Schneppe <christian@pix-art.de>2019-01-27 14:07:08 +0100
commit3c59b2958f2ec2d707a9e7af10ecd5be7ae3d2a4 (patch)
tree9d6c2ce89bdeed7b62c247d22af0bf110b5e2383 /src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
parenta53f01ed7adaf3cd0e39c3c313d3427b2f978f2f (diff)
refactored avatar workers into single class
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java')
-rw-r--r--src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java93
1 files changed, 2 insertions, 91 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
index 5656ce625..45fb05c5f 100644
--- a/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
+++ b/src/main/java/de/pixart/messenger/ui/adapter/ConversationAdapter.java
@@ -29,6 +29,7 @@ import de.pixart.messenger.entities.Message;
import de.pixart.messenger.entities.MucOptions;
import de.pixart.messenger.ui.ConversationFragment;
import de.pixart.messenger.ui.XmppActivity;
+import de.pixart.messenger.ui.util.AvatarWorkerTask;
import de.pixart.messenger.ui.util.StyledAttributes;
import de.pixart.messenger.utils.EmojiWrapper;
import de.pixart.messenger.utils.IrregularUnicodeDetector;
@@ -47,31 +48,6 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
this.conversations = conversations;
}
- private static boolean cancelPotentialWork(Conversation conversation, ImageView imageView) {
- final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView);
-
- if (bitmapWorkerTask != null) {
- final Conversation oldConversation = bitmapWorkerTask.conversation;
- if (oldConversation == null || conversation != oldConversation) {
- bitmapWorkerTask.cancel(true);
- } else {
- return false;
- }
- }
- return true;
- }
-
- private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) {
- if (imageView != null) {
- final Drawable drawable = imageView.getDrawable();
- if (drawable instanceof AsyncDrawable) {
- final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable;
- return asyncDrawable.getBitmapWorkerTask();
- }
- }
- return null;
- }
-
@NonNull
@Override
public ConversationViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -232,7 +208,7 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
timestamp = conversation.getLatestMessage().getTimeSent();
}
viewHolder.binding.conversationLastupdate.setText(UIHelper.readableTimeDifference(activity, timestamp));
- loadAvatar(conversation, viewHolder.binding.conversationImage);
+ AvatarWorkerTask.loadAvatar(conversation, viewHolder.binding.conversationImage, R.dimen.avatar_on_conversation_overview);
viewHolder.itemView.setOnClickListener(v -> listener.onConversationClick(v, conversation));
if (conversation.getMode() == Conversation.MODE_SINGLE && ShowPresenceColoredNames()) {
@@ -317,27 +293,6 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
this.listener = listener;
}
- private void loadAvatar(Conversation conversation, ImageView imageView) {
- if (cancelPotentialWork(conversation, imageView)) {
- final Bitmap bm = activity.avatarService().get(conversation, activity.getPixel(56), true);
- if (bm != null) {
- cancelPotentialWork(conversation, imageView);
- imageView.setImageBitmap(bm);
- imageView.setBackgroundColor(0x00000000);
- } else {
- imageView.setBackgroundColor(UIHelper.getColorForName(conversation.getName().toString()));
- imageView.setImageDrawable(null);
- final BitmapWorkerTask task = new BitmapWorkerTask(imageView);
- final AsyncDrawable asyncDrawable = new AsyncDrawable(activity.getResources(), null, task);
- imageView.setImageDrawable(asyncDrawable);
- try {
- task.execute(conversation);
- } catch (final RejectedExecutionException ignored) {
- }
- }
- }
- }
-
public void insert(Conversation c, int position) {
conversations.add(position, c);
notifyDataSetChanged();
@@ -361,50 +316,6 @@ public class ConversationAdapter extends RecyclerView.Adapter<ConversationAdapte
}
}
- static class AsyncDrawable extends BitmapDrawable {
- private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;
-
- AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) {
- super(res, bitmap);
- bitmapWorkerTaskReference = new WeakReference<>(bitmapWorkerTask);
- }
-
- BitmapWorkerTask getBitmapWorkerTask() {
- return bitmapWorkerTaskReference.get();
- }
- }
-
- static class BitmapWorkerTask extends AsyncTask<Conversation, Void, Bitmap> {
- private final WeakReference<ImageView> imageViewReference;
- private Conversation conversation = null;
-
- BitmapWorkerTask(ImageView imageView) {
- imageViewReference = new WeakReference<>(imageView);
- }
-
-
- @Override
- protected Bitmap doInBackground(Conversation... params) {
- this.conversation = params[0];
- final XmppActivity activity = XmppActivity.find(imageViewReference);
- if (activity == null) {
- return null;
- }
- return activity.avatarService().get(this.conversation, activity.getPixel(56), isCancelled());
- }
-
- @Override
- protected void onPostExecute(Bitmap bitmap) {
- if (bitmap != null && !isCancelled()) {
- final ImageView imageView = imageViewReference.get();
- if (imageView != null) {
- imageView.setImageBitmap(bitmap);
- imageView.setBackgroundColor(0x00000000);
- }
- }
- }
- }
-
private boolean ShowPresenceColoredNames() {
return getPreferences().getBoolean("presence_colored_names", activity.getResources().getBoolean(R.bool.presence_colored_names));
}