From 6cfa24f55ab605770df08a6bed889bfccf0c0888 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Fri, 1 Mar 2013 09:54:49 +0100 Subject: [PATCH] Improved error messages in gallery for images that can not be loaded --- res/drawable-hdpi/image_fail.png | Bin 0 -> 17529 bytes res/drawable-ldpi/image_fail.png | Bin 0 -> 5348 bytes res/drawable-mdpi/image_fail.png | Bin 0 -> 8021 bytes res/layout/file_preview.xml | 2 +- res/layout/preview_image_fragment.xml | 16 +++- res/values/strings.xml | 6 +- .../android/ui/preview/PreviewImageActivity.java | 11 ++- .../android/ui/preview/PreviewImageFragment.java | 105 ++++++++++++++++----- 8 files changed, 109 insertions(+), 31 deletions(-) create mode 100644 res/drawable-hdpi/image_fail.png create mode 100644 res/drawable-ldpi/image_fail.png create mode 100644 res/drawable-mdpi/image_fail.png diff --git a/res/drawable-hdpi/image_fail.png b/res/drawable-hdpi/image_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..386674178bf5765f8f60b53ccf6090f3830da8e8 GIT binary patch literal 17529 zcmc#*V|Qdt*N$yZY}=aH*2K1L+qP}nPA0Z(JDHeI-yh!J@Sdzrcb~ORrF&P^-uuEy zgo2znJPbAr5D*Z&q=bkP;Q8*q2NVe4cLRs-U%(TXnV_s7;9VT-rvW(NJ%pjOxCqeC ze?R#>Wl4ZD(Do7%QdV7V->(->ABSZ?P0@r1nV^D$X{9AFQ1Ts7x@z;BZg<^ojdJZCQY%$l&oQcu{=3_PVDMF>Q^6ILV;XKLVJ`N{Bz~}%zQqyhU^F{6^q1Tu-Pn^%Ku+q zxSt91fNf%Wz1(c~`TZ;`EPQ_QBFBgoO;1mEx!u;*)vZP;qrPiIMqx7OcDp-xcyw%D zmnJJoi6lGOW}0&6*jihEUiN)omgV_sGN{O&m2sb(oXF+!dK`|#=+<#$$b=5M&P8GZK4uOY7#10x0y;T8O-oHpO-u9p*xdd8$N%Hhw_Ar<54aMoOfIL>_lw&f z5)uE1oW-G|6^P~B515#I+)AjhqvK|$$7}R({^zUD&kyi7Jb(Rso-Ik=osLQ~^gRB{ z`|;+)<#WID&miiM5s?XgP=iR<_(=~35?W;an*LrmczFAF`g0e?Z*6P45~YFq4jHSa z=krweeNm^XruLEbr2+#N`6Eqe_``FgoE|UrJ8<7T8AYel`TY5M69)(9DRCwEd*I-1 zpM--p+5&yNo~<|3p9`U`aU z;NU>-=Sfd~^l;o*$lsJIjXx#umk8}S-5)lx*Svyb=*8xYlH^$Y-_LnJZy($*<^NsO zf>>8meRcc7(bl{UB(Qg9CzA~|>`CraUOfqn0Aj$MbF@8)bP|53%tKz=8-7|8G?i-B4888Rg@0oI<1USy=jZs zV_dVQ)8Yg^Ds`^1XV)=qJHB2ox!Xhg3JYkiLTTd=MYx076NcmvObST29o2o471pP& z0Uk(0p&lY4Sy^9)qw?8YPNlm4GUqnYX=rFp8MNEoUhs*|@w=wz`m0gRL7H*E3P^b_ zvukBU`ls|mXwK6bt}#1k4SK)dXO^qf0IT~VrA~HVj}NH(WycG!Ni49FF%%k{7gh&i zR~?O;mZlz%kT|GAI&^uCJv&VU<+NWkatIc&@u z5SuLxJ|&}H-|W4Co_fwQdCI)LFZ~Ry%{>q}L<0`x{iw+2!-}25RIZl^OC;7+Gm=9s7z#Sxk)mLN}d zO=M;Y0HlZ9-(I?YUr+D!OTpih!v(^S@_Bqcot>%|rm2DbszI%a$b?~q;w`oHhC{A2 zN7IDrm`uzOXpW#fl@hy(pHjUjZX!~q(;GCqp`=w$K0v46px3)5vUXh_`GYkc0g3fEa3^o3{xT^k{s(M z_hp9Q;5bq;V}vs%_mK2SmKrsr51?5AffQtNGQ;3;Ql5+bXRRVtRfxJ?*DWb2DepH+ zsP7401Bm>ejHgo_&fcMkNr$UE!d!aC+`e>h|RQVlaido!G%;D{DTH11!)LdJELmxMylBSc*um7 zV8&B}EDxA)G%yw~|SUzOdW%(=KZSlupH8y}yTjEo#0iR52X zgoXnP(62&`+)n3D>L)~`KKNXKD z#`0xVcUY&beSLjzcY5;tzCC=JE}*}5htC(wUaof7u;83422_9?Cfw*s=ppGNSGzR@ zv`kTu$1$`cVYVZ!LIw(ih!);M;gAL)KpR@52RAM@0FxAp%cZnimpQkK*`s@V@HdKh zJY@~h#Pl~c8M=v9;ukHri6Q$?24kx~LceeT-p2T=ctd`zw z9;Wqu9-FgfPn$A7(Mh9}f~D!mn8cF@g&VWL#{!X{FPh->SZLHl2`MCcw`2+3%aFR0 zlS@f$ClX8)Akra5Y$44j42k>xHRLya=7{Iczb&*>?m&p(WIvd$pUN9W=3Nk zgcWz-?CwdVf1|38g+tI+qO6aNXlx16F!gqg-CQf`m%Kg)E}oA09w5N03=x+-Q+4jz zj;hn!+S)2kUR(2nGaKXvgT7}75ix1%; z)djQ;GdVmZh{BgDPe1YfT%@qDhBMCH`r+IVsAb8HGk>j3xN~Mqn{?||&z%7sk?YM? zMm(q0;TS~8iVd9eVT}o-O1nx3|ItO=;zmK+} zd2{wG^jrev1vb`!bIMlv0M!w+7MN;n)54CWj<4nG%{Dvvvc>EshQ@$orMguf$H%kY z9L+NHS<@zYznAkGt+vP%t?@&Y66XxLvX`5k9J#VC zw;PDWnUnZIL`euU<~IZw$`WP}qC%0@+YFg99=9vp7;!+)S_SidjabEMvE1X>lIeq=!99zC|7h2_MScafxcE9 zmQe_llT*&_=gDqZ(7rI+A(bq7(z!1;}3Yr|W-uL;+$q6|= z{lx0-*L&>_5V)`9rKA!VDwE0Is>V;AfRc@Rn<7G$)zuZiR?XS&a$61dZ7AHl*8O=s z)N1Qfst=AH?N|MC_KTK0(?p{511;^8(#U**Yxnzt{SHdj_3cQjt@rU=Bw6Z@S120m z0dc%o$8oAA)g*0p1|ZLQ{X3Z!_atL0$a{1DH_cJjq>*H%V1R`HlW)Q~3X+0~oqrjw znQ}?3ivK zp`q*0T9jB=KLPbm#U;$8uE2ybgTUqQ;&rAj0f%4p;T2IMW(0D8r#sI4`}fbT=Sfxe z?38~7(2ShT6?~iO4U8Jn5G4y++ zc%P}UWAXg)q;o1;+bR?OVG6j5x@tt|+)?A)AJjN+9%+THMT68qw0Q|FGa@m8`c=d# zJXN%BLiz(?!-WEhke0eS0EXa>02)ciAVEdgKlLoitzY@`$~COV#%83B$mbNJ0T<@* zK#Bn*r{Zyd-c^GIHAQS9Q1;JP9rLunLG>a=M@1s?I397y2uAA5-qz8STAeNc4|V^= zvFiqafZPFlb$105I>i&mU&gE`sz?dSMH34lvK!JctKnVxr5zm|jRYRWvGEycscDX; ze;DWfa62gy{An+b*4O?$^`P22^QxinlD42{Xk>J_RH4k!_vr|je~Ra;b*J-%5+1kS z6?}R3s>Dib%a7n^Cmy7d_K+;XmoKWHcqiX(ijRZA!X$f_pc)c8W>3RzpFrj8*$IOU zW5#Lbg4G>B7%!HqOj4Cl-!l+_0Of*y5*D3Ns36zaEneWPvi(XrnW@|o;#Z}v?Ki(Z zu!j92>*VAlgpcoQsl9O9ai|9i=+s{JKWA>}zz{Qc4eU<5{C)Yd2J4OG zeE1=Qx-%AR7sj9_kX9n9UrI)x<*}r|L;HLGMF7P7{7wE$-qv?v_bg4N;0gnY91_%@ z5=U4R;+H6q%83)ZooT{}q1RHB7m}H-wx;)ziGfs3M~B==^jTk`tjzB#m2|DgDn~Dq z2Q||qXSFTmAX8$~%xTlrS{*=|wjP!DeL!_yFlI)k)-R-;J#&OJWy+tWqI5ZK4GEvu`mvwwR%1Ii9zjo5m4S!Y#z(tM^655jelx?ooB zj&&q+CLi||0`;{;tkQD9t|3=}3ZQ)AU=vl&?y8lU~4 zpexVqTH#0)ZB3PA)*4js#%O{1ul8r!l`f*K?Bt1|Am{8+thf<|9_I%xc0@luRBo4r zr%Mh1bHN2GEhVBIUlPNDw z;T||lgQIhd>I@)Mtqp_5;Jg!WhLLd_!i)@Mr^_1>kzJ%^U>JAv#j+R{E_83=_V zd)aHga-~nLpBpzl4$vwR=J^*I#DyS9z=RzG=yiNQ4+#Lpj{RUPfkZqOUqeezy3%~# z%T|PnH0WP{B@lTK@BnfNbMK;!E)ijBGqlVfVqJCjU`1Ac+qSYq&;p>q^EB!Md7XA+ z({yyJ!mw70y@oExF;wv^aPWK~cRfG?^P`82JEbd7ma^-<7xODZ402P7r(B(8d{r>kydrlSr;Q_4H8RFSbz+V_YIM- zg14!4kgA_QXHC>Z0bW~M1C-R$dLHi`l=q|YG*wkq)20fJmn$I*QPm}?(ivT)S+-Ty zyI(nSyl?~sFQ5?xrUs!b9C2W$5>zf;J=s17BZ5%B*V+WopVpqQk2V&J6JtfzS0cE) zF;f{@{fLP(0oX|%m*0L*0Kms_0Qfk*_p|ql3rkbfUwfohEcebSxa0ZN!AZl((?)^w zt!l6xIYX5pXmeoqIN`-xUhAYU zQo!HiswE@|HsUJq~~uG2fnxto088L*r<2{BBFx)#8!xzWI$KVOJ|;dB0ujDLMR+dXq2w;~^DQ=x(q)?uS$p)}VblfiCOo+x>h zkK;gcQ(Jea+vbLeTaXv)wv7&yvuA$;XJP}9pjk&XEcOOhCN1S& zRB~zQ`~2*=9~(v|sfszI9A)$cjjbfQv=S7lkYNz;hbV$}MFe$+h2AA&!+3X@J)^)go5^19@p5Ca8tcYox{r#a6heobU|7>Cji3HtbA@4>6H7(;-&}kS#ao zCO*Sc!%gc~djp`OaRdNSnq$F{;b%iFDkcKl7D`3gH zlC9F6!pWn5-bw^3GT4F!PM$6SiQs$xaG9l!o}K|dRM@=8Xd%Sb@t15^Q%fbx`pi%wKo`M5^VuKh1zKQwh z+O}O^S5%XuDB-n3$v-RQ226D}wYim6ebC7z8fDgq2l=M;=R>_4`rdjHAdC;{;oA_vzT zIf}{14N8jYq4pYbs@Bhdy6zg1F_W&KewY`pq-r92fpFUQ^x2X@r8@(>q>kL&* z&rsC&_ovI3+ie;|8#4#a1IlvR39k!Evfr0$Hf%1YrOJH*_>Z#DXw(qBusrZodM78` zKQ`lvVz^D~GFMRR+Nv9wgs~M$kCcPhBP+Xi8@;k|F4YBIYl)M@$+gVRz)MG_K0aSb z@_ZH0U&V({t9p=(8FIfo(=Xx!|9Ay$jR!dXG8ry!pkyL#WM2Dsq9SO{ zhYV}vp&g@fl~p4CVo(Sll}VZO97Ds*54Z^~20A()KX%NRk*OGxJ?$p`=P)HOhm~`# z3Tb54^W{0pI}4CQ@^%K23EBqy4FGKp+&3uFv~KNSasT=D50ErPaJik&wmO`wtgQTJ za;+_NRG}w66t>}fl21t~>RrUxy9mXYKPi8?H;=__aG2SqERh}|XCxjy2)9!~e|^dB z9~>Ai)>8{IXDtQ?6gjHnl`37DvKi8In9`eB4ipkbZ9ySdsK%J5CPv6;iBr*uk`Hwu zkrW{zMOgT_TvObB8+%xEkUu_;06-By{@CvQO3AJo$FI;eH@~-#FicGmS}>w~O=&J| zR^=a)3;cAj^G(-6nrGJ_M7!SJvX?x&wS)2M!Jn)VHyD?@j>yIYd-vMF4a-Q1E!J9M za!iEbxlIk^Nfa*HZ*v_8xs;(m_4#_*#^JDC3f|dicfU8B@nFyLV3W2+;{4~|@@A>t z=ANm}r89F2wFf&>_N;;~p=UEdVO+*41-^DU{#4u2{ zj?~q>@OUSSEyopj21x7P>^3e|!3>pSR9sb@D_cZ;qcf`FA}ALVGfszWW+bKpP6eMI zsgl*pgya#!qeR)Rh@>^FhN#y;GDo~E?a)(69(8F)S38EYiEyek&)qv5nA+)9Tam;L z_DCa0765?)(835%khB2g@L|u(j?qbIlPUSu{BjB=Ri^9YBA1mBmUmI`pn83+r!wzl?XE_P=4iP!I({1Bfw+#wiFXxGLEnDr@kJmEA+H9i?t z?eu~Knfu*(FAi>Se%yheLP3P-)JM;X0KoTfBDdD~rB)_LTZn z?=@A-XUsIt=g36%t7SpJIOWZ6{(#`(3fnR3SEq1KeE##qz3W0=9aUdvr|12_U$b!O z4{K8AwoRXxZMVMfcPmMic<4a!>Z|hYxWF{V7!7#LhD5lt{ww_nzo!I zT|v`FIWs~b_KJ?`cIVXj-trh(&=Se@-6jp7M;+ z4tZXQhN_Bd%NJy350nM#zQVf5S``GdD$a55E`dXPI6Lc>K-3MiP!^DfbId=}q{UxUEfBH^D4v$+dw~Hkw zcBlzf#bzaqF(=i=s9mR3(1X&{tl;nMF)3LeL$i!GhvdHc^ST|V&aJ(gNjRj)v2C}M zc~VlKJSs}t;C0C!O*ou`%){2PQ&wYtG<)-)p;84q=W8a=>s8tWH2Eq*%bCh6wUwlx z>HVe!JU&q9uK`GcXz|1B8bs7*3Hq#{htJt;D&+(;x?3;T1J??D5!p_g{ zHAI(I-jXEzVJ-y0*7_D{ViR5US2^es;`Aj}@=+Ct2?I2WXhts(V-qYXlY$fa6~r`0 zq5(dtm6ZwfS=_gSEEO_R$ z?{_zU=0Hs)E46LXAdEol2fIV(hcq=sw+v+OOYUXkh5&CQlK%ze9@E9~NFV>a9OSxH z@K0q7Tzas&ysYbezi24Kr~6W&cm&Y&^g6xHr&VFTez0Xm&4d_Bh6wwZ4`ZtpcfXV0Aor$(=^35ucbD2WNM0reMF zDcy4W%-K0JqP%~RWwPOS1_oBhQq8SNP#6C&q`X~k>iOJ#e}u3CByfiV0BHnRfF8r- z%1LB-^A*m-ZyBZbzA&WJ<-VLeAddfd^@YJZ)C6jBY0j zZn8H(kDb4Tv+D_-CK4y$m=qIY)k>-(1|)Iyl{iB*q=@=o%@lS?ARNJ>`#FurXg_hl zJw8YZC}SC!nX;rQ80>U4P}5v=z-=NW3q@?GsIo0P z=dn7L!Ei0e;;Xf$(Rq(_B1Xf3h?9UDmN|T zWnS)|}HYbl(dr1a15#e#m+5Jt;GDM=(v z*Z$2>6uIJE)&n|YpjNJ^CzsZObDWh&TY;c0jCj{Q)^HmHfjsZ)djtT(Y@Sl!gS=>y*MBoSVcStPHoqA`oP= zpx&goKTY6YfV3Bw%LW?p>9J~Z%$=<0WjG<0mx!yGf{32)Ke zcesl4G?j8nY99$eUj%GP-;WQ$5ViuJN|(0>faBtl=nXDnX~HJ#49jA(3mYs3OFWo5 ztQp)gwiRVd=y#Bgh+Cr2A~j$9bH4mi$mJ!1INQK`P{{$a+M z5@nWepID7<#=emh&q&6U?HF0J&e=R2whgN2x?Bh|0XQWGFLn(5@09I*<+M3~<}Z#& zkP%%*6`xF%jUy;LBvua6Pdlhd2a<|VMcKr1z9#P={tW6$W6wzg%DOZ%w+_#3^I6@I z2lhU&Yk3c$59qx$$kEq3xlE|2CB{vveS+X!F)&!hJt;4N={Fz;;3ClPrLtkJ{y-3M zK?*iIVw(N&2<9t@lu8nOLpd&VRT^O_n!h_PTj2eyAQAdL!0cN)d&%00m*mFD#NV0U zv>zZZSLocu&~Q}nSD6q3@8o5*meAe|Z})f7-x5(+{cBK(a?)O!Eg|qezfW+jzB7MR zx_Az>)?&5V>+>-Sr~p@I4buar#zGT^ia!yArWvn+k1OW|Kww)CDxKl z-3p<@xFgQ$n39IMg?bHE1Ferci;PcE=zAdjOi~LMA1Uqot^4;kKjD2fbaxxQ+~~ZM zU!??-RJM#}Px6K{TZ0ZwH8=VlulBt?)%iYEc?$VSIhFG2}N2#PCNZkTnUDLS!(8jk~Eyak1~nY9MwCKDkPwH9D3eZ(!*ERy>Puw==W zCS^M<9+g^@Hl6D;p1ph|ji<}3V%UdQdMmShuH0UovLVCRs4ZYj9HlB_NR|;8{3FS$ z6N83K4xBqFR6VHhGzS3sLj*i^v6!Y(;^rPd}m!^Vt zWN8Efjn31YMJGVtINNM>_mrqgQoBqMAN1$nx{4>uJChi)24Sf^@~^=pMx#+p3t9cE ze-IK9^6_%}v&jFYYy+d^0I*8{tOD!SQD=44PJ|X2s;SjV4&nj zt+qOI&`E&Nx#vjKYqVXOfpW+yKl`=~4KyqYWw=gDErMk!9q9|s5WG6-Sy;Q1n2_?H zxT?U-=4=>mYC*M0jPQ;YTd^ShP2Vk^~XHepGt0HWO(rrsO=`qdr42KPL)>NeF3uER2Y{~nBzJ6k*jU5tD`Lh z*6`;-Y{%fnJ^to-uBF(BSVx3P)Q+}tIowaTKi{`(1!T2)eLLsQp+g2z#c?f z8n@xF_5r24p`aTbgr|SGSfZliX07ndmebNG#%HC6+sEg2nu|=VO$d*5yH$d8Q&Y^! zxCkB+#m!cu_Dav60CUBqCqgr5B4ltGv@~2Px7%GWz*1FHRn>h&^|ZCU0iXn&IErkp zjBm~Kr+4=ih_)-Q_+q<1jc&j3M+xuS*#FSk5-3U5e2!JPdZJO3Bon(zn|zAVdrF8< z4Hm$z3&#*W@~YZ(aK5!Js`%Dc{oxtwn$9!06)fPNbf7Es2L)>=HiyMS!R!@~rxHll z)|JJHSJEzKhaEYkHy#X-ZF1Y~{duqZ@pNzdcX}7>3y|7fuQ!%iS+19GZ{c*bsbI!i zuGTYg!Ox6;3(pPSSVe9MLX)U}NX@@CAdl*Q44fGV4FIu7abM=H_Yh*qP)$#}C{eIA zom;a{%I029k#QRD$Q}p1l>H-s#+6qk(+U8oUOG>ngG3Q6S9CNnSHdT+-ok`(nRz#c z3XJsy+Jsvoh;^O(`|ZV?g%3c@cl$#OH*2-4mtS>1PyBtK52=Sn;oii5Kc^2EY+*nB zD7lkf|9MTy%og`pe~2j>V)#mJy3e6$URjQ36U$6HbDhU}#JdI6}Op!!}Ay!oipwKaT(Bs;TZ~i%CGK9S@*Ic0Wwe zKqBB$GA{rzk)4^N_>#OAjkHpJqpYXgS>FZjRs5wdn(35QLgPONqBmFCkdUCEiS<1% z-8Q((DDI|380?+$SiRW>_yE5~{XR!AYeV^5E|$iVC{|Zjm8JAiSL4la1G@qvuP%+T zCW`NJ@^WTtrR;``zBr@Jsio*9loXl$<_;m(UBOMICdC-%bft65eH0Rz_geO<=H z#DMI-s)h{$%&)OxhX5VPnH!J2zRZRIbW}uFPawLUCQrG%REJ``Qtx$5xGdm$cC{y8 z$t775xP3IbS|>-RXr~L}svaE{XwIA!Fu8L8Y5vdQ#b1dt+cvMKi{*Lq;nLzdjEXxV z2yN3{8{ZyputDRs9Vy2zQc${It)s^gNaP(S(-@_l^iZe7zj}A(Sd%U^GWqUC#C}%$ zzFlVCysTBF5)mMRT3T8F&W=)2ZRQ+!s}vY7(l_o|-LeX{h6Hnw9HJ}8<;Qi`tl~*W zfD9zR?m)%<6ju-YqM$-;+U{swO#sB2H4RW6dS4Hs2#R?=4N%^%tjyx@cv?F;EMQ(m z?QpM5GU(y9&nUpba$0ONi>fc_Fv;f%puDHhY%?(E1iGu|ZeWBpjQ%wf7K$M-xzxi_%5s>2VZ04Xpp{GdY^W<$!}6y8CD z_yg7AxX%gpzz~4$3FE0KI!0v!AS=Uvhi&2=SCJI%o0_AcrfLgU>QO&3B^Yiu67xm|@J7>=C-@iT$Jw3ZjjibOdJbY5!Dc0dQ9L{R^C3dH% z6DlQOcVBF_Y^sCInxio&D{gT%$OH$yNARAD&R+<71m^cOP8=si477_@;vVuffSQi1pf2J zeck%~WarJ9>G5nzS}wXFdGM8l$y%!$bcn8QealnQhE+4KG?!)6#v4Q9AXq*#hKB3lz zBiY7Q8Pn=e>`taq6E$>jhlP%E8s%H>QO2rH7)nHt>_o~1r6t*@e^0itvi1%FXx>-8 zeEm*qbtvSr-E&bpS1)sT{9KKUSfc%dFdUkhSImAN_)=Tqaecv%tBeU21RX+bw=D<2 znai8rr3M>pN{iz*%T7mE7!&7Cl??bq2j|L>7u{nukT<@C^n$h8!MA<8ru_P%wIpf< zSEO8r-OXv7*DK@iW6~25;1W+Hwd{Or=))3V5isZer23FowXFw^Zn;| z;e13I)aGUjYe$WSYoqWa>|Pa^mg5W>E5Egs zvk7|ZA}|sE(7iP~SB3)W#PNorOdYjZRFtcJAwoIo5zCHR&#S%zd!)tls{YVZ$E^Yx zv{Xn=5O|UCa_2{2DO2KlA7ESum~211$sfPJKJ@zT-Zw6=D@4jJ%Z%Bd#Z5Ji-ye`7 z|I#iLY|I~VG9F%i8q;|;g}aoefbpzoy6Myk2H2CXCutL|sa9aeq9VVJobAodgUU;U zD}mmbL2q6GPly^&B1aMrOL_6v5U!EtgT}&S$G{{%WzUv$k9iWcV;TNZ*-&KLaont# zp^uUp=4yc@($v!NIiVz=&s;AP#LIM@_F711w^QhvA>o>VQL6bHY}EqMSpKhwfJ;gEl() zG26t+{93${=sL8euw}CVbte*|pia9Zk>xa7D;#IKw7$-d%%C6P5uG%Q&OZpQV8aBw zjXx6A4ot)=zWkp7%+T=NQ+{wtfd|0W4`@r`matO~0ll1FZfsen{qr(^H=nE{VnuXi z?x1OT0VIu(bhSIyv`4E4I~)T_aLHhmV`N=#sJ)Bx9I&fUR<_u?qb3O%2r`E(3qQZ# zenfhhotIGG+=R{ zl$JC|vH`7=SpG6~isXq>=`MPE%<$0u9YEpuTX46}Fk@vlTPkOkSw?>S_vD^j*pB(F z`-~*tB#CQv@^LOT_PxJoF9%I~vL`I&MD2vdsGY|Z`IVh<5pAh&U@irnXks z^Du@Yzqz?5Yf!Gt>0grk&34b_^Is(RYL&_pm11&AM;|0CWJY}+%F$smxr-o6(iyre z){hxlGRI`|T9bLymyY`*l>U*1EcG zwzR2`ki1V<$wRN|^zTUumM4hE`hGh#Phn%dhkjuyI8x&>4(&H06JAd^rMpc~+N1Ce_>N~(T46vGE#g&cVJfx@>+95H2q40z=`>OaC zeMdmsR8*-aw-p;`@`IZH!IrX$g`Q0vfXXI0U9^w7k|jLYVx4}7JvI`L-TuCK)@OXJ z4H3$)&gSvE8NKap>g{F1g_m6e4_Fi#mKauS0#XE$Irn*_1nR%pt8IrC!LwEp$+k~bcF^W>?v)60wSJRDM(F(1%B#+XAsjC)#cz9%jLV`2#8c@9t66BpDVI9 z`;77qaM6#(65t?&c}m$MZ7kr4Hd?Soqeva;w5mi@o*tZ{x5xi6X~xbMg1!b_mxDdS zn3~P*Z`1!hjTD*2{3;Q>l4Gz-*YWuq(^HoPPkvsKA&=MNdoZM=q@*;1Nx5xPM_ZfM z_4Boh-{YmH>ehw(Kh-Q~z*O~4*w`h+h1ChHvE+f@Ay7bY1g>D4j)4j~i6Ug#XHOv^ zNL%VYQQ%nxsff`dDf`j{QJt)I2<%BEK3e!|j8K6%|1SMM|NRRfG+9|$o5?Pl5(DqY z41Qc#aJbCKk3}lkvRoVNS;`qS>|nnJS*e|nx>>xtOzIjwCN|SlbczIQHJNet6UyzH z_B@Gv?*{0Jb3YUz(lmQpjo;W-&uQsr7ywE;J^jq=Ea(`Q8@JQqxiKp?Jix@H&zT$D z=G-76cr;02sl>5qlk3uxutB|w&>DktQ=D&dS`G=%X33AMaxg>-uQ{P)lT2r~Z)0mQ zMsmD}d@v=l-9gXt^R@f);dIgb_QqgUciS%a5C5;CQG18y4iqD32)mF#hhvh))0^bOV-ne2P2l7ms8Ht zIjKc!q_GjpByE0s{|>vOEYIIPW~Wpe7?7!Z+qvI~G~{coasyM=rxnVilij;gR!MGT zFuv2R8)U1k%E-UX@F_$TG}@1Rr~Fam$&*q*X#j?>O=k%^wQ+~ziIj6|m=_n2j`TD) zK}%kfyb}my&6tR*>QuVwJmbRYZ$=Rt%|YqE3-g;R zrO1<+gcP>M7Jdj$QQ$!}pqcFCtp3U^UdtembnrZVD1uEI1o-T-1F1BqcXRiq2r_H! z)G?3x(vBQ6G2cyS62Il7V>`)x!LNLYXSf(>X`{u8%#4)V+uO@!43(cqb<90}o5?Gu z%M*MwU_^=j6c--gCRo z^P5+Y%#d$DqhIeID*mP#Aq&TX+31!1*F-gx0f9-KR7qW6QiMjZOp2O#$ep_PWx$ba=?Tc(w1tE2|*z1>X4eaQerU|1 z$q+y0*59Ke-N$}^mjjtMZyH2Oflzne)K>^F5EU{~E-kKd;uhl7f{A6NLZYgD{MGcm zuYrvAYSd`KPu?5qYcfjH-)7!x_E()OHUEPFNlR0a&kZH0uqqFvv+Ibni?ZaMU0SLs zEfr6DB}abJEqma$nKTzP;LZ!vNH#3#TQDpmrqeR-)mlZ9j*F0CtjzlF>ev{SuUQ8* zT{KfGR=tpJRKFN6f#sjeRDz07#~z}gp5-$SH{Dc%yw!W+pn=PdUuy!V*+jBZzpvRU z7t91VwUEtig65_;6$ML^TCn*<@vFQKOnEZ)Rrb@yHr!#pB^cKkdVg~P8Ur0;Om*#Z zZ{Z7Gjd`}nSi5-xg+%}-#SGru*GJW6u>1zS|IcZj&(3*qJNgPJ+EyrQqV1zM-N1@i z!a|1Dn2Bw~Go@Ct&5U3H<2*<3@8f03fRqt)mW0Niy8z+--)#WjAnUWNw!%#QSvm?) z1+n?bhV=2tGT2G}z}$*3t8WYci)`edGKUgA_*bELprUm$>L7JZM^;)8<%Kkrfg9X_ zP+}V(I4LV!bVhK-7yxM+F;F9@WOfrZ%kPz%DMb8!QB}9X!QKjYc$JX@j5)QJ${hSl z;w*eAN6V-L8^Si^KJ8#hcnK-_3L_K;4$~tjt2&^Dz4cjM_U{l_0BGA7JNt9XJ4s@X zv8&m=d-fzK^;>|%#T$~sEA^0kG+MA-yNf%D`pZ;69kDaZ$M#m@^e+bLOM@)pyg`S% zz~^&w4?QI-(Mvf{>!qV|#Nxi-=aBrR^Uw1*zpXX)hHabRxZ0Xp{NKJ)yJTUp5N+T< zRDa(p1wfS)D_^)}bI&Dx=wVZdEE3efDBwl~sjeo0Oy#&c;c*dX8N(>o2;n`|huAM7 zhMDn2vg4hTPzZSn*-u)jsP-s3;P>@8eTS}((lv=^22`?Dve!*4;M7ehO}A;t3)^#6 zxb#udJFu!4#R-f<5;Z4A5d4t{+UhNgiG!BI`@`c*6R_?a;_HEcKzIK8zW~XJ4=EA; z^X88~0KLcz1@U)=4Cg-prq^UtlwD6XG`YKA?-#cZb9+^t`}M-`l2Q#*>o7L1KYHWZ z57oYu-l#Y;bY425zRpc4=%1NR3q zFE204nc4pIeq}hJZMw$U64(X=B9Om%{d$$8X8mhZ2@PV>n_^AAcbh0)G6lnEj(YmY z5u_y2kl7hYvO2XmQ3IO2Q&^nv!#aWg_Ktn z;9GEge>|5f69(Qau`e(-A|Vc=fPAg7c+ncDNactnAqy$S$&4mOE@=T3k&a_Llj39_ zXXG)q-5<7LFoh|15&qwL3+60RSYW_(T_ji9yiAh8NMEG-nfAN0f>Fy{lUE3~Uf*@Y zUU{ayz|QXhJI~IU^WfZ`EAy_Y2eCifmMFOW4X2~-ovF@thgRM5lRA@j8MqIw9yr>2 zuT1^6uo3Sq;N}hBXfnU7l?y}k-y`du9`a0m8wK3PqS`O{zoR3L~pF+e*Ad$lKMs0_NfUZz72Dl{Z){6m5kyq zUUuzR=ha39CBEB|w0L$O?%$T&tdxCxBl{Jt>)Rd`D&=x`Xqx&KzrMCsf8UQJ0|}c( zpXwsL2u)zeVJWaXDQi`7LL}*SUr=<(YvrEyy)Fv>zKQ2sUYMqHA?C)XT+1i&TT`pI z*JOtuVz?Nl^~*fw`J#ezVl7{{|M@t3zF6Hwj;LJe*e&@z2AA?J7qrXGxUIe5gK68U z?7IeLwLi_~ye{AS@7hz1CExA;ee4Hrbp81_lh^(&r)>Sz#qRy<)~wOd)h)G}J7v=B zz}neu&$l1?vhDYxKLKeg`adnMKQMjgQx(A(k=KB;oWR{rH{TWg%=COA;qC3s&CT8F zdFy4#HqM|QBF8RI>Z$LX;kVo}Jxz|U9k~C{I^p+#pMe26f#bH&fB7BaZh6i=`y7FX Pf-rcx`njxgN@xNAR5xma literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi/image_fail.png b/res/drawable-ldpi/image_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..77513ad23dbb986f2459ada6957329b5ffbd18a0 GIT binary patch literal 5348 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/image_fail.png b/res/drawable-mdpi/image_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..8e650cd31a6bd34be6f856e21bcfc8832c2e7cb8 GIT binary patch literal 8021 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 ta%e}#Uu*s=o1y + android:layout_centerInParent="true" + android:contentDescription="@string/preview_image_description" + android:src="@drawable/image_fail" /> + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index f330c5ed..cdbd6eea 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -89,6 +89,7 @@ Leave %1$s Error Loading … + Unkown error About Delete account @@ -276,8 +277,9 @@ Overwrite Don\'t upload - Image preview - + Image preview + This image can not be shown + "Not enough memory to show this image %1$s could not be copied to %2$s local directory diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index c2f1f42e..51489871 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -17,6 +17,8 @@ */ package com.owncloud.android.ui.preview; +import org.apache.commons.httpclient.methods.PostMethod; + import android.accounts.Account; import android.app.Dialog; import android.app.ProgressDialog; @@ -28,6 +30,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; +import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.MotionEvent; @@ -234,14 +237,15 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi @Override protected void onResume() { super.onResume(); + Log.e(TAG, "ACTIVITY, ONRESUME"); mDownloadFinishReceiver = new DownloadFinishReceiver(); IntentFilter filter = new IntentFilter(FileDownloader.DOWNLOAD_FINISH_MESSAGE); registerReceiver(mDownloadFinishReceiver, filter); } - @Override protected void onPostResume() { + Log.e(TAG, "ACTIVITY, ONPOSTRESUME"); super.onPostResume(); } @@ -346,6 +350,11 @@ public class PreviewImageActivity extends SherlockFragmentActivity implements Fi getSupportActionBar().setTitle(currentFile.getFileName()); if (!currentFile.isDown()) { requestForDownload(currentFile); + /*} else { + FileFragment fragment = mPreviewImagePagerAdapter.getFragmentAt(mViewPager.getCurrentItem()); + if (fragment instanceof PreviewImageFragment) { + ((PreviewImageFragment)fragment).showError(); + }*/ } } } diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index de0cdee5..fe94f641 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -45,6 +45,7 @@ import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.webkit.MimeTypeMap; import android.widget.ImageView; +import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragment; @@ -77,7 +78,7 @@ import eu.alefzero.webdav.WebdavUtils; */ public class PreviewImageFragment extends SherlockFragment implements FileFragment, OnRemoteOperationListener, - ConfirmationDialogFragment.ConfirmationDialogFragmentListener{ + ConfirmationDialogFragment.ConfirmationDialogFragmentListener { public static final String EXTRA_FILE = "FILE"; public static final String EXTRA_ACCOUNT = "ACCOUNT"; @@ -86,6 +87,8 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag private Account mAccount; private FileDataStorageManager mStorageManager; private ImageView mImageView; + private TextView mMessageView; + public Bitmap mBitmap = null; private Handler mHandler; @@ -94,6 +97,7 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag private static final String TAG = PreviewImageFragment.class.getSimpleName(); private boolean mIgnoreFirstSavedState; + /** * Creates a fragment to preview an image. @@ -147,7 +151,9 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag super.onCreateView(inflater, container, savedInstanceState); mView = inflater.inflate(R.layout.preview_image_fragment, container, false); mImageView = (ImageView)mView.findViewById(R.id.image); - mView.setOnTouchListener((OnTouchListener)getActivity()); // WATCH OUT + mView.setOnTouchListener((OnTouchListener)getActivity()); // WATCH OUT THAT CAST + mMessageView = (TextView)mView.findViewById(R.id.message); + mMessageView.setVisibility(View.GONE); return mView; } @@ -205,7 +211,7 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag public void onStart() { super.onStart(); if (mFile != null) { - BitmapLoader bl = new BitmapLoader(mImageView); + BitmapLoader bl = new BitmapLoader(mImageView, mMessageView); bl.execute(new String[]{mFile.getStoragePath()}); } } @@ -271,6 +277,7 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag @Override public void onResume() { super.onResume(); + Log.e(TAG, "FRAGMENT, ONRESUME"); /* mDownloadFinishReceiver = new DownloadFinishReceiver(); IntentFilter filter = new IntentFilter( @@ -460,6 +467,16 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag * Using a weak reference will avoid memory leaks if the target ImageView is retired from memory before the load finishes. */ private final WeakReference mImageViewRef; + + /** + * Weak reference to the target {@link TextView} where error messages will be written. + * + * Using a weak reference will avoid memory leaks if the target ImageView is retired from memory before the load finishes. + */ + private final WeakReference mMessageViewRef; + + + private Throwable mThrowable; /** @@ -467,8 +484,10 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag * * @param imageView Target {@link ImageView} where the bitmap will be loaded into. */ - public BitmapLoader(ImageView imageView) { + public BitmapLoader(ImageView imageView, TextView messageView) { mImageViewRef = new WeakReference(imageView); + mMessageViewRef = new WeakReference(messageView); + mThrowable = null; } @@ -497,44 +516,46 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag int width = options.outWidth; int height = options.outHeight; int scale = 1; + + /* if (width >= 2048 || height >= 2048) { // try to scale down the image to save memory scale = (int) Math.ceil((Math.ceil(Math.max(height, width) / 2048.))); options.inSampleSize = scale; } + */ + Display display = getActivity().getWindowManager().getDefaultDisplay(); Point size = new Point(); - int screenwidth; + int screenWidth; + int screenHeight; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) { display.getSize(size); - screenwidth = size.x; + screenWidth = size.x; + screenHeight = size.y; } else { - screenwidth = display.getWidth(); + screenWidth = display.getWidth(); + screenHeight = display.getHeight(); } - Log.d(TAG, "image width: " + width + ", screen width: " + screenwidth); - - if (width > screenwidth) { + if (width > screenWidth) { // second try to scale down the image , this time depending upon the screen size; WTF... - scale = (int) Math.ceil((float)width / screenwidth); + scale = (int) Math.ceil((float)width / screenWidth); options.inSampleSize = scale; } + if (height > screenHeight) { + scale = Math.max(scale, (int) Math.ceil((float)height / screenHeight)); + } + // really load the bitmap options.inJustDecodeBounds = false; // the next decodeFile call will be real result = BitmapFactory.decodeFile(storagePath, options); - Log.e(TAG, "loaded width: " + options.outWidth + ", loaded height: " + options.outHeight); + //Log.d(TAG, "Image loaded - width: " + options.outWidth + ", loaded height: " + options.outHeight); - } catch (OutOfMemoryError e) { - result = null; - Log.e(TAG, "Out of memory occured for file with size " + storagePath); - - } catch (NoSuchFieldError e) { - result = null; - Log.e(TAG, "Error from access to unexisting field despite protection " + storagePath); - } catch (Throwable t) { result = null; + mThrowable = t; // error processing is delayed to #onPostExecute(Bitmap) Log.e(TAG, "Unexpected error while creating image preview " + storagePath, t); } return result; @@ -542,11 +563,46 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag @Override protected void onPostExecute(Bitmap result) { - if (result != null && mImageViewRef != null) { + if (mImageViewRef != null && result != null) { final ImageView imageView = mImageViewRef.get(); - imageView.setImageBitmap(result); - mBitmap = result; + if (imageView != null) { + imageView.setImageBitmap(result); + mBitmap = result; + if (mMessageViewRef != null) { + final TextView messageView = mMessageViewRef.get(); + if (messageView != null) { + messageView.setVisibility(View.GONE); + } + } + } // else , silently finish, the fragment was destroyed + + } else if (mMessageViewRef != null && result == null) { + // error + int messageId; + if (mThrowable == null) { + messageId = R.string.preview_image_error_unknown_format; + Log.e(TAG, "File could not be loaded as a bitmap: " + mFile.getStoragePath()); + + } else if (mThrowable instanceof OutOfMemoryError) { + messageId = R.string.preview_image_error_unknown_format; + Log.e(TAG, "Out of memory occured for file " + mFile.getStoragePath(), mThrowable); + + } else if (mThrowable instanceof NoSuchFieldError) { + messageId = R.string.common_error_unknown; + Log.e(TAG, "Error from access to unexisting field despite protection; file " + mFile.getStoragePath(), mThrowable); + + } else { + messageId = R.string.common_error_unknown; + Log.e(TAG, "Unexpected error loading " + mFile.getStoragePath(), mThrowable); + } + final TextView messageView = mMessageViewRef.get(); + if (messageView != null) { + messageView.setText(messageId); + messageView.setVisibility(View.VISIBLE); + } // else , silently finish, the fragment was destroyed + } + } } @@ -561,6 +617,7 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag return (file != null && file.isImage()); } + /** * {@inheritDoc} */ @@ -596,5 +653,5 @@ public class PreviewImageFragment extends SherlockFragment implements FileFrag container.finish(); } - + } -- 2.11.0