public class ImageMessageHandler extends CustomMessageHandler {
public List<Byte> getTypes() {
return types(MessageType.Image, MessageType.Location);
public boolean hasContentFor(MessageHolder holder) {
return holder.getClass().equals(ImageMessageHolder.class);
public void onBindMessageHolders(Context context, MessageHolders holders) {
holders.registerContentType(
(byte) MessageType.Image,
IncomingImageMessageViewHolder.class,
getAvatarClickPayload(context),
R.layout.view_holder_incoming_image_message,
OutcomingImageMessageViewHolder.class,
getAvatarClickPayload(context),
R.layout.view_holder_outcoming_image_message,
ChatSDKUI.shared().getMessageCustomizer());
public void onClick(ChatActivity activity, View rootView, Message message) {
if (message.getSender().isMe() && message.getMessageStatus() == MessageSendStatus.Failed) {
super.onClick(activity, rootView, message);
} else if (message.typeIs(MessageType.Image)) {
ImageMessageOnClickHandler.onClick(activity, rootView, message.stringForKey(Keys.ImageUrl));
else if (message.typeIs(MessageType.Location)) {
double longitude = message.doubleForKey(Keys.MessageLongitude);
double latitude = message.doubleForKey(Keys.MessageLatitude);
Location location = new Location(ChatSDK.getString(R.string.app_name));
location.setLatitude(latitude);
location.setLongitude(longitude);
LocationMessageOnClickHandler.onClick(activity, location);
public MessageHolder onNewMessageHolder(Message message) {
if (message.getMessageType().is(MessageType.Image, MessageType.Location)) {
return new ImageMessageHolder(message);