diff --git a/chatkit/src/main/java/com/stfalcon/chatkit/commons/ContextImageLoader.java b/chatkit/src/main/java/com/stfalcon/chatkit/commons/ContextImageLoader.java new file mode 100644 index 00000000..d3f9249f --- /dev/null +++ b/chatkit/src/main/java/com/stfalcon/chatkit/commons/ContextImageLoader.java @@ -0,0 +1,16 @@ +package com.stfalcon.chatkit.commons; + +import android.widget.ImageView; + +import com.stfalcon.chatkit.commons.models.IDialog; +import com.stfalcon.chatkit.commons.models.IUser; +import com.stfalcon.chatkit.commons.models.MessageContentType; + +public interface ContextImageLoader { + + void loadImage(ImageView imageView, IDialog dialog); + + void loadImage(ImageView imageView, IUser user); + + void loadImage(ImageView imageView, MessageContentType.Image messageContent); +} diff --git a/chatkit/src/main/java/com/stfalcon/chatkit/commons/ImageLoader.java b/chatkit/src/main/java/com/stfalcon/chatkit/commons/ImageLoader.java index 4d795854..073bb67f 100644 --- a/chatkit/src/main/java/com/stfalcon/chatkit/commons/ImageLoader.java +++ b/chatkit/src/main/java/com/stfalcon/chatkit/commons/ImageLoader.java @@ -18,11 +18,30 @@ import android.widget.ImageView; +import com.stfalcon.chatkit.commons.models.IDialog; +import com.stfalcon.chatkit.commons.models.IUser; +import com.stfalcon.chatkit.commons.models.MessageContentType; + /** * Callback for implementing images loading in message list */ -public interface ImageLoader { +public abstract class ImageLoader implements ContextImageLoader { + + public abstract void loadImage(ImageView imageView, String url); - void loadImage(ImageView imageView, String url); + @Override + public void loadImage(ImageView imageView, IDialog dialog) { + loadImage(imageView, dialog.getDialogPhoto()); + } + @Override + public void loadImage(ImageView imageView, IUser user) { + loadImage(imageView, user.getAvatar()); + } + + @Override + public void loadImage(ImageView imageView, MessageContentType.Image messageContent) { + loadImage(imageView, messageContent.getImageUrl()); + } } + diff --git a/chatkit/src/main/java/com/stfalcon/chatkit/dialogs/DialogsListAdapter.java b/chatkit/src/main/java/com/stfalcon/chatkit/dialogs/DialogsListAdapter.java index 9638ff7e..53f6a848 100644 --- a/chatkit/src/main/java/com/stfalcon/chatkit/dialogs/DialogsListAdapter.java +++ b/chatkit/src/main/java/com/stfalcon/chatkit/dialogs/DialogsListAdapter.java @@ -28,7 +28,7 @@ import android.widget.TextView; import com.stfalcon.chatkit.R; -import com.stfalcon.chatkit.commons.ImageLoader; +import com.stfalcon.chatkit.commons.ContextImageLoader; import com.stfalcon.chatkit.commons.ViewHolder; import com.stfalcon.chatkit.commons.models.IDialog; import com.stfalcon.chatkit.commons.models.IMessage; @@ -54,7 +54,7 @@ public class DialogsListAdapter private List items = new ArrayList<>(); private int itemLayoutId; private Class holderClass; - private ImageLoader imageLoader; + private ContextImageLoader imageLoader; private OnDialogClickListener onDialogClickListener; private OnDialogViewClickListener onDialogViewClickListener; private OnDialogLongClickListener onLongItemClickListener; @@ -67,7 +67,7 @@ public class DialogsListAdapter * * @param imageLoader image loading method */ - public DialogsListAdapter(ImageLoader imageLoader) { + public DialogsListAdapter(ContextImageLoader imageLoader) { this(R.layout.item_dialog, DialogViewHolder.class, imageLoader); } @@ -77,7 +77,7 @@ public DialogsListAdapter(ImageLoader imageLoader) { * @param itemLayoutId custom list item resource id * @param imageLoader image loading method */ - public DialogsListAdapter(@LayoutRes int itemLayoutId, ImageLoader imageLoader) { + public DialogsListAdapter(@LayoutRes int itemLayoutId, ContextImageLoader imageLoader) { this(itemLayoutId, DialogViewHolder.class, imageLoader); } @@ -89,7 +89,7 @@ public DialogsListAdapter(@LayoutRes int itemLayoutId, ImageLoader imageLoader) * @param imageLoader image loading method */ public DialogsListAdapter(@LayoutRes int itemLayoutId, Class holderClass, - ImageLoader imageLoader) { + ContextImageLoader imageLoader) { this.itemLayoutId = itemLayoutId; this.holderClass = holderClass; this.imageLoader = imageLoader; @@ -298,19 +298,19 @@ public void sort(Comparator comparator) { } /** - * Register a callback to be invoked when image need to load. - * - * @param imageLoader image loading method + * @return registered image loader */ - public void setImageLoader(ImageLoader imageLoader) { - this.imageLoader = imageLoader; + public ContextImageLoader getImageLoader() { + return imageLoader; } /** - * @return registered image loader + * Register a callback to be invoked when image need to load. + * + * @param imageLoader image loading method */ - public ImageLoader getImageLoader() { - return imageLoader; + public void setImageLoader(ContextImageLoader imageLoader) { + this.imageLoader = imageLoader; } /** @@ -414,7 +414,7 @@ public interface OnDialogViewLongClickListener { public abstract static class BaseDialogViewHolder extends ViewHolder { - protected ImageLoader imageLoader; + protected ContextImageLoader imageLoader; protected OnDialogClickListener onDialogClickListener; protected OnDialogLongClickListener onLongItemClickListener; protected OnDialogViewClickListener onDialogViewClickListener; @@ -425,7 +425,7 @@ public BaseDialogViewHolder(View itemView) { super(itemView); } - void setImageLoader(ImageLoader imageLoader) { + void setImageLoader(ContextImageLoader imageLoader) { this.imageLoader = imageLoader; } @@ -592,12 +592,12 @@ public void onBind(final DIALOG dialog) { //Set Dialog avatar if (imageLoader != null) { - imageLoader.loadImage(ivAvatar, dialog.getDialogPhoto()); + imageLoader.loadImage(ivAvatar, dialog); } //Set Last message user avatar if (imageLoader != null) { - imageLoader.loadImage(ivLastMessageUser, dialog.getLastMessage().getUser().getAvatar()); + imageLoader.loadImage(ivLastMessageUser, dialog.getLastMessage().getUser()); } ivLastMessageUser.setVisibility(dialogStyle.isDialogMessageAvatarEnabled() && dialog.getUsers().size() > 1 ? VISIBLE : GONE); diff --git a/chatkit/src/main/java/com/stfalcon/chatkit/messages/MessageHolders.java b/chatkit/src/main/java/com/stfalcon/chatkit/messages/MessageHolders.java index 8f126cd3..0dfa119b 100644 --- a/chatkit/src/main/java/com/stfalcon/chatkit/messages/MessageHolders.java +++ b/chatkit/src/main/java/com/stfalcon/chatkit/messages/MessageHolders.java @@ -630,7 +630,7 @@ public IncomingImageMessageViewHolder(View itemView) { public void onBind(MESSAGE message) { super.onBind(message); if (image != null && imageLoader != null) { - imageLoader.loadImage(image, message.getImageUrl()); + imageLoader.loadImage(image, message); } if (imageOverlay != null) { @@ -681,7 +681,7 @@ public OutcomingImageMessageViewHolder(View itemView) { public void onBind(MESSAGE message) { super.onBind(message); if (image != null && imageLoader != null) { - imageLoader.loadImage(image, message.getImageUrl()); + imageLoader.loadImage(image, message); } if (imageOverlay != null) { @@ -770,7 +770,7 @@ public void onBind(MESSAGE message) { userAvatar.setVisibility(isAvatarExists ? View.VISIBLE : View.GONE); if (isAvatarExists) { - imageLoader.loadImage(userAvatar, message.getUser().getAvatar()); + imageLoader.loadImage(userAvatar, message.getUser()); } } } diff --git a/sample/build.gradle b/sample/build.gradle index 13d52cae..c900fae8 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -30,6 +30,7 @@ ext { circleImageViewVersion = '2.1.0' shapeImageViewVersion = '0.9.3' circleindicatorVersion = '1.2.2@aar' + textDrawableVersion = '1.0.1' } dependencies { @@ -51,6 +52,7 @@ dependencies { //ImageViews compile "de.hdodenhof:circleimageview:$circleImageViewVersion" compile "com.github.siyamed:android-shape-imageview:$shapeImageViewVersion" + compile "com.amulyakhare:com.amulyakhare.textdrawable:$textDrawableVersion" //Utils compile "me.relex:circleindicator:$circleindicatorVersion" diff --git a/sample/src/main/java/com/stfalcon/chatkit/sample/features/demo/DemoDialogsActivity.java b/sample/src/main/java/com/stfalcon/chatkit/sample/features/demo/DemoDialogsActivity.java index f2848ba8..461f326d 100644 --- a/sample/src/main/java/com/stfalcon/chatkit/sample/features/demo/DemoDialogsActivity.java +++ b/sample/src/main/java/com/stfalcon/chatkit/sample/features/demo/DemoDialogsActivity.java @@ -5,12 +5,16 @@ import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; +import com.amulyakhare.textdrawable.TextDrawable; import com.squareup.picasso.Picasso; import com.stfalcon.chatkit.commons.ImageLoader; +import com.stfalcon.chatkit.commons.models.IUser; import com.stfalcon.chatkit.dialogs.DialogsListAdapter; import com.stfalcon.chatkit.sample.common.data.model.Dialog; import com.stfalcon.chatkit.sample.utils.AppUtils; +import java.util.Random; + /* * Created by troy379 on 05.04.17. */ @@ -26,9 +30,26 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); imageLoader = new ImageLoader() { + @Override public void loadImage(ImageView imageView, String url) { - Picasso.with(DemoDialogsActivity.this).load(url).into(imageView); + Picasso.with(DemoDialogsActivity.this) + .load(url) + .into(imageView); + } + + @Override + public void loadImage(ImageView imageView, IUser user) { + if(new Random().nextInt(2) == 1) { + Picasso.with(DemoDialogsActivity.this) + .load(user.getAvatar()) + .into(imageView); + } else { + TextDrawable drawable = TextDrawable.builder().buildRound( + user.getName().substring(0, 2), + DemoDialogsActivity.this.getResources().getColor(android.R.color.holo_red_dark)); + imageView.setImageDrawable(drawable); + } } }; }