From f4f7046183f0daedd17703fa16cf9026442bdaee Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Fri, 26 Jun 2009 16:55:54 -0700 Subject: [PATCH] Update spinner's drawables. Clean up resources, pave the way for new animation. --- core/java/android/app/SearchDialog.java | 11 +- core/res/res/drawable/progress.xml | 40 --- .../drawable/progress_circular_background.png | Bin 2044 -> 0 bytes .../progress_circular_background_small.png | Bin 484 -> 0 bytes .../progress_circular_indeterminate.png | Bin 2371 -> 0 bytes .../res/drawable/progress_indeterminate.xml | 32 -- core/res/res/drawable/progress_particle.png | Bin 3058 -> 0 bytes core/res/res/drawable/search_spinner.xml | 25 +- .../res/drawable/search_spinner_anim10.png | Bin 529 -> 0 bytes .../res/drawable/search_spinner_anim11.png | Bin 525 -> 0 bytes .../res/drawable/search_spinner_anim12.png | Bin 527 -> 0 bytes .../res/res/drawable/search_spinner_anim2.png | Bin 525 -> 0 bytes .../res/res/drawable/search_spinner_anim3.png | Bin 522 -> 0 bytes .../res/res/drawable/search_spinner_anim4.png | Bin 519 -> 0 bytes .../res/res/drawable/search_spinner_anim5.png | Bin 521 -> 0 bytes .../res/res/drawable/search_spinner_anim6.png | Bin 509 -> 0 bytes .../res/res/drawable/search_spinner_anim7.png | Bin 517 -> 0 bytes .../res/res/drawable/search_spinner_anim8.png | Bin 533 -> 0 bytes .../res/res/drawable/search_spinner_anim9.png | Bin 534 -> 0 bytes ...spinner_anim1.png => spinner_black_20.png} | Bin core/res/res/values/attrs.xml | 9 + .../drawable/AnimatedRotateDrawable.java | 315 ++++++++++++++++++ .../android/graphics/drawable/Drawable.java | 2 + 23 files changed, 338 insertions(+), 96 deletions(-) delete mode 100644 core/res/res/drawable/progress.xml delete mode 100644 core/res/res/drawable/progress_circular_background.png delete mode 100644 core/res/res/drawable/progress_circular_background_small.png delete mode 100644 core/res/res/drawable/progress_circular_indeterminate.png delete mode 100644 core/res/res/drawable/progress_indeterminate.xml delete mode 100644 core/res/res/drawable/progress_particle.png delete mode 100755 core/res/res/drawable/search_spinner_anim10.png delete mode 100755 core/res/res/drawable/search_spinner_anim11.png delete mode 100755 core/res/res/drawable/search_spinner_anim12.png delete mode 100755 core/res/res/drawable/search_spinner_anim2.png delete mode 100755 core/res/res/drawable/search_spinner_anim3.png delete mode 100755 core/res/res/drawable/search_spinner_anim4.png delete mode 100755 core/res/res/drawable/search_spinner_anim5.png delete mode 100755 core/res/res/drawable/search_spinner_anim6.png delete mode 100755 core/res/res/drawable/search_spinner_anim7.png delete mode 100755 core/res/res/drawable/search_spinner_anim8.png delete mode 100755 core/res/res/drawable/search_spinner_anim9.png rename core/res/res/drawable/{search_spinner_anim1.png => spinner_black_20.png} (100%) create mode 100644 graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java index 6ddf50f0d4a55..6fe4896179ab8 100644 --- a/core/java/android/app/SearchDialog.java +++ b/core/java/android/app/SearchDialog.java @@ -33,7 +33,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.content.res.Resources; import android.database.Cursor; -import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; @@ -107,7 +106,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS private Button mGoButton; private ImageButton mVoiceButton; private View mSearchPlate; - private AnimationDrawable mWorkingSpinner; + private Drawable mWorkingSpinner; // interaction with searchable application private SearchableInfo mSearchable; @@ -188,7 +187,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mGoButton = (Button) findViewById(com.android.internal.R.id.search_go_btn); mVoiceButton = (ImageButton) findViewById(com.android.internal.R.id.search_voice_btn); mSearchPlate = findViewById(com.android.internal.R.id.search_plate); - mWorkingSpinner = (AnimationDrawable) getContext().getResources(). + mWorkingSpinner = getContext().getResources(). getDrawable(com.android.internal.R.drawable.search_spinner); // attach listeners @@ -423,11 +422,11 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS if (working) { mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds( null, null, mWorkingSpinner, null); - mWorkingSpinner.start(); +// mWorkingSpinner.start(); } else { mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds( null, null, null, null); - mWorkingSpinner.stop(); +// mWorkingSpinner.stop(); } } @@ -601,7 +600,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mSearchPlate.getPaddingBottom()); } else { PackageManager pm = getContext().getPackageManager(); - Drawable icon = null; + Drawable icon; try { ActivityInfo info = pm.getActivityInfo(mLaunchComponent, 0); icon = pm.getApplicationIcon(info.applicationInfo); diff --git a/core/res/res/drawable/progress.xml b/core/res/res/drawable/progress.xml deleted file mode 100644 index d2705209be75f..0000000000000 --- a/core/res/res/drawable/progress.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - diff --git a/core/res/res/drawable/progress_circular_background.png b/core/res/res/drawable/progress_circular_background.png deleted file mode 100644 index 7c637fd602d9ccebe8ba3d86f3f27b2abe103a0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2044 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq zxP?HN@zUM8KR`8tC9V-A5xzcF$@#f@i7EL>sd^Q;1q?R!6$OdO*{LN8NvY|XdA3Rl z3JOXJnJKnP;ikR@z6H*y8JQkcMXAA6ej&+K*~ykEO7?bKHWgMt&AF*1i3%0DIeEoa z6}C!XGp&GZkg&dz0$52&wylyQ$TEcp-v9;Y{GwC^6Fo!SWCLRp1rswpBXc85b2A-< z;KULIuf#kBBXb2K0|OvoWMyb*Wnu_)3>YZcaRF(YqLehNAQv~Noj{(gQbtKhft9{~ zd3m{Bxv^e;QM$gNrKP35fswwEkuFe$ZgFK^Nn(X=Ua>O75STeGsl~}fnFS@8`FRQ; za}$&DOG|8(lt3220n~Ge1#pYcSYnr%o0y)eUyzq>qmK~8>pqC9fyn}x zEcM~(66SPxRMLcj2zQzo4>6RMmdu~6um@OTh=K|SaH0iehmg$NR0eZ>LnD0y^Q%WQ zVt@){KnjBM(@M${i&7b|B$@Nsp%Z zPed=^y)Mb@{QLL8KNSKD<%02j8QWC!cLdElz|Hk6FrnwoJaN<8@(S0=REyZ=9GK(4 zP;>O{YyLF`ZxeMK?4sTnq;c7>UCQCJar9Yzl)-{6jjuNSfT{q~?o<0@AD9=UzTuv} zeuCzGk>g?0#0(o8eOAVr9gmRD;Z)b?zu0lEk@1@h+aCw+iy?d~r>;CY&+&bI@*SUj zT+Cm>ZkT%LtUkDO(_a6Zzu6*LO(e8#|DGZ%^<}naYQsf=sGG5ycb(&WQ$Q1_!Pf9e6SIHwk14iB2exhs?zsIhUo`1U^`))d ztPV{R&D4t%QnL(=4v73^6Jn}uXFPqu{r^|tgjuX6+Z)-v7;RI;<+Xl`7Php^h^k>( zXT)SbafQ!pr!yWs7u-`BKX92p4Q~0NqioB}FYgZnJjL*Y7q#D%D1fvuEyfz7y75`e;fFj5rKi>?2>-tG@BPE`Qkow)Et7m+mlW*G5>UGO zYew06DV_;hd$pW$if$%LD+*qIv+4MOe_6F3m1YT?NS2=YV)r-6O@DTsWwG2DcYFEd dOO=0EC(K@c;7*RF3^1=Tc)I$ztaD0e0ssZ(s9OL4 diff --git a/core/res/res/drawable/progress_circular_background_small.png b/core/res/res/drawable/progress_circular_background_small.png deleted file mode 100644 index 6b8ba9b4390697c706251447167aa1c443b6c568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VOR^Fxq;$IEGmCF1@N4bT~kO?LmJDn=5~S zjcej9=73fvp7I6r~lh zq+b=bFqUnYyF*64;%IS6hVlb8i)f>j&V92}{`H2rns|lpKIn5vW=W}(n)>G-Jm+kd%=rtM&jyHtC1ORtT# zGp~{~`=3vz(-`efTv%&)p~d6!*(=Z2aZXIL<~~uc7#y;^Yem=Vj88nD9~>;;J?vqe zpLqGaSNWx=>8FETcZU{Uzj7nL>zH2eZ_Q0{3(gkCNWFW!OKn!E;h`lmeDk}`-}$@v zrt!PTxn{ySn#+#oe`r`;6g;;*c#rz!Wiw|yX6iqkVzSX&Mr+mmt-rWuXfONXUGjq4 Y_MZ8(nT#u^0t1}E)78&qol`;+0PDHKrT_o{ diff --git a/core/res/res/drawable/progress_circular_indeterminate.png b/core/res/res/drawable/progress_circular_indeterminate.png deleted file mode 100644 index 125a264ca7d0cfdcecbba2f4aa8a805eb4a67369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2371 zcmcIkdstKF89yONQYZo{7M0>@gdrfDTnK>}ppbxxmZ%WHv``4i2}DRvNP zq84FO7%LYkh@zAt7v*A@;B1GN!I(u9q81917Fr(WWP&>ZirQz-_LtvtzU%Y*z3=<| zzW2Pj`?$L-%{Q9^0AR^svqI6CXzX}1bc`^0mV-{F%0LbekG3?t=qS2>OU~vi0l;FN zv19rlq(4V7Hmab5s)HdP(1nQ9Lm)z8VGoT|4lw*Ra)B@bR)Mi_oJ8hJ06~xdN<_Yd z2x*+jM46JV@g*$Tq@!!&F+>2D zAgTmkLV(d3craui$V3z{=;=Xn7ZNF+pr@AynMU@ZdF=qh1S)X1Kn9X&Ael%+2Qr;R zqI;6iV3r!e&m5f@3Xzx|$_ifbiSB#}@hX*^4nbF(5hvW$UqP2Oa&}ZAqpOXB>F91KUkuG)rcZN2{OYd3?uV3&`Yl``7leMg8hto zxT7D5%p-ZxiDWvF_~9%3WzetaA&5vK*1k@s@<=o~l}0CeuFzirtfme6Wm{u27?Q@)YKOWogy`DLST(nCkkS$Z?yKFIER1~R?t{)3+S z*zo;*0Rgdh)>y^fDPnsNG}gsB+TPDQG&3OH1|7%!1&cYIEbHz)Yw5vWdAVClCImyD zP28GdIGj7zex+4hdsX}Zm*>)wdagXW^T6OV?*gaFs$>&z(n}YoQ|cudTAUql_h#b6 z^pmm6`JI;@IZa9o2V&OaY_O5Ii=2DprXRXKFTsB5km$xarEArl%EV+}``VZF4j35>{dgP9_<`3|Ta{$Z4~I0ejOgo$hyd|M5zlC0hz`5MZmx z6YqgwL3&p9BrGZ9ZK>L*tG3eZ*&t>jd)Z80dDnEq3AtN8H` z#_Hg>K|X&s`YP`Jb@$rrl3RxY?ajf-PYhMG_eDG2?*X=1H5wY$eAd2rPl`M*%{lu8 z-#QHA7-c$AJ)w0?&fh&AlAit1Zz3{tbkq!Fk$`RKOZ@h`kTg5iI(;p6T6?X|xp)5! zotyrY`0#m|>tA^T;ErY$=SsmI969<=TKA(U_oggZf&f&=5p42W?k=0uCk0+(9$>cy)3-; zyd`TbC@K2c!Zm%;b@^BDIWS{9Q??mj=IGbjQN*1VyGUSXkmJzfWES{ck8Y+*~ z!Fjyys@wb0eFLMLZLx_4g7t>DVzcLmc{Qcm&A#0mdHbD6O1po?&Sy=BZfD!YFy<}_ z>-m6|#!k`qEtXvULM#c|IGFM0fKSPJ-#Ex?{PP!F%-VJhrP+R0xJ@0wBNsr`?oL#Ern1c{kNvw*Cji{;(>pc_Ap=gxKVtv=iT*=DImSKl^US;m|o+64eA4 zeN=#(bvc^j3gm-_*t#9DL2?XtJTBda%W6`l|~kUr4{{y5sue*?3HA z!I9CgF*WpEKLSk3mYdf!=HOFb>E4g~i`rlc(BpJ`H=|pflvdbj9lOM;}3?f`fdBK zr~0@hC~nY_ZRsDJml*wY+d`MCZCaDh+v$T{B~j+QKd6U1d* I42;S85Bfwn+a diff --git a/core/res/res/drawable/progress_indeterminate.xml b/core/res/res/drawable/progress_indeterminate.xml deleted file mode 100644 index 1bf715e51269c..0000000000000 --- a/core/res/res/drawable/progress_indeterminate.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - diff --git a/core/res/res/drawable/progress_particle.png b/core/res/res/drawable/progress_particle.png deleted file mode 100644 index 91601086918678421ead6276b506514263235ea0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3058 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 - - - - - - - - - - - - - - - + diff --git a/core/res/res/drawable/search_spinner_anim10.png b/core/res/res/drawable/search_spinner_anim10.png deleted file mode 100755 index 9611d9733df0b9012a3f48561193e3fea66a0201..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)}iIF2o^ds1awNLO>bPLFkca5CjxrD|Qm|#(5h}Rt9WF8qH_NZ)awA$8MHo zj!mxX)**bX#n9Kq#U;41H~0eR3G|8mtycgRLIl(kh*ZG2oN_aX38BZ3QKqu0Szs*# zMrueV%1-Dr6j<>yKzBwhY!ty9S%9g<8gL}vFp-6l^US0i1Pma}W)b`Jsj7&%Hf8J* z^rmD4dnjK@Pgbp62TlnxV9M36sfHK!^$)UReM!??lLk44Z(K6NI@^`^SK1>bpMxL4 z9dHlM*9sZh$@l_zq1FZPv?Ab&KKUyBDn)W_B9<#<_x^$LWy%$44rL9-7WoFgmy+dr zd@1uo@!&jwajfFxPM(#_E@XC1ZZMP{K3GBh3gu2MJE#)shc7;fFbkge=yR1u&3^3m+%hah;5@&ZUNiCC2Wtg zuwh?WmpHC3PtUwhfjgkh5ys~NC-gmA5n>-ZM7Kw_2nm^!!_y#0u`qUJZ6e%JFAqpBExyw7uoW^Kzf|Nw8G+OW49`D-Tb<^q8 zg@Eh==NdPF9ibs#1t`qho47!tD7qq<#t%?^prq*`dyatI8J z&2iD#73`_bCB(!TPP@afY37d@RRBxa$DY)ZCL+6lI)&cGf*WXmkN2?0(C_BpOo2== z_X)d>aTz*d`Uy!$ru8QzBdPmCFgNlCcrufIk0%`md$!!-5(jpPVLC;*FErtMS%eMy z5`CfketA8-tZSeHw5Z|ySRz8FZ&cLRDki#v1A)Z1ZaG=EFCV*qmPD1%QgodaIKFJk z{!!LoYzl4odaFJP|KXnQ&kM;P7mTi^=*l{v%R77v7WI}$cM{lxSm`~>@e2Ei6##4~ zrI|D}S7+(z4JcWjvdXE21taM8oN`L_HT(lq{5MgVvYy9m61h(e)1S_+Q4LR%*Jc#i{#R0p?9v0ZwqNoszyPO$+y1x) R8NdJl002ovPDHLkV1h3I>8}6) diff --git a/core/res/res/drawable/search_spinner_anim2.png b/core/res/res/drawable/search_spinner_anim2.png deleted file mode 100755 index 05d58e00372dc95f03f68f5f07e859a054b30bed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP){&G2Pxc`8wEhkd&+-}Jr~&91bZ4H0c$~QLDms)B|fIx zhyDzCrVhS@VA=!t&Y>@3U84(}@KXmLs#Bj3c<&030t@uQls8OV-4!R>gV^)gFjXjP z!jG`M7rbF4PijKOz9~~)7sEIhOWcs43lLS|IFe$6AlLbR9UapC#(ov`t}`7F8S_!-9aTx_*4v6-igqtVFstb{u_Q)B99z`T_k_CV+<} zHhp<}%xEUDPNs#Wnnn^gVsk(vGfoZYBY7I30gaF*!31>5z4M<#_Vbq|SkuhrL^aEa zoT!+Z2K)66#gXO!&S%v;t<=Q3$W|Gk2~OoK$5P)|xvOGJ*nqq-{SsgR3JSo$x7SEv P00000NkvXXu0mjfUsU2$ diff --git a/core/res/res/drawable/search_spinner_anim3.png b/core/res/res/drawable/search_spinner_anim3.png deleted file mode 100755 index 69fa9c1e47de76ad5db60fcdbcc87afb3ef211d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>igP)@8p$sMEH9 ztN|y$q3mPe5;&smpv(Y^=Bph1TTnny8OipH>x?Z||2wEDvYN4X+@wtBSY;$6@O>4m zkc6DyEpUgt7q+|%d;&wRaE?k;Xp3Q|QAnSRs))NmIhhk->3J0rR+##Bg|gDKE$1D| zpy(Wx7yDwE$N4pMvAr7Uoink1-B4HAU*`BFdminHY&inFg<8jz)xoS1+fj-0rU*x0kr)qASPp& zjtNBsF+Ra}jn7OEe*n5Ki9uluH>&`&Y60)D=LUOEe8AVH$cz-R;1$+?Yz%(}duLeO z!jSd|b64Xv|OV_Jj#-cn?cB@ckxBII$ zCDhGYB;yq5nsuBQ)&$&C5?+#q=vtXC!MMD35*BGXmnzdtS8rVnOUm>`lZ@u(nzmJ{ zS#g&!NHCG}aS)h)l6b%QV64f1(}yF02LfdyQ~Njs0*eh;pkha+PLX1MO`BkPr7F*1 z>c3P1^x_ZyV!Z|XmZ7rb|A6%0^$TEq?c)(CmaqX;XZBNo0RYe@$GifFK|cTh002ov JPDHLkV1l!x+yMXp diff --git a/core/res/res/drawable/search_spinner_anim5.png b/core/res/res/drawable/search_spinner_anim5.png deleted file mode 100755 index f0c7101c0296b3c126590f59d88f5b5a8baff4e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)GB)-UEq|hhXFdn1O+z5)4QMp+egv1R6f4UnJ`qq^oM_lh5a~&p$cG z&9clf$#vZ-SO8swbxXFW!dCW~b_INMNi8!_yaI)oy`Z4)e$5{DYv;VW$VuTT4t&ir&o7H0 z|AG(I#eJ|9AcpP{@(I>mmgQC~r2(7j)xO>nve)*-qcKiV3R>IPWSIh`$BFT04Da$2OlM9R|b z&azF}1v>@qfd|+PTt2miIww&MEgfEf9jLAA3RBfIT_EFuA>VmYGu#w0(u7a1$%c*0 znnLF>qbYQke5S|1jil^weC1<{YjL(sH2E~wiK?lm&6)7LAI3ZkIsXb8k+1$E3r#qs z=D$NKBHbY4t()^PGS1J&m*I4bNMrs2q`tmV2dwc}npyVE{s}Mu4kF1dAUPHA00000 LNkvXXu0mjf#=+sP diff --git a/core/res/res/drawable/search_spinner_anim6.png b/core/res/res/drawable/search_spinner_anim6.png deleted file mode 100755 index 99d1d4e71c8be19e25376d242055d85c07ecd704..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV(r*UxA%|y2@5O1*2W)D8~p+?8e%S9&g6U#-oa#Z!Ui08%=o0>|sGGC$M4`=+ycA4?l&`vY8Q(G4{cFRZX0O|sGL+nazdJ5dL% zm{|CkKw04x*mwd49*Kbm;2BsLm|?B!UG#l$U`st?#AtP8Ba?bx6NEQW}&&DaI4mH|VHx{0Q&r^LThVt@ zS|S-iPbE@%vTdEZ@Epj1DbuH%6k2{g&z)@FP|`HdWI)bg`*O^%&vw=QmG(%y9J*12D98MEZll>LvACnDP}C36Ku+z!Mk_+1!rbDyIV zD?iC{<_LHRv8PNAJ(j9z)uH0KrN0LC+iAurGE>3{ki$~@O=52s;zFhZdv_euWAL+- z9PlHTHltV%x*n&9O~0mo13m}u6Wk-HWcsxBJyc%}J)3g-C*VWsBHzFX^#n0f#NPk) z4s)^wOq6~^Ktqojtj^lu7jVmY_4uT&U^~P51?#CD`y;>rH>b#^_5~e<00000NkvXX Hu0mjfY`Nw5 diff --git a/core/res/res/drawable/search_spinner_anim8.png b/core/res/res/drawable/search_spinner_anim8.png deleted file mode 100755 index 408d7238032a59a550c6b1e63a150cf752f09453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y#VP)`@)Pz7Q^ zLSpQK5Hn(BX5bh22`2u84J79B1#B?F(g6e`2-?ylO`+krc~_ZJDy0ZZulCvJ=kwj= z>gIXw*y6fw4Jtq^f!!1rLvZD9@P)85*xz=pZxKmi0|+_JBoSEPlo5+X0@w*i2b#mP z3WSD?QWp|6&gh%Y2Wg{}Py(nH!yJ|nYG}ftQC-Y@i~R&E5Y~#_8M@G@sqWxb*KZNhuAeg z(+%K7S~kyD%(pHk**^V;7+*pkb9@2p0-GdvNSZ=FP9KN7cx8p`NRf%$1KWf{{S34? zZXrijdQ*B25x9bCE7yZc)`UjxfZJbNGUG2m_HPfdHtaL?=*pEkg-_bBu+#V;CY$V#+OXl$)Z!W?-d{mrd-c~T6peWe<3$Els4^eQX~`7goZzDNKW+!C`dK^exwuHU*$V$2sgnRBD6w!OJ;g*1#L!72YU& z_dl%w;p{So@e&HoT! Y02;f*9kog}-v9sr07*qoM6N<$f`yp!t^fc4 diff --git a/core/res/res/drawable/search_spinner_anim1.png b/core/res/res/drawable/spinner_black_20.png similarity index 100% rename from core/res/res/drawable/search_spinner_anim1.png rename to core/res/res/drawable/spinner_black_20.png diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index e978ef50e15e7..d0701070e3564 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2327,6 +2327,15 @@ + + + + + + + + + diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java new file mode 100644 index 0000000000000..08d295d1820e5 --- /dev/null +++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.graphics.drawable; + +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.ColorFilter; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.util.Log; +import android.os.SystemClock; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; + +import com.android.internal.R; + +/** + * @hide + */ +public class AnimatedRotateDrawable extends Drawable implements Drawable.Callback, Runnable { + private AnimatedRotateState mState; + private boolean mMutated; + private float mCurrentDegrees; + private float mIncrement; + + public AnimatedRotateDrawable() { + this(null); + } + + private AnimatedRotateDrawable(AnimatedRotateState rotateState) { + mState = new AnimatedRotateState(rotateState, this); + init(); + } + + private void init() { + final AnimatedRotateState state = mState; + mIncrement = 360.0f / (float) state.mFramesCount; + final Drawable drawable = state.mDrawable; + if (drawable != null) { + drawable.setFilterBitmap(true); + if (drawable instanceof BitmapDrawable) { + ((BitmapDrawable) drawable).setAntiAlias(true); + } + } + } + + public void draw(Canvas canvas) { + int saveCount = canvas.save(); + + final AnimatedRotateState st = mState; + final Drawable drawable = st.mDrawable; + final Rect bounds = drawable.getBounds(); + + int w = bounds.right - bounds.left; + int h = bounds.bottom - bounds.top; + + float px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX; + float py = st.mPivotYRel ? (h * st.mPivotY) : st.mPivotY; + + canvas.rotate(mCurrentDegrees, px, py); + + drawable.draw(canvas); + + canvas.restoreToCount(saveCount); + + nextFrame(); + } + + private void nextFrame() { + unscheduleSelf(this); + scheduleSelf(this, SystemClock.uptimeMillis() + mState.mFrameDuration); + } + + public void run() { + // TODO: This should be computed in draw(Canvas), based on the amount + // of time since the last frame drawn + mCurrentDegrees += mIncrement; + if (mCurrentDegrees > (360.0f - mIncrement)) { + mCurrentDegrees = 0.0f; + } + nextFrame(); + invalidateSelf(); + } + + @Override + public boolean setVisible(boolean visible, boolean restart) { + mState.mDrawable.setVisible(visible, restart); + boolean changed = super.setVisible(visible, restart); + if (visible) { + if (changed || restart) { + mCurrentDegrees = 0.0f; + nextFrame(); + } + } else { + unscheduleSelf(this); + } + return changed; + } + + /** + * Returns the drawable rotated by this RotateDrawable. + */ + public Drawable getDrawable() { + return mState.mDrawable; + } + + @Override + public int getChangingConfigurations() { + return super.getChangingConfigurations() + | mState.mChangingConfigurations + | mState.mDrawable.getChangingConfigurations(); + } + + public void setAlpha(int alpha) { + mState.mDrawable.setAlpha(alpha); + } + + public void setColorFilter(ColorFilter cf) { + mState.mDrawable.setColorFilter(cf); + } + + public int getOpacity() { + return mState.mDrawable.getOpacity(); + } + + public void invalidateDrawable(Drawable who) { + if (mCallback != null) { + mCallback.invalidateDrawable(this); + } + } + + public void scheduleDrawable(Drawable who, Runnable what, long when) { + if (mCallback != null) { + mCallback.scheduleDrawable(this, what, when); + } + } + + public void unscheduleDrawable(Drawable who, Runnable what) { + if (mCallback != null) { + mCallback.unscheduleDrawable(this, what); + } + } + + @Override + public boolean getPadding(Rect padding) { + return mState.mDrawable.getPadding(padding); + } + + @Override + public boolean isStateful() { + return mState.mDrawable.isStateful(); + } + + @Override + protected void onBoundsChange(Rect bounds) { + mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom); + } + + @Override + public int getIntrinsicWidth() { + return mState.mDrawable.getIntrinsicWidth(); + } + + @Override + public int getIntrinsicHeight() { + return mState.mDrawable.getIntrinsicHeight(); + } + + @Override + public ConstantState getConstantState() { + if (mState.canConstantState()) { + mState.mChangingConfigurations = super.getChangingConfigurations(); + return mState; + } + return null; + } + + @Override + public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) + throws XmlPullParserException, IOException { + + final TypedArray a = r.obtainAttributes(attrs, R.styleable.AnimatedRotateDrawable); + + super.inflateWithAttributes(r, parser, a, R.styleable.AnimatedRotateDrawable_visible); + + TypedValue tv = a.peekValue(R.styleable.AnimatedRotateDrawable_pivotX); + final boolean pivotXRel = tv.type == TypedValue.TYPE_FRACTION; + final float pivotX = pivotXRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat(); + + tv = a.peekValue(R.styleable.AnimatedRotateDrawable_pivotY); + final boolean pivotYRel = tv.type == TypedValue.TYPE_FRACTION; + final float pivotY = pivotYRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat(); + + final int framesCount = a.getInt(R.styleable.AnimatedRotateDrawable_framesCount, 12); + final int frameDuration = a.getInt(R.styleable.AnimatedRotateDrawable_frameDuration, 150); + + final int res = a.getResourceId(R.styleable.AnimatedRotateDrawable_drawable, 0); + Drawable drawable = null; + if (res > 0) { + drawable = r.getDrawable(res); + } + + a.recycle(); + + int outerDepth = parser.getDepth(); + int type; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && + (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { + + if (type != XmlPullParser.START_TAG) { + continue; + } + + if ((drawable = Drawable.createFromXmlInner(r, parser, attrs)) == null) { + Log.w("drawable", "Bad element under : " + + parser .getName()); + } + } + + if (drawable == null) { + Log.w("drawable", "No drawable specified for "); + } + + final AnimatedRotateState rotateState = mState; + rotateState.mDrawable = drawable; + rotateState.mPivotXRel = pivotXRel; + rotateState.mPivotX = pivotX; + rotateState.mPivotYRel = pivotYRel; + rotateState.mPivotY = pivotY; + rotateState.mFramesCount = framesCount; + rotateState.mFrameDuration = frameDuration; + + init(); + + if (drawable != null) { + drawable.setCallback(this); + } + } + + @Override + public Drawable mutate() { + if (!mMutated && super.mutate() == this) { + mState.mDrawable.mutate(); + mMutated = true; + } + return this; + } + + final static class AnimatedRotateState extends Drawable.ConstantState { + Drawable mDrawable; + + int mChangingConfigurations; + + boolean mPivotXRel; + float mPivotX; + boolean mPivotYRel; + float mPivotY; + int mFrameDuration; + int mFramesCount; + + private boolean mCanConstantState; + private boolean mCheckedConstantState; + + public AnimatedRotateState(AnimatedRotateState source, AnimatedRotateDrawable owner) { + if (source != null) { + mDrawable = source.mDrawable.getConstantState().newDrawable(); + mDrawable.setCallback(owner); + mPivotXRel = source.mPivotXRel; + mPivotX = source.mPivotX; + mPivotYRel = source.mPivotYRel; + mPivotY = source.mPivotY; + mFramesCount = source.mFramesCount; + mFrameDuration = source.mFrameDuration; + mCanConstantState = mCheckedConstantState = true; + } + } + + @Override + public Drawable newDrawable() { + return new AnimatedRotateDrawable(this); + } + + @Override + public int getChangingConfigurations() { + return mChangingConfigurations; + } + + public boolean canConstantState() { + if (!mCheckedConstantState) { + mCanConstantState = mDrawable.getConstantState() != null; + mCheckedConstantState = true; + } + + return mCanConstantState; + } + } +} diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index f0d49f5b9ac35..910e111e0947c 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -745,6 +745,8 @@ public abstract class Drawable { drawable = new ClipDrawable(); } else if (name.equals("rotate")) { drawable = new RotateDrawable(); + } else if (name.equals("animated-rotate")) { + drawable = new AnimatedRotateDrawable(); } else if (name.equals("animation-list")) { drawable = new AnimationDrawable(); } else if (name.equals("inset")) {