@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="play_gif.svg">
+ <metadata
+ id="metadata14">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1200"
+ id="namedview12"
+ showgrid="false"
+ inkscape:zoom="9.8333333"
+ inkscape:cx="1.5762712"
+ inkscape:cy="11.084746"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4">
+ <path
+ id="a"
+ d="M24 24H0V0h24v24z" />
+ </defs>
+ <clipPath
+ id="b">
+ <use
+ xlink:href="#a"
+ overflow="visible"
+ id="use8" />
+ </clipPath>
+ <path
+ d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6 0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h-2v-1z"
+ clip-path="url(#b)"
+ id="path10"
+ style="fill:#ffffff;fill-opacity:0.7019608" />
+</svg>
@@ -13,7 +13,8 @@ resolutions = {
images = {
'ic_launcher.svg' => ['ic_launcher', 48],
'main_logo.svg' => ['main_logo', 200],
- 'play_video.svg' => ['play_video', 96],
+ 'play_video.svg' => ['play_video', 128],
+ 'play_gif.svg' => ['play_gif', 128],
'conversations_mono.svg' => ['ic_notification', 24],
'ic_received_indicator.svg' => ['ic_received_indicator', 12],
'ic_send_text_offline.svg' => ['ic_send_text_offline', 36],
@@ -9,6 +9,8 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Rect;
import android.graphics.RectF;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
@@ -412,7 +414,8 @@ public class FileBackend {
return thumbnail;
}
DownloadableFile file = getFile(message);
- if (file.getMimeType().startsWith("video/")) {
+ final String mime = file.getMimeType();
+ if (mime.startsWith("video/")) {
thumbnail = getVideoPreview(file, size);
} else {
Bitmap fullsize = getFullsizeImagePreview(file, size);
@@ -421,6 +424,12 @@ public class FileBackend {
}
thumbnail = resize(fullsize, size);
thumbnail = rotate(thumbnail, getRotation(file));
+ if (mime.equals("image/gif")) {
+ Bitmap withGifOverlay = thumbnail.copy(Bitmap.Config.ARGB_8888,true);
+ drawOverlay(withGifOverlay,R.drawable.play_gif,1.0f);
+ thumbnail.recycle();
+ thumbnail = withGifOverlay;
+ }
}
this.mXmppConnectionService.getBitmapCache().put(uuid, thumbnail);
}
@@ -439,6 +448,21 @@ public class FileBackend {
}
}
+ private void drawOverlay(Bitmap bitmap, int resource, float factor) {
+ Bitmap overlay = BitmapFactory.decodeResource(mXmppConnectionService.getResources(), resource);
+ Canvas canvas = new Canvas(bitmap);
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setFilterBitmap(true);
+ paint.setDither(true);
+ float targetSize = Math.min(canvas.getWidth(),canvas.getHeight()) * factor;
+ Log.d(Config.LOGTAG,"target size overlay: "+targetSize+" overlay bitmap size was "+overlay.getHeight());
+ float left = (canvas.getWidth() - targetSize) / 2.0f;
+ float top = (canvas.getHeight() - targetSize) / 2.0f;
+ RectF dst = new RectF(left,top,left+targetSize-1,top+targetSize-1);
+ canvas.drawBitmap(overlay,null,dst,paint);
+ }
+
private Bitmap getVideoPreview(File file, int size) {
MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
Bitmap frame;
@@ -451,11 +475,7 @@ public class FileBackend {
frame = Bitmap.createBitmap(size,size, Bitmap.Config.ARGB_8888);
frame.eraseColor(0xff000000);
}
- Canvas canvas = new Canvas(frame);
- Bitmap play = BitmapFactory.decodeResource(mXmppConnectionService.getResources(), R.drawable.play_video);
- float x = (frame.getWidth() - play.getWidth()) / 2.0f;
- float y = (frame.getHeight() - play.getHeight()) / 2.0f;
- canvas.drawBitmap(play,x,y,null);
+ drawOverlay(frame,R.drawable.play_video,0.75f);
return frame;
}