From da23e7a006e04dace479d9162e5006942f595a9b Mon Sep 17 00:00:00 2001 From: Adam Koch Date: Thu, 17 Oct 2013 11:31:30 -0400 Subject: [PATCH] Bitmapfun Sample: Update for KitKat and clean up some minor bugs. Change-Id: Iceb1c03a08193dc03747ab7946e9c19cf32ae7c7 --- .../training/bitmapfun/BitmapFun/build.gradle | 6 +- .../BitmapFun/src/main/AndroidManifest.xml | 5 +- .../android/bitmapfun/provider/Images.java | 198 +++++++++--------- .../bitmapfun/ui/ImageGridActivity.java | 6 +- .../bitmapfun/ui/ImageGridFragment.java | 5 +- .../android/bitmapfun/util/ImageCache.java | 62 +++++- .../android/bitmapfun/util/ImageResizer.java | 31 +-- .../example/android/bitmapfun/util/Utils.java | 4 + .../main/res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 4440 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 2741 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 6245 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 11128 bytes .../bitmapfun/local.properties.sample | 2 +- 13 files changed, 186 insertions(+), 133 deletions(-) create mode 100644 samples/training/bitmapfun/BitmapFun/src/main/res/drawable-xxhdpi/ic_launcher.png diff --git a/samples/training/bitmapfun/BitmapFun/build.gradle b/samples/training/bitmapfun/BitmapFun/build.gradle index b12d5ccb2..25d609d91 100644 --- a/samples/training/bitmapfun/BitmapFun/build.gradle +++ b/samples/training/bitmapfun/BitmapFun/build.gradle @@ -13,12 +13,12 @@ repositories { } android { - compileSdkVersion 18 - buildToolsVersion "18.0.1" + compileSdkVersion 19 + buildToolsVersion "18.1.0" defaultConfig { minSdkVersion 7 - targetSdkVersion 18 + targetSdkVersion 19 } } diff --git a/samples/training/bitmapfun/BitmapFun/src/main/AndroidManifest.xml b/samples/training/bitmapfun/BitmapFun/src/main/AndroidManifest.xml index bc1c18057..9ca5cf50c 100644 --- a/samples/training/bitmapfun/BitmapFun/src/main/AndroidManifest.xml +++ b/samples/training/bitmapfun/BitmapFun/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ + android:targetSdkVersion="19" /> @@ -32,7 +32,8 @@ android:description="@string/app_description" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" - android:label="@string/app_name" > + android:label="@string/app_name" + android:allowBackup="false"> > mReusableBitmaps; + private Set> mReusableBitmaps; /** * Create a new ImageCache object using the specified parameters. This should not be @@ -130,9 +133,18 @@ public class ImageCache { Log.d(TAG, "Memory cache created (size = " + mCacheParams.memCacheSize + ")"); } - // If we're running on Honeycomb or newer, then + // If we're running on Honeycomb or newer, create a set of reusable bitmaps that can be + // populated into the inBitmap field of BitmapFactory.Options. Note that the set is + // of SoftReferences which will actually not be very effective due to the garbage + // collector being aggressive clearing Soft/WeakReferences. A better approach + // would be to use a strongly references bitmaps, however this would require some + // balancing of memory usage between this set and the bitmap LruCache. It would also + // require knowledge of the expected size of the bitmaps. From Honeycomb to JellyBean + // the size would need to be precise, from KitKat onward the size would just need to + // be the upper bound (due to changes in how inBitmap can re-use bitmaps). if (Utils.hasHoneycomb()) { - mReusableBitmaps = new HashSet>(); + mReusableBitmaps = + Collections.synchronizedSet(new HashSet>()); } mMemoryCache = new LruCache(mCacheParams.memCacheSize) { @@ -152,7 +164,7 @@ public class ImageCache { if (Utils.hasHoneycomb()) { // We're running on Honeycomb or later, so add the bitmap - // to a SoftRefrence set for possible use with inBitmap later + // to a SoftReference set for possible use with inBitmap later mReusableBitmaps.add(new SoftReference(oldValue.getBitmap())); } } @@ -466,7 +478,7 @@ public class ImageCache { /** * Sets the memory cache size based on a percentage of the max available VM memory. * Eg. setting percent to 0.2 would set the memory cache to one fifth of the available - * memory. Throws {@link IllegalArgumentException} if percent is < 0.05 or > .8. + * memory. Throws {@link IllegalArgumentException} if percent is < 0.01 or > .8. * memCacheSize is stored in kilobytes instead of bytes as this will eventually be passed * to construct a LruCache which takes an int in its constructor. * @@ -477,9 +489,9 @@ public class ImageCache { * @param percent Percent of available app memory to use to size memory cache */ public void setMemCacheSizePercent(float percent) { - if (percent < 0.05f || percent > 0.8f) { + if (percent < 0.01f || percent > 0.8f) { throw new IllegalArgumentException("setMemCacheSizePercent - percent must be " - + "between 0.05 and 0.8 (inclusive)"); + + "between 0.01 and 0.8 (inclusive)"); } memCacheSize = Math.round(percent * Runtime.getRuntime().maxMemory() / 1024); } @@ -493,10 +505,33 @@ public class ImageCache { */ private static boolean canUseForInBitmap( Bitmap candidate, BitmapFactory.Options targetOptions) { - int width = targetOptions.outWidth / targetOptions.inSampleSize; - int height = targetOptions.outHeight / targetOptions.inSampleSize; - return candidate.getWidth() == width && candidate.getHeight() == height; + if (Utils.hasKitKat()) { + int width = targetOptions.outWidth / targetOptions.inSampleSize; + int height = targetOptions.outHeight / targetOptions.inSampleSize; + int byteCount = width * height * getBytesPerPixel(candidate.getConfig()); + return byteCount <= candidate.getAllocationByteCount(); + } + + return candidate.getWidth() == targetOptions.outWidth + && candidate.getHeight() == targetOptions.outHeight + && targetOptions.inSampleSize <= 1; + } + + /** + * Return the byte usage per pixel of a bitmap based on it's configuration. + * @param config The bitmap configuration. + * @return The byte usage per pixel. + */ + private static int getBytesPerPixel(Config config) { + if (config == Config.ARGB_8888) { + return 4; + } else if (config == Config.RGB_565) { + return 2; + } else if (config == Config.ALPHA_8) { + return 1; + } + return 1; } /** @@ -555,9 +590,16 @@ public class ImageCache { public static int getBitmapSize(BitmapDrawable value) { Bitmap bitmap = value.getBitmap(); + // From KitKat onward use getAllocationByteCount() as allocated bytes can potentially be + // larger than bitmap byte count. + if (Utils.hasKitKat()) { + return bitmap.getAllocationByteCount(); + } + if (Utils.hasHoneycombMR1()) { return bitmap.getByteCount(); } + // Pre HC-MR1 return bitmap.getRowBytes() * bitmap.getHeight(); } diff --git a/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/ImageResizer.java b/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/ImageResizer.java index 2a9d152d1..596a991e7 100644 --- a/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/ImageResizer.java +++ b/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/ImageResizer.java @@ -211,6 +211,8 @@ public class ImageResizer extends ImageWorker { Log.d(TAG, "Found bitmap to use for inBitmap"); } options.inBitmap = inBitmap; + } else { + Log.d(TAG, "Did NOT find bitmap to use for inBitmap"); } } } @@ -218,10 +220,8 @@ public class ImageResizer extends ImageWorker { /** * Calculate an inSampleSize for use in a {@link BitmapFactory.Options} object when decoding * bitmaps using the decode* methods from {@link BitmapFactory}. This implementation calculates - * the closest inSampleSize that will result in the final decoded bitmap having a width and - * height equal to or larger than the requested width and height. This implementation does not - * ensure a power of 2 is returned for inSampleSize which can be faster when decoding but - * results in a larger bitmap which isn't as useful for caching purposes. + * the closest inSampleSize that is a power of 2 and will result in the final decoded bitmap + * having a width and height equal to or larger than the requested width and height. * * @param options An options object with out* params already populated (run through a decode* * method with inJustDecodeBounds==true @@ -238,13 +238,15 @@ public class ImageResizer extends ImageWorker { if (height > reqHeight || width > reqWidth) { - // Calculate ratios of height and width to requested height and width - final int heightRatio = Math.round((float) height / (float) reqHeight); - final int widthRatio = Math.round((float) width / (float) reqWidth); + final int halfHeight = height / 2; + final int halfWidth = width / 2; - // Choose the smallest ratio as inSampleSize value, this will guarantee a final image - // with both dimensions larger than or equal to the requested height and width. - inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + // Calculate the largest inSampleSize value that is a power of 2 and keeps both + // height and width larger than the requested height and width. + while ((halfHeight / inSampleSize) > reqHeight + && (halfWidth / inSampleSize) > reqWidth) { + inSampleSize *= 2; + } // This offers some additional logic in case the image has a strange // aspect ratio. For example, a panorama may have a much larger @@ -252,13 +254,14 @@ public class ImageResizer extends ImageWorker { // end up being too large to fit comfortably in memory, so we should // be more aggressive with sample down the image (=larger inSampleSize). - final float totalPixels = width * height; + long totalPixels = width * height / inSampleSize; // Anything more than 2x the requested pixels we'll sample down further - final float totalReqPixelsCap = reqWidth * reqHeight * 2; + final long totalReqPixelsCap = reqWidth * reqHeight * 2; - while (totalPixels / (inSampleSize * inSampleSize) > totalReqPixelsCap) { - inSampleSize++; + while (totalPixels > totalReqPixelsCap) { + inSampleSize *= 2; + totalPixels /= 2; } } return inSampleSize; diff --git a/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/Utils.java b/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/Utils.java index 52a99f9f2..81b856a2f 100644 --- a/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/Utils.java +++ b/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/Utils.java @@ -73,4 +73,8 @@ public class Utils { public static boolean hasJellyBean() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; } + + public static boolean hasKitKat() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + } } diff --git a/samples/training/bitmapfun/BitmapFun/src/main/res/drawable-hdpi/ic_launcher.png b/samples/training/bitmapfun/BitmapFun/src/main/res/drawable-hdpi/ic_launcher.png index 96a442e5b8e9394ccf50bab9988cb2316026245d..75b3c978107062bdb3549adb3f59502fe207b5f9 100644 GIT binary patch literal 4440 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 literal 5237 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 diff --git a/samples/training/bitmapfun/BitmapFun/src/main/res/drawable-xhdpi/ic_launcher.png b/samples/training/bitmapfun/BitmapFun/src/main/res/drawable-xhdpi/ic_launcher.png index 71c6d760f05183ef8a47c614d8d13380c8528499..7c5aeed04f594df10128e79bc9d72d3d948cdfa3 100644 GIT binary patch literal 6245 zcmV-r7@FsaP)^BPf~(5+Fno zqGE8%aaTNvJWvCOhzbHC$_&U3!@dqM^X^wwxBGTY_dowXJ)36QQ~teFbyt1g-Rf3P zlcwsn8bu(jMxS2ya8*Y@4GTdX0d)k_FakCF_&N=!jRbtT=&LblX&F@1DK*@`AH?HJ zOV#eu(i0Q9_BnfkJD@Te@YSldx94OxobiJgc`X~n!Gi~foz?Y>0Jbgx^>*you{}LK zy-6+W`wyZ!B_$<$TC`}FWcKskmTT2I#o15E|y0$xtfVP`AZ{Ao- z`~HLIR+~0$+R;EZMG=sl&IK(*|^S&yjV>&78X5fI@p%(V3x_=*iVD5wKx*Z;9B0#~Y=aXeC58yy3$y8S z7Hj}{qSVyUpaNtKzaayAh7hzjq~VxJ!1HlmLzEeSByH2ZS6qo(+p?2>3#shkF1y3Z zqzl

RT)_^QJG@;z>KSKm% z9%i$e;3Do_!39&-5Ceh?*pOV7d=G3}&xj|a9XJ`H%1C|yXae1mZ^$r$fM@V|tu1tJ z<6W1urrRC2T`Z>G!}eJBGfbQ1@alDVdQq`f1pzh#FU^nvmBBVZqa6e6Nj@Z9gKH(+ z?gMP85e&X=&y6()WhLJ0uuu~Xh8-f4pru=v5-Y6+bR)S;0N1f*MUw%YFy_eoXGk)p z%lztVf(THFIvZ~917Y^UP6=*O1mr*aX|a}KZSSogfRw`g030o`40cfB(MD?sOpVqU zBmG7rjP1hz`Peg8`dMtgH0rvZY2y%LN2G1DuIU4>CEJ=2V=7#;Vjz%aMuY8{Cj!=$ zd}tNGx5VjvL4+pC`V{Q1zvcXR1f2T!<(dGNb`SKV&KVF*8}2=5s!{s3?Wfb&-k8gi2%$)>j?0)fgQPw zh=Iz|LH=4mSnQ9`6q}5GWKM{4Kum%TL&Y4xfbEB%?2Ju_ z$|+@~9`5DO18U7oI1T|}xgaJ$WLuE1!1pF^dkdvUe0e*NYQ_@~&D$I{GMUV8tM9j>D znSdJ4hE~RU00{V#&4#W70gKrO2+*}DDw}qw&h>x^7y1N@Ui6*%eCOem)6s5HF7|pr zG6b+453G`jgk5)%s>l17To4n$i8|?krCIXV2MkG3_TQTe*o;~r_YbYGxgfb1!?vHL zpRYYa1az|+00K-lRQL(UX(y8@tuz7xAV*|J8NgunG)+MRJOXwd)`>26g-jA60e2T= zl39>Rv=}23aB>9<`_KSMz_J}gK)_M^t7(bW2c&b4O+ZIplH_P5g;g;o4FpW=gIA46 z11teyp=Tlzv;(%{&TGR#Cu~%JQ_E#i6xQy`q@Ak?j|u`tE&NU`(+e^cUk!uytdF}S zng2Z2gylMJ*=5Oa$@iBq&uG; zbjLyarks77B0|#HPlU~`D}{h42h4Un(OVN*16njxlLY~=uTegLL2uKro*H^~b2az7 zed<%P#gYtH`sJ~fc6);Dy?hfQ$_JngLS-i4o_}x9KEREFT7;8Ti%q!W&E$dVM7pp9_}Xg~W4@5QVz`!BU1N+aNe zr(Be$2eyKIz{r2Y1o7G0vsnSB|c30-Ox5R0qvN8B(xw*`n3-r0;UQApx$2E!TObp3G_QV zw@|s+^&$cO*QR~y$<;g65qh&CYzt_Cwf(3kBOyL^!N)NI1&@G_HmIfK17rr(-8Yey zP3AfKOz@_`F-;H%kdp6eK@{kG9={im37UGb)qtYITD>{CX;3ds-O;Iq`dNo2f!9)^ zSXfT&ANhQ%+JEeXS0y|YH4=_Znjje+xw#<(3J4gm-9-ez2`3`JHA$}YqwVIn1hjpQ z2;g~uqXo&FM;-WpzgPm67adY}!vxX2nxB-Z9;V69nT=11l=`p>YxW#b<38J>ijGJU z4B8BOCfT^&xeZnGtW5RB`n{?cFWp*`6CRe9s>!6KOu(HVS^}&F`DqJZ;#taFO_1le z#3i5&5#YYBBV&EfnObrJ;ia85gMjJ%j0S*!|0d~z6F;YEwwh*%Nr?ffyzyYM)`V~O z9`&RgJB{mSsDW)yR#&!ftlH-w08wfky$CjIO_5r-^?;YQmU94@5s>odzC-|-OKf+3 zxL$n%Cu~hjm@}3VA6V?sq#4t<^_K4OqM+6wfNmJ(Y{SftO9+7ONrRf+uY*Sbqzm^$ z-ld`h;ASvGe^|Pi5`0G#!q%(FjQzN6BYGLwyxrz*A8gsLrmfnkwh(!2mZUSDa#4G& zt=NVW0ZX?BO%MYfN`{ytNNtHtK&xjz*HMsX(?u?bLs6F;*JoVNvY~p?67U6SfF^(j ziQGGDMyeXX^$#8^p?ShVbs;??DjMI73R=4D>Kg5bIbkLUzuV$!K(0f8_u3%coK2BSjyuVM6MpJPMgu^=a2g!Q>qc*( z{nZjvQ35L3?kn;m(^l?KOZ05lm>~EmNx%})01r$n;ZY_jN-MViGNuV?`3y9`pM;g2 z!8!}-RzqaHo+O>=M$2d%^@gY0p;_$T;m_r~kZiyPExVkp>#t2w}l?`vUj? zn4q%KE+sr{p|pipTI5R&iu05>uUBW7n@0-A#W>Rfq12a{_-jp;=iFtdNY zM*s!~lDd-#dfJ|k17e)EFA@P0D4GIz@KexMY`4uf1aOF%2>e9Xif%nGUK9iZI1$FC zNKUd`t&rDP6F|VMOAG->@nUcw6thkyCJu;k+P**pJo1?#0NTg|+)91?SZjd%n=;?& zhDp0LJ$!vvTmqW@?K3Y5O5|+iHJ30D@Qfe;gF_u;9{*;~#{n@;TM+QDCE#g6z%N0- zwgcWw*i7E|Z;kDrutxX?>9}{_7E=R2fCf}JR~hR|(`4%TzJiZ?=jH?mxaI!}^!=a# zOiUaQbX4L=<+6ZC6HkkVO@ir3$NkGGn-7r;Z&7QafG?@hr;LN32j`SB# zj8hH+U6OPmr39Y4w4)vva_ocWfdHjCpOUQ}rFU_XN&?|INgxe?lG>;u>b|{UulmcX z9eN+y$OH_s1W0gG1t0bIRt5nKa(S8%b{&%5o1|*?080Q(?{B8T@sx?lL_G$WpT|IY z=TW(w4bq2A62UnjKF<=$c_YrPf&fhDu-!~TvY1SeF+JuzQrS-WfJE2#4T<@O+Kpx| z^L;=Pn!qGTKL8W-yd?k`Mhp&sV{?hXIZ1{-wxB10e;@_OFAlO zE4G`ckBc~WR6+3Z-2Ih7fCkD+sFYY~ju1NBWXf%^7&A9vE^lcstI3X<4vsXT#f$v632P=aBqXCIYNK~f}t#-X=2}lG^ZMt^Dzn}r+1FW-_z-s9R zbyhPH)j1TGfCkV2i%cRC*xa~I73cdB0Wba7Xu$VnyPgQ}*AI-AxIl-UGvA!>{Y#|~ zpru=oV5Hp-L0!k|l7K~$uC(~Vn|Iwm6L{$=U~0rc$|gwI8xA4yNE7||(USBLeC12Z z+U})Pca)S%@Vzx>2Yj4AGPFm$RK!U$%=dz#NHAm=Bm=LK({Y$Ka3mv1L)-Eku&k3v zi-O^2v?FGq8DJ)ci3$T=OSX+&JxOq+2!a^!-3a%M=9gy$a}7E=SVrZ3j1h%f*Xfi1Pcw3SjGKIxKS zsSA2V2#~-V2`~E>G*S~J@UksSbFzLw-lzDk-tkOO{mBb#E{NsJkKd)^#Z~#`L;YPi zvQ1Isg-Las37FqIv&YgOFiDmKS+_hbFrTS(zPM=b@0u%514ZO?Y-Im<1Y|xo*Vh0c z$@oqj6A&ih46r*VNR)Drq_9~EBgzFk>^RI91m*w&L{|&k*q^m0Oha%_d_PWVht!_q z|8qr!2*7M4bK$~;L;KC!HpK;vCEEpw!A1wn-+KlBltNy|K1k$Ek|_aACjAgai1Y!T zbOLzMfWc#}3DX$Q1PRIZrQNOeTwR?=1WI3i`Q=-N3>orIs)3JolY23JRN0=kM;zaiJz<~pW#l^+@6FsVF)28Q8Tl4)+D!X>=T9K%J{rdG!rY&DS zXWzbk1;>vcKTyd-3fzu9*nMEilqvsQw{9K!hwnz?>-65+#V!FjZb79Jl~zKJgp=8njYbPdxF&%mxh_=r%-_8Z~Ov z5UOw9Q!Kkdu(E$kTZaxE^7&asMMaw*dg!6w(mf)-Y+Fe~hwa}=Wi^!@R6JJ`X5X`@ z!pT(d#%%eonpM1qY2(I?8`iB`xBH0)4dT(GM@y$on>Kddym{~04wrFS_HntdzWVBt zoSYop?(pHm>bmQ$!&l$8MRW&()M~(h0Y4cza^wRQAz zMYe<>9ialP4hTt&IoL^)Cgl?NtI7PF0x$sNvSrH_10d?;7gX@2@hA<*`{08Q);DU@ zNP~Fj&>?l{rI&V~`Wqr3&@W?C={9-tN~4g3qpyk5d!ASnR8x#em+b{rZqik z?%cVrjvYI8BK7i1D)_#>J8zN$s0aZVEB<|it`9u$z-R*ezp}EjSc8sl+O(Hz^;w{G1rc<|s6d-v}Bg!+gmp**Kp5dtuL{QXlq zGJ8EK%$`CHxdkF9Xdp#V3$DEK$^i+?UX^fD?F78?$}2a}z+YtP0|B#U&6+x6#*AlZ zgkMof7=Bt5DoOyFBf#i1bm-7qh7TWpcXoERCIDs2mMuRgXZ})^ARTejY9-+D#~;t` z-o5+E=FOXTg#88hUw{4e8j}8BQU5-tf>13g@`-DLxV?^usB|YS_*2)eUC%mkTDEE>;I-FYd!T*$_75WLw9!im+5O+W|Ni@L(`eUHNp|3IGyuS2 zdG3sX0|)-}!3Q6Fh)hyCrUG!tWDfsu?X}mAtrqm@A=O5}Q%^nB?(DPAM%bCdG5F%e zi|3CXJ^CT)$8su|qDO_DE*^0SKv;^D%efOLPW)Z}{{1h(tQrJRNPA%I+O?gA4I5T1 z|DIZP5s>!gn{Uphu=6IQ0wDc+_Ut)$#~pXvTToE&ApucHC6J^lM*`y#fZHSKnBTEu z$9^OnPqb{=vLVbO`nG-h_Bj+K-AvaLMPikrB-KIyWmfxk>C)vxnt`Ts*!lYFufH&1 z!h|U_ij`FG9fDK_TNwmk?2V~(88c?g2+I8af&&B6gc9;i{V0REuu@P?aFgmFAe|zM zMb}(&O|LW0Jd^W1TPQm?g2?!k`i6hj54rMGw!HcC=dY*ans(%v36ni9Zz2|UfBdsu zZ7EULGpF(q!)(A_NE?uhLefQl@-g@h;-YJ;HRQm7Lt#SfrG2%8dJu~5WX`t%j zi!a9D{z&2I3)G7>R4S5<%%fEKdWxoCE;I?0KdJ};00PK#!&x|??L`0S;s4fly~{% zm#?S$s+~J`YOp9bR8a!pkaMYYyWoNgCY*NKY3Cv$qKTQJU}57&AAQuZ0vehm{8b+X zHM-)8D^`;9x7)pYw<0HZoc^)U-;e{IOFjIS3NnNh+43m)24d4GrHtsMWYMBU04h-~ zDA99}`8};klO{ju(WA!%`pu+1B0sfp$&w{q=-R%DbTXMXRjmQJv~Y4&>(;GD5ec1W zP;VC&7EY#)VR0g`GL%ebMV&mFKs`h0j2~H`7OYvb=GGVl00)GnUC9sJOEdMK(n88= zy659W0)(Z?GNn~b00wmqmD8yp8@YuFOb`B5(Nw}tmmmE5j2BYLw-*ZO_hWni6uI=O zBP_*-?YdFH{gJo-MhHtq@0+k)RTBWvvBHLBPJ9JpJC*fRlF9cZ>Ubl%h_`*|@0;|7 zNNOFGxTXSmBKQ*gd&-BXU^0dktf-Z?*rZf70q7t?J%Ep23?$J~W3mH6J_q+SpEfaI zp(K+>O7sl9bV&t*gU}fFOf^JKb_}{+br6tJhyK$l*AY;|jMouR!vy?4x+%|Z_27e? P00000NkvXXu0mjf$Q!N? literal 14383 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 diff --git a/samples/training/bitmapfun/BitmapFun/src/main/res/drawable-xxhdpi/ic_launcher.png b/samples/training/bitmapfun/BitmapFun/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91b0f960b2811b942d44da4bee5e9dbab36f189c GIT binary patch literal 11128 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 KMNUMnLSTY7Oa