Search in sources :

Example 1 with ImageMessage

use of org.matrix.androidsdk.rest.model.message.ImageMessage in project matrix-android-sdk by matrix-org.

the class RoomMediaMessagesSender method buildImageMessage.

/**
 * Build an image message from a RoomMediaMessage.
 *
 * @param roomMediaMessage the roomMediaMessage
 * @return the image message
 */
private Message buildImageMessage(RoomMediaMessage roomMediaMessage) {
    try {
        String mimeType = roomMediaMessage.getMimeType(mContext);
        final MXMediasCache mediasCache = mDataHandler.getMediasCache();
        String mediaUrl = getMediaUrl(roomMediaMessage);
        // compute the thumbnail
        Bitmap thumbnailBitmap = roomMediaMessage.getFullScreenImageKindThumbnail(mContext);
        if (null == thumbnailBitmap) {
            thumbnailBitmap = getMediasPickerThumbnail(roomMediaMessage);
        }
        if (null == thumbnailBitmap) {
            Pair<Integer, Integer> thumbnailSize = roomMediaMessage.getThumnailSize();
            thumbnailBitmap = ResourceUtils.createThumbnailBitmap(mContext, roomMediaMessage.getUri(), thumbnailSize.first, thumbnailSize.second);
        }
        if (null == thumbnailBitmap) {
            thumbnailBitmap = roomMediaMessage.getMiniKindImageThumbnail(mContext);
        }
        String thumbnailURL = null;
        if (null != thumbnailBitmap) {
            thumbnailURL = mediasCache.saveBitmap(thumbnailBitmap, null);
        }
        // get the exif rotation angle
        final int rotationAngle = ImageUtils.getRotationAngleForBitmap(mContext, Uri.parse(mediaUrl));
        if (0 != rotationAngle) {
            // always apply the rotation to the image
            ImageUtils.rotateImage(mContext, thumbnailURL, rotationAngle, mediasCache);
        }
        ImageMessage imageMessage = new ImageMessage();
        imageMessage.url = mediaUrl;
        imageMessage.body = roomMediaMessage.getFileName(mContext);
        if (TextUtils.isEmpty(imageMessage.body)) {
            imageMessage.body = "Image";
        }
        Uri imageUri = Uri.parse(mediaUrl);
        if (null == imageMessage.info) {
            Room.fillImageInfo(mContext, imageMessage, imageUri, mimeType);
        }
        if ((null != thumbnailURL) && (null != imageMessage.info) && (null == imageMessage.info.thumbnailInfo)) {
            Uri thumbUri = Uri.parse(thumbnailURL);
            Room.fillThumbnailInfo(mContext, imageMessage, thumbUri, "image/jpeg");
            imageMessage.info.thumbnailUrl = thumbnailURL;
        }
        return imageMessage;
    } catch (Exception e) {
        Log.e(LOG_TAG, "## buildImageMessage() failed " + e.getMessage());
    }
    return null;
}
Also used : Bitmap(android.graphics.Bitmap) MXMediasCache(org.matrix.androidsdk.db.MXMediasCache) ImageMessage(org.matrix.androidsdk.rest.model.message.ImageMessage) Uri(android.net.Uri)

Aggregations

Bitmap (android.graphics.Bitmap)1 Uri (android.net.Uri)1 MXMediasCache (org.matrix.androidsdk.db.MXMediasCache)1 ImageMessage (org.matrix.androidsdk.rest.model.message.ImageMessage)1