From be4aa2afc96b86c89c2fc37735a4b0cf328d7415 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 11 Jul 2016 21:24:33 +0200 Subject: [PATCH] show a preview for video files --- art/play_video.svg | 59 +++++++ art/render.rb | 1 + .../persistance/FileBackend.java | 144 ++++++++++++++---- src/main/res/drawable-hdpi/play_video.png | Bin 0 -> 3813 bytes src/main/res/drawable-mdpi/play_video.png | Bin 0 -> 2432 bytes src/main/res/drawable-xhdpi/play_video.png | Bin 0 -> 5087 bytes src/main/res/drawable-xxhdpi/play_video.png | Bin 0 -> 7824 bytes src/main/res/drawable-xxxhdpi/play_video.png | Bin 0 -> 10668 bytes 8 files changed, 178 insertions(+), 26 deletions(-) create mode 100644 art/play_video.svg create mode 100644 src/main/res/drawable-hdpi/play_video.png create mode 100644 src/main/res/drawable-mdpi/play_video.png create mode 100644 src/main/res/drawable-xhdpi/play_video.png create mode 100644 src/main/res/drawable-xxhdpi/play_video.png create mode 100644 src/main/res/drawable-xxxhdpi/play_video.png diff --git a/art/play_video.svg b/art/play_video.svg new file mode 100644 index 000000000..083e7cfad --- /dev/null +++ b/art/play_video.svg @@ -0,0 +1,59 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/art/render.rb b/art/render.rb index 2b2caacfb..fe39e66bf 100755 --- a/art/render.rb +++ b/art/render.rb @@ -13,6 +13,7 @@ resolutions = { images = { 'ic_launcher.svg' => ['ic_launcher', 48], 'main_logo.svg' => ['main_logo', 200], + 'play_video.svg' => ['play_video', 96], 'conversations_mono.svg' => ['ic_notification', 24], 'ic_received_indicator.svg' => ['ic_received_indicator', 12], 'ic_send_text_offline.svg' => ['ic_send_text_offline', 36], diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 85b1ac90c..d1935a18b 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -10,6 +10,7 @@ import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.RectF; +import android.media.MediaMetadataRetriever; import android.net.Uri; import android.os.Build; import android.os.Environment; @@ -380,21 +381,43 @@ public class FileBackend { if (thumbnail != null) { return thumbnail; } - File file = getFile(message); - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inSampleSize = calcSampleSize(file, size); - Bitmap fullsize = BitmapFactory.decodeFile(file.getAbsolutePath(), options); - if (fullsize == null) { - throw new FileNotFoundException(); + DownloadableFile file = getFile(message); + if (file.getMimeType().startsWith("video/")) { + thumbnail = getVideoPreview(file, size); + } else { + Bitmap fullsize = getFullsizeImagePreview(file, size); + if (fullsize == null) { + throw new FileNotFoundException(); + } + thumbnail = resize(fullsize, size); + thumbnail = rotate(thumbnail, getRotation(file)); } - thumbnail = resize(fullsize, size); - thumbnail = rotate(thumbnail, getRotation(file)); this.mXmppConnectionService.getBitmapCache().put(uuid, thumbnail); } } return thumbnail; } + private Bitmap getFullsizeImagePreview(File file, int size) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = calcSampleSize(file, size); + return BitmapFactory.decodeFile(file.getAbsolutePath(), options); + } + + private Bitmap getVideoPreview(File file, int size) { + MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever(); + metadataRetriever.setDataSource(file.getAbsolutePath()); + Bitmap frame = metadataRetriever.getFrameAtTime(0); + metadataRetriever.release(); + frame = resize(frame, size); + 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); + return frame; + } + public Uri getTakePhotoUri() { StringBuilder pathBuilder = new StringBuilder(); pathBuilder.append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)); @@ -656,26 +679,95 @@ public class FileBackend { public void updateFileParams(Message message, URL url) { DownloadableFile file = getFile(message); - if (message.getType() == Message.TYPE_IMAGE || file.getMimeType().startsWith("image/")) { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeFile(file.getAbsolutePath(), options); - int rotation = getRotation(file); - boolean rotated = rotation == 90 || rotation == 270; - int imageHeight = rotated ? options.outWidth : options.outHeight; - int imageWidth = rotated ? options.outHeight : options.outWidth; - if (url == null) { - message.setBody(Long.toString(file.getSize()) + '|' + imageWidth + '|' + imageHeight); - } else { - message.setBody(url.toString()+"|"+Long.toString(file.getSize()) + '|' + imageWidth + '|' + imageHeight); - } - } else { - if (url != null) { - message.setBody(url.toString()+"|"+Long.toString(file.getSize())); - } else { - message.setBody(Long.toString(file.getSize())); + boolean image = message.getType() == Message.TYPE_IMAGE || file.getMimeType().startsWith("image/"); + boolean video = message.getMimeType().startsWith("video/"); + if (image || video) { + try { + Dimensions dimensions = image ? getImageDimensions(file) : getVideoDimensions(file); + if (url == null) { + message.setBody(Long.toString(file.getSize()) + '|' + dimensions.width + '|' + dimensions.height); + } else { + message.setBody(url.toString() + "|" + Long.toString(file.getSize()) + '|' + dimensions.width + '|' + dimensions.height); + } + return; + } catch (NotAVideoFile notAVideoFile) { + Log.d(Config.LOGTAG,"file with mime type "+file.getMimeType()+" was not a video file"); + //fall threw } } + if (url != null) { + message.setBody(url.toString()+"|"+Long.toString(file.getSize())); + } else { + message.setBody(Long.toString(file.getSize())); + } + + } + + private Dimensions getImageDimensions(File file) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(file.getAbsolutePath(), options); + int rotation = getRotation(file); + boolean rotated = rotation == 90 || rotation == 270; + int imageHeight = rotated ? options.outWidth : options.outHeight; + int imageWidth = rotated ? options.outHeight : options.outWidth; + return new Dimensions(imageHeight, imageWidth); + } + + private Dimensions getVideoDimensions(File file) throws NotAVideoFile { + MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever(); + metadataRetriever.setDataSource(file.getAbsolutePath()); + String hasVideo = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO); + if (hasVideo == null) { + throw new NotAVideoFile(); + } + int rotation = extractRotationFromMediaRetriever(metadataRetriever); + boolean rotated = rotation == 90 || rotation == 270; + int height; + try { + String h = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); + height = Integer.parseInt(h); + } catch (Exception e) { + height = -1; + } + int width; + try { + String w = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); + width = Integer.parseInt(w); + } catch (Exception e) { + width = -1; + } + metadataRetriever.release(); + Log.d(Config.LOGTAG,"extracted video dims "+width+"x"+height); + return rotated ? new Dimensions(width, height) : new Dimensions(height, width); + } + + private int extractRotationFromMediaRetriever(MediaMetadataRetriever metadataRetriever) { + int rotation; + if (Build.VERSION.SDK_INT >= 17) { + String r = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + try { + rotation = Integer.parseInt(r); + } catch (Exception e) { + rotation = 0; + } + } else { + rotation = 0; + } + return rotation; + } + + private class Dimensions { + public final int width; + public final int height; + + public Dimensions(int height, int width) { + this.width = width; + this.height = height; + } + } + + private class NotAVideoFile extends Exception { } diff --git a/src/main/res/drawable-hdpi/play_video.png b/src/main/res/drawable-hdpi/play_video.png new file mode 100644 index 0000000000000000000000000000000000000000..70831fe4bb97cb62254b6a46d974a326d8adc416 GIT binary patch literal 3813 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 T#-gdGBPqbt*b-H1=>Fh;W49CM literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-mdpi/play_video.png b/src/main/res/drawable-mdpi/play_video.png new file mode 100644 index 0000000000000000000000000000000000000000..96ab3988a0c043cb0871ced3cc27b96f26848a39 GIT binary patch literal 2432 zcmV-`34iv9P)nS!K~#90?VW9m9#s{9pMxSTZK)tF#%@dbNYp@<8WrnDY!}nw z2dGPk{xFy*5fs0cCWs-iKT1MG11%pKYZL;14OA?Mq@`PcS+ zs=u#3^^V+6s}!KB(||=lfBY<<{1_GZ zE3gyT0c;nMf0dM(jK&q9ssg+d7yy<4(<|=sW#B1b82FutyjpR8nKY&VReck%47dWA z+t4uf0}lclMdals22i^KqM7+P@M+-my8EAkL%=%Vmvx(`S{0zG7X#PQ+%MkZAaK8k zY^tlnS`?tFX8~UZ-cv_^3D^ewNJO5mx}(Y!psMc&z6s2zy063>1@0D+-&EO2WeSK7 z*{ccmz6^(fT?AKh1bCL<^N$kzehBfv3_@%$513DIVJ{%W4P|&3xJN|(T~f}ZRH6V? zJq=h1yuF}^KLNi6eh=&w5iK|l0nR4G7E1|1T@juER*A?z3x0n}k}E(}=K!k+k!v1~ z0gnM2L}YL3aRI360$@3CDdSPJmwmuW5jl`@Oi2}>s`CjK|I8d;I|8f+)>rWhn+#Q* z1$+{?oP5uw1HgAgWF*yCk|{t{&jh{)%<+B&*bMx%sa#D|#ODcjg!ft;1iqEZLrS86 zX!CEyZ+7+rt3_m2ivG)@suu#+?&HXH`V6=}O=#eAnh-5m{TN&y&i0SyexT@8Z7- z+|}lb4Z#G`&wmHWull4T#8Q z;C@HbcdP3Aiu93N0WqKdB}daOZMXSO9sr(nw7W)CPsuC1$Q|$r>|pB!;O+vlTSv@8 zts%rNStkTPgAI|AIBX8=z6fbXknu9K^Pdk7OXSzHmX zm5V%gKtFb_26=i^CP14U9 zpNX4_OT5Bd3W&eB4;amUB_c0*J1$9MCMh}>j~UHA=zSP_?|?*HeGj!MAdAz0 z$~UtmV2rTw?(u{&tz3_(0M9evka66M_FBL`U`67K4|bZyx^^xFSb_ zDv)iRyO|~Mm>^5Y*$x>^P=(2vh?S^c*}USW9@uoHWi$mOc~<{UEf&@(x=H(+uAP}MVl%Zz4!!(J_M9Jc~u zpta6uHUs#AS7r_xGdUBu8ao5}V4k2f?}W?-;2%btfmnMX6}5XglcB2pfVC<6AYr_2 zaw#A_SRS&P0W0Fesx%FGIsd~6btEj-<*gl2WJ>Z8?EL>6;2U|i>a>-34xUOX`+-OE z%FnHU=#u`}(R4AP@WpGL&j1%Y+N~{8{I$@eeB8$Wl%wfYs#ZEB z73rhQs))6Oh%XBPzFKq}f0L-{VuIbb%;+dSi!dpL6%b2y-Q{Td2H+-DwW7z?psJSu zHxkBfac7zGWu?{yiO3W9c1E5Ad`(raZ1aOzRYg@l3k>0#tXeN3R*EK*6cw{hCX_6D zhx02>0(XeWk+OZKB)ZK*_#U_bPZLU(c?vsCNvfiKvj|1|yi35JC!`fzDch=vLDmrd zijRANZ?~doUk_D%3!!Xfp6XHC2#chW7DM%-s;3iDCrim!w(%cs6KArP5%T%}f2E6i z#Am`v{14`d>?Z6z-cFd@E>pbw9KrDg{g=uCzOs@z>e*5thUE{Qh1V;TYp_ y!Ha}gq4&zG-8I&->*(m{=;-L^=;-L^F!?XC9^Aj2n523D0000oETnYEPK=Rinh6NODm`VeHsFywFf3VT_*Nfwt-6kUk%=u!}g_O=9xKn7~ zlMbC~lNMe-9j_c(_}SjVV8Xu8P}lGbPjLG^1HVG!seoYb$anp_fT&-Duj&bMk9uw0 z8OQGsNh-YHP#Hrk-*)R9^@BJQOat9Pgj?FHGPtC?Pv@7Pm zyr_5Yr0W09CbL`RYDH zd7}Fc3~vpN&RlbJ9fSr7<`l${tb*DKn;oshhy%q6O*POjklebRNDl#14pS6r zZs=+?VKu&DCykZ~Wg(4ZBwboftbcGdBX;Yk1dX|St$~#QcH5m%0U~Ll(*xyl(fqrq z)Cbyg_sTEd0rqUyYshsfPi|`rkrfQ=;TZ@rO`a!STH*`(15wZ-X&}i2b1`9d^hNbl za?jYp81w{(?CDk$T!oxFS=7>#Ehx`}p2k5&xi7)29Iw`_5?~vEJVN-$oYa*dH9%n_ zp2w(>;1kr(%kcRoE^h_f)oMsQgd#jGJ=nE zZxi_&<|EqQM8x3}=YO;>&{7yz{<`DyXwhA?um`q7NfCP%IFayP1b=R}E5a%?=I^(p z47wL~hLb>Lxn^qGA^E%_~_*yfSN%_Oh<17MHQo$gzGyc7~5 zkt4==zdi!H&Ea)*?FH1S6TX{|wa%{mcSLg6;-hOYX9%ZwO>DAnIjsij0|;is(r?D4|qf0XkCRJ96}8#&1~q~!@)1V<}L33 zyx~vpISAsIYq!P;^;8u&XX07M7_G>#n+_7>vDK&Ie_t4KeqR2(om-Sp3q7G+Nbxjj zme;IL>ONwUW4!J2R=Z)L~f23yOB0Y_jJ^t-CIqj5LpGnW6>A zUIo>ZK5BXIcS+4bluXOyV)f3f$$- z4R3dnY)J0y-oqz>t~2WdtK1*;i@DW;)IliY<_%Syt@aVh>5noD%Qfjq?SWtA0lft` z9gnx*jY75`A$Wz!ME5J(L32>AB7NhDo~Di^@)eeU&&|Dy_7S&YVe!&M;&O5;ZO2=V z=wdEvYS#>X=y|Ikp^H&_%zmgO=SQ`~hed_!-GciiOFs~BOuasd6-*Ts4N_(B`Z|(yi|!zb{=v`{kPbv8Bbf zB^Ar3?sM%@bBaqOtY>Hhuua_Y!@?P^<7ZJY-pgQ`}Q2&+1jOsR zoX-Y7q{tU=&DYYFhptxg$5%J@y*qV>>*Z%C({V;zsx(S!#*U&3whIWRewLXr(zRK+ zn2rWLxC~1gE~IVs-@verH0!I=uyk~04C6Dl2Ct;*vB2$e^GYpzx`2Zj*m zl(<}jQ~arkkUj13exq+I{@>8xUjc&Y{lHhr$K({xD21iQ-+BRsxr(RN7rXN@?tsg4 zp+)KjsVfF*%I7SiAGfXia=HX%s$`WlIOU}d9(e4!>h=TE^+9WLp$^sh}CU(VMJd@l2 zSW0x42j1iAzYGxA$RH4jZEz7im(pF}b&D-P3yw9eWA9TSUECOl> z?_UL+&BWCLZ@JhePNS(_VNHmvX!M@A@GSm=y_po>JT^bu4m0(Ex7hNi`rS4Wa2H$- zCywpAc4i+oKnFghh@OQ?N<_zhwLOztJEV2ytC<4vJ*F9muNwVoq2JBBU2);9V*XbO zxSZ8oEAlWJmM+*Dv-#`{Y|e-CG2+s$E`Y52B4{WCJf@ zYZd+pP-CnV*U9X_^NjEI@IyZZ@UKl&T}OVdj>naz05%-*rJQ)jyKm~zobuP~YGG`R zg`cQ4hrxtufNd$!Xf z(^$jgYM!xIoe zP`j7oC|Qe)@<^W}k>X}EPm4lQ`kBdOjo>6Kt^>9tnq%#6@`f_5{*$q3n?@v$tEGD6 zH=WFSz^&~}U|K~>j}(;&x<7?@D`{!!L?6@nky(k{icmAiP>oQTJqakLc&7|^+3S8> zaay@-pblpoWqVFkyX#T1FMQ5X2Eeoh?9Emc4{go5M+S{a27H370E~t&wQKRNAKzGBG~ft zEI6OzS@HpnijavB(y_^wIt~jnJn^2GklJ_103CS3OvARHw&c+5!SVCns^>z;UZI9S zIObzdt6Yl>?xrXULg=W-t^!JUOuNiUg%l;R8tsRsX1biybLJ`I3!hC|kl+NJvjs8Q zMyf1-d;H^y!&kEqZq{_K@KGdr2{;}xSM-u5{n*soI!IiT1cmqc zrbqf}0Ky)&yB%nyx`P3dTv*JXS1T!Q2hReZmBpryk{tO7@ozyJ+S`P@8a1tr6&IKc zQ7I3wbfc)%u7-+_Dr0O1U3WZ6o}Hc)O&b4OH)HCxbmI|#`RGp&*SPfWy;Nmq@DT|1 zKSYTXUhS4>DO^55z%O6K2^8x&CRN`s1!`A07|JkLA*q>}G zKq7Iqet*JB&rBxGnC?fxc4TH|)n0QPLKU@mv_(rCodcZ+(h6G~xZW10=%gok+TFX1AGlNfaqDLiAKd3B6n*Kl)J%+RIiCe)3Xi57 zbHyEu51#Fp#F_EzR^~jaLW#T!3FtI6I{`_YHXX6nWl)4LXGnjD-&!IlTS_cZNBA`9<}=0B9x&`?S4dUFS(o+3LD(3|r=(VAdbd9t_Cs@)x*1M|H=RF|v zet}K@P?zv!?nanar?oW1EBAR>^ltN)p!xQW4+4x>b5-7&wnq`dv+#Le!d3XjDH5$^ zp}&Gw13BPu-y!aoP&tTKr!}gyRe!J9e`{hTflKwPF>G*`Mq}}iI5*y%+xm}c>PvX& ze8)TFE1y~;B(udZ!}Ih#9aNc_qfDw#a5sP+BbuG{23VuMrA-J23E&^}2;sP4d$e1Y z?u6;EX+G~6A2KFO;C=UGg3D_)t=d6_2VxPhSwI9}r~)D^1R*@pbvv>zAabIOb?u*Ipp?;S=N9`>Q~9nXyil{JB{$euoso7ec09^P9+A33#q zufqfUc-`rD_`C!0cCvzq#6LUwFZNZxjyiZbR}8pz#XRd_e|?g&gm++_COd$+-TogH z9kSrw+BgOI?Z+mmPMXify={dr(du#do=!wS-icyq`my%el9JkVfDJdb7%m^Q@}7yt zku+a9CJn^L1cdEo^w%&tP{o+rXCbaW5vz ztf>Lq14eENF%bIWpbIE078rj-{t-jySZuo_+IV3@lhr8|Efy^>Eq#f5TpLA%)~+Ve z)pibfb?uY9vWl%j!++j{`KcS`Z5|PVcHSwToYlB1X2DG}mfO{2fUOCaC5en`BL(%j z9E64r@RdLHGa&lvSC!&}-n+Vm#B**2?Fe@E<;houjgvnFq!#u%dF8w|i+owzkO3H< zo_tMz&@V}mJ@q+;;Tbu{U3L{p9-SQfLHe!je=2{9V#qL@_r<@df821|5fZ_u5ip1B zNgdZ()qE1#ptY&h>K5?&?KwcMc2&|#x(_M6h35VbtN`V#+YjsH+6ZthO%hZ|TmpaR z;$G@`$&VGb%BkP75rpE*r1RxsxIR@0R`!PAc}PBM0xK?+Inb{bI3d^x{`(ohO+y+? zW9^CU8r;bX&E>EENw|TU_m?tNT{pkAN=L)pxE@y!0$x>*q93bZx8YvK-?3gFJmlQd z_`>tvUf7U01zua})GG6akgLxmq5;GYszL2gB<{DMQDl zZH=d$lk!RR?L$faktI($mG8>9AKydGeFtBI3Ji`=j_(0?-z6U>1yhf4v*t6Uur&zSl~h8W{6?ek*5 i|E*iaZfLnP51gBN-h9%TZDu#)0DEgEOrs_K`u_v=-cnHj literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xxhdpi/play_video.png b/src/main/res/drawable-xxhdpi/play_video.png new file mode 100644 index 0000000000000000000000000000000000000000..562a1b623b7b301f33f7ce84f6e003e8aa5502ed GIT binary patch literal 7824 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 literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xxxhdpi/play_video.png b/src/main/res/drawable-xxxhdpi/play_video.png new file mode 100644 index 0000000000000000000000000000000000000000..16f4d2a1898880f6eb519bc0bbf0dbac63bb0431 GIT binary patch literal 10668 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 LOQ<&Wy7m76X{EDk literal 0 HcmV?d00001