From c567acb6c32cdc3a9cf40b30c6716ab8bc5dd614 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Mon, 31 Aug 2009 14:34:43 -0700 Subject: [PATCH] Add the all apps button. --- res/drawable-hdpi/all_apps_button.png | Bin 0 -> 8371 bytes res/drawable-hdpi/all_apps_button_pow2.png | Bin 0 -> 8709 bytes res/layout-port/launcher.xml | 23 ++- res/raw/rollo.c | 37 +++-- res/values/dimens.xml | 1 + src/com/android/launcher2/AllAppsView.java | 174 +++++++++++++++------ src/com/android/launcher2/Launcher.java | 4 +- src/com/android/launcher2/Utilities.java | 1 + 8 files changed, 171 insertions(+), 69 deletions(-) create mode 100644 res/drawable-hdpi/all_apps_button.png create mode 100644 res/drawable-hdpi/all_apps_button_pow2.png diff --git a/res/drawable-hdpi/all_apps_button.png b/res/drawable-hdpi/all_apps_button.png new file mode 100644 index 0000000000000000000000000000000000000000..945bf9314ad6f357611398164ed028524b6bf0f6 GIT binary patch literal 8371 zcmWldWk6J05P;9pxwLd6ARrymunPiGQqo9Cmw=?;(hEpSOR029w@WvObV;WIN+b1n zKh8b>?wOu%Ci1z45+NQ99sqz)MOi`n{(k=d!NI!!#*!SB-(R?H%7z{Q;FJA-ARyx- z6##ge_Hg*~=XS21t{!%-ZcHk0IFp;ZtBt+WD*$}vvvh2Ab#@;}pZ`38sUi^{R9&?x zaG11V(FpPcb}nXI;%7+ayg3T34iZI04BGx&BzkNt;yr~H4?z^(EcOQTr`V9s$f&`q zRsYY9)2-)QBe!)kGTUXxSv6zWC>(+mWg#sQ1VJ&3fn+75ue*13gI6vHkIfAbz(t^x6gLYByB$D$Ch&0pN<92DLxAxIW(r7d0$?J0g;W4`lAvttMU)~i z;0NS3s@>vX_A%gB(YH|sRSf_&N{n9(a0mdu7BcJ+!0-p={j97$AT%A2KRwcy`paEG zyv=oQsq|{8CN^=!AY+`zud(&@c^NoIRVca1MJ>=QGURwWebcE0gM^7zj)wurO`y2f z_V~tU6k0JlDjHi4effCr8`d3*rRDnV=2)ql9004Hf#bJ4d^I!(Ni2l(?Wcza7Ok)9y#BG<|F%)gi*K5n+uYcgebx;#wiwh8xV7zkiPFDux(t-MK0jS) zUt{#Y=d zB@&kSsORC2JL|P&o-1^jWf4&2AOrDFcwA&^g?^^WL2TfOS~~~esKvEok`o6VVHdJG z=6!c4d!v;55Fl(+5?=#grohIlJ6I#zhXa5@ZV*?MJncyb6%PuFt^;$i1OM7wG!(|x z-3cRx;aMZ-+|3`A1;aSQN2=(#%=sqe=!H>QcHv2GP~J|xMyRwK(LW2E><-S>AY2Uj zejG9j=6NK8LB-rg?Q*C#x>JIveHvwTdMMxjg zmXkV@3Y*H7+MB8}O|5`>BAU8SmtRcaSK4+uQM#+10arcOTZ)81yyR!e?8&rTe7eOY z1tmXA@b!-MhIHeK&2$1Pp6UtdtQX@>rj+WHWIg|-L#tz3ELjv$Vq4^@EBhtT@Fo(= zuuH8=6aGaj_v_2`)?OxjE9x2_9%e_v((pGyBHip?N9NvoakZq~(6>ZOmlWrT!-bv+ z>DOo28Epg1J&1+Hc{^nA6 zke1zUhR9ZPE&S=*w*8MTfbT~4#`$02sS<$!Rt*6g)&jvOl~j+&YgZ|HzP^ROT5!`Y zIe5NBvPJ4@XhPGt)aR+EF;9u!+xMERv#mS#I`@8N$6{w@S5@CrKgiHlZz_0HAgLy) z);BUd@@Zr`T_jUlU`B8|b31b;bGgCX$j6AMzNo(Ol}h!7QGww>eXC2Dk+@;Lfu50R z&C~L%@`uwcFIg-ses8l~COwp~?!>j&zK8>p)`XR#J4>YeKYENm?)Z5w(jx(<@s zk^-6oVs50d2_xp9rSwMhfgZK)Tlb4=6U+sbk*<2X;x-UX6Js7}{qPm7&2d@$oMe8-<+4CcxMq-T-8L(q6<>mW`Ak(qzIVyF#UZ84 znT&hRy3D$i*iXTqhA)T3P!0VJLz-Q#*)PME;qO@Qtnd8p#z7(CA;cCvGDtqi813r9 z?=ADUSXqgMS7+68`||H|o8&3vcSc#ki_J(d;zDWoX;%(NBI6t8^zOoU6Ogx5i8UaVQT zS+oKk~#}MGxLTJRnoIN#AM9!Z$8Dj+}*?a4~2cDRZg&CH_um74c>3 z5z6P;YzpNlj&D^XR9niF$bOLF#pEm~Ezu?rl9&+x8dk!ro>XtUXS-$NHB|O0topXc zCAxu+AsKtXu_nF@)9^7~J*;3y*NAh53%lC(mA=ilk;p;ul+tYOk^SMC!G(CSkB2#T z`=p(utBLjb;i~$N=?%8p${fV2rC$3k;H^_&a)-abDwArAs^@Z^(k$KAPpt@SWA{^c z3^MB&4DP6dIR3)d!`loC__a8*Z>nj)XSiHv@h?1!R)!)ns)BrhGL_=pEa#%nCT)c4 z;J5U}54FXm-A&eGHa~23w|+j(Hio8@q;91`T?psqYYCTM)b5|2DK7A(j&Lrtgw(^E zK7W&HY<*QYFghYBtNTUwME9Sr=)sSrI*XYLm+=Ey|JF0%-%|_5t>-r~1MLfX5IyxN zo2geZahkv3riYe9k~9G4J)>zibtIg3*iKmY&Z6mT{EvG*c(z%GlDl zS#wxse0uMv-?h>LBhg1;DMR09$GQXd^Si+lNw!C0@3WG#0s?t27tI$w)%$N-jV?P7 zxgItXd#?Uayo=tJY?T}}IcoGgs$SS6({I$zsFZl=yyv+mb(=Jy+1K*1C8MIr#IfnX zudUAC=6shnTWoacq|Nv5gS+XeY;ozOwqrln^Pcn5;bYcg?AesJpKgaLC?D_zUQGR(868g>&r3Z@P5S2iHveW1^^3Z4p|`V_p?$zd zNWkpm#npa?_o6rb;pb%{&5gHA?>O)5F2A1Yd@sC8qE1S>!$40vzP1v2yl~H(OjgR; z>HzpX1OO2Nz~$Zjy$iq_egO8&0gy-ofYLSbWzSOpD1NFa$m{yd|2B1ePdoEQW`iKY z)m?n?+(Can!Yrk{&g-G!Yi?DSNj&96CG(j#$Did`W-v{jxP>ygtkgfvWO+u5@%keU zCZ4KYG>r(c*lRp7grj0?xk0RTx%Hf1`B{E|ea=VIM7X=n6Zl!g!IHF8hM{|L#1$Of zBz`SX$hO^ov}sv7E}_(br?c(zzpenHV1E!;5TPu)6L9smZrlB92S+{tilQ<@A%l7f z)#d+o7M9xt5qdZr{HqGW_aFq!(GWct^#?3zUhclL+w2MZDI27&T5`DHTI~r*nalvjP5FPNwl%pi&H)k!9vza%CMS*w-*oOvl0t68VcDg`1 z=~mEPNp<}+_NI}8no$9m6GmEYVhFC|j;o94L@zxUAK5?(Ha$U-CZ(el39U2^^PU}c zW??)xM}#4BA#9vj#Ey*Ed}B8Ats^p;metSasva~uZ**20s*y!|qscinGh@p?LYQ3f z`{EBj!t_}IKWL;H@fMmdf@s$#Oh#o; zvI9$E*5Ap-!Lg_zGUpBU$GU?QJ$g8MN(CtS53{xqcDwkS769zA(nihHY4e_F4vAm4 z(S@xYbVKDzA_KkJc-#eif=CjgNz-3AZ1O0SxxMl*a>n$u$l-~s8*_DPuN>e0D|0;l zU4R_}J3M$Dww*wQ#QM>Tc3F{`#`ET(22(g-I{E#t_v&54*MiGGsFOLXiD-Qs*$qKA z_00n%xug~cU>f=$l-PdjHuPO34(K_HAG_<>GN1*h)amY-J13U$msnC|J%I(~;UmzF z7!zbD>UiPeTPEUnBxdHVr?aW8oLjUp%k9qBUB%X(^=b?f9|>)8N>HSc!I>gp+%h#C zJ=u=nP5Y%Y`Ae2Mlks}Je!e0kGsC~PrrGbQ);@|12O;AHrQgT<4ampO1&|O9;#Vr~ zZ%$LD%OM?)&k8+`Wm_dq1%%YI(!b)DPo|lB{JF5U*2RpO1j-nGT4DZCFBtASss()yjz<@d8|yX_*crd z{ylbvxL)+bP5p^J(p)E7rqM}>p~X$G5ZdQ71!K9dJj7rT+2l_>zgn2ypXH5k@OZ)e z?$2UBA6at~3blF?d8MspTaD2wW%S%-UOp0vAA!8q2F}q>kPwXA@CSebEJj&0x1SE| zxSAc*2Q->le?i3 zQ1IyKih8Z>S&fG=($BE_b?5l%U#H)-N?rbqFL@ZBYj8D~&TrZl09H~T3LJUb!e?@7 zr|QuGXLx$R-=y(#dSRkWzdw94V$NxU)B`yhY`l3CvvAAEMQr^I^ra1oD?a%Yg}WSY zQ70&l%WKVm+T8`p-Z8H5fxGOd7`3@n1*iFB`nTK0=jFS;pG4a8^r2ICzba0@9Z!D| z{MYMaX{|g(UW=U%Brugz!H0(e*Z+%f*wFufD58On#{Ft-ZnyKeTgN|!>(U7R;JkFI zD&`JPzu8q-iyFDn;Tc4;OUV7Kl2vS(Ht^EqCDs3r+$J&efqP)VN&eXDFN{*% z@vJ?-%$zc^hPg%y9SEG!U?Eo8!*`lf8SEA)h!-uVxzfgR=*7nii^xE{wM~-Z2PDyQ zd$`?#z9h}T0@dHXzjb}pe*Y$Ve#3fehi^T3(+7>QR4p652lITMlXu6)^L0{U2j08q zW^B9(Un#=2k|`rmQC?ft_&No3W#QU4idcEjSL3%Qd9SRX&KN+k(Bgx50K(eX0n=Q= zw*?+-CXN)kMk+MEsIyjifHRaxC3*CG=4U-Z>|-6?*34LJ>$|5~eN>2OHBQK-=E0vf zQ;VGI9|?v?u#=o*mnV5IIm{`8xHMf$5bKGq>> zx1)iqIo;eQ+oDnhV+{>WV5#9-ivd*5{5I^RuFauv#V7=5_l?_V*LWso*vndNhGnX49Gs~j*4yY}W)|L6(EpxwjINYax(2}sGV zV3;KwxL)0xcIVIU%}TFH*TCv>uL;MQEi8&I;qNY(l0I?j5|bh9!%#UMrEEl+?KfO4 z_a*A19!AH6doqfJj(xPk58nf3cnL1hTrKq{rAQXmR~_qH-ah7gon3XSz3L?Ie!CvJ zF5O1drlw6G9BFA*OF+s`d{*Pv`l@I6w`n(|q zytzi!ofKTaHFA-GI=ktp4SOcQ#oN?cU4NF6QO(iN3vNh`d_EpywNDoRKmwxNl#Z-V zedxb28n5}&n9&&x`0P%6P3p!I7jjdSPX_E{X2ULhXUn8L*jf)}EEwL%OP z=)lL>^MEup#*TTaH>#tQ{i~VWxDoEdau3exPY{IHTXx?7voXgyv$(^*(-+NmG@3=$ zUs0!A9|Ifd)fy34%iPiL&E_y=q`=B0%%d#KL*{8cArGrIf&fkM8;x8^F;OkDem4|# zR8;+%D{mAHoOA~hviZV4)A63Qu+idM^L$Ex$!oSGzqJpp?+F$JC?&DAc&t2KgEJm? z4)4~+BIHrA$uWVX##!my#w2B?mGgZb8hO?Pcg3{K%G5XwU@ufgL#=T8uRaG+0hHuK zv{mTA1}@UC?o?vxMUl})r|uInaMWj;I01lD4)-jv4M7p=Y;_aWrSeFU2@~A6|C1R% zX&Hc+z|kp3wCpM(1O3kVMj#H|OyYg7wz`7_4#03skpM4gS3E1tOmmYqDx3J~Av z@uvYeDRjrBom0znGhKB-Ll$Fh*sucC&0aJ8h93OIJd{D-$r-}}Ke}JEI+Y``C0Uw={#&pP&PY%&u?j*#~IhY8= zlV{6(G4Jh{MkP>p-hEki9&X~T->}Uw3pUtsne?BND*%vM`lSsVmhN6XtIN4ff!-?4 zZ>_K&n&v!2XvjF*D~(ehg+YME(k!llXqQR8P{VPPSj>He#RcCR1N1SqY)ao(5)DpYB}d15oow(v_VpUNqU~x zd4*aSJLxfXn`@4D>S~B0Ox8_}I3!JQHM(n#^~Zc79a4TFnfrN z%4Ua7*|QQ&t-|kwdv>F-|52U{Z1Yghg~q5hr=&w1k0==;065 z*WO3UmFmKVRVt3baP7$ONj1`nbHZYywYIs*)BjBrLYvtTaM@K_qwwoDs;l*N&t!qY z)8p%IYkf2U4A5aaBj&P30V1#q#uDj5J4T~*;I6618|S>-+V-}GU1n4S#}JYaop*Dp82jy zeRy%{vA@Rj3|=C7{%_|Rl%~!4xXVZ{cz+Id5?Pt680D@LH(w49s=nf3QT^mJ5!WGP zO2dpmXA^T*qK^sR0+1vlZWmhPyi*7n`r9Q&PzhB~Qf^KJMZF<<* zYB;}-cxn8*|LK#gxftdC@WHvS$!Fh~+)AO1(z#{biPp-zg7m}mtl0ZbhMRlrXV!8b z?5?Kzy|H6#9CLMz!=x%LC4h-De79hq5?h0?Jz}q=>1_QAbsvHQ^$gUO5^Z#gy1<>R zs!WP$K0U_79*em?^0X|L&2+R%cL)~NH7zx-P+7PTPhO1M4#^J zEOqeJ<6>;pw#;*V*YE-=7a64cs|p_pL0orkr8sNWPkH^JwSCiT#rc=eZX6d)u8MV| z^yUhCzTR?W^s#k;Oq!fwE%nsNtz11XVE z!<6pu9NB8$clT3eQ9dH`aU~7sZrb(MR?3wx5%xAxmLW|-EPk4FWpV2{8%b^^SBJF< z!JT|`>%oxYFVUX1PdWR6Hg|j1JN7-C_8u$yrm8WK)oi`(3vFKdm2?jM_msn!-FRIS z>Y~94wj;5)?%$qBPIHS1!8!^)-dQjIJ6fbf{6A!bZhrbq*P_Cpg?mq={`n17*fY(y zo-VifntdA8&mN7~IEIN-DF-+3W&YxlN7c0nLTKof|T>KXE z+}l036qz>nd|nA1F}ZF?n8Q~i^R*}pGYDr~!soj+@dSeR_-xGAfJfPXlm&+avkkVgFg)gOrDRnF!}9hml;vH$?C*b-io*>YlBGWvO$X_O*t=xBT=+go z2o$kcWckD#2~#o&FWZU~p2ip`88R3ssQrvq<_%=gdT>*Z2qu(2Fg9D7tHZA&yXHGi zc(f5$g%HOU;!V_sibb+q#baTM%SBljjlC55q#ou3Z zrzom;a~5noM(w&znCt! z^9OqIlop}~8(;qn`4xzNDJ?^y$WA8XO?s)?{v@L`M)_D28_M7!F+egw3Q!Z&M^kPk z!SlEmBW}bx{dpWDKDD`mVRD)<`-#|Kxi2gEBn&}8-`!jvWHb>CHxnN#cHM&ly_kjeu{intlH_TIZG|F1PYe$hpsJ;e=|{Wo z#@qNQt1CjUA+5Av@xHM7Tib0VEjyOjONwUEF+T!yq^it@f7Z6>O1$k(tMU2&m>CZe zijUxS9a(ANAxU|d)H@2^2fQ~^3?mPm#wV&&%&irPIll@sZxWJ&lMRS4dbBAT1ZE`K zC#6gMc-irJuwTSy_HKyFrMa%uJOLkbeHpi6VsffCaaq6hi^s zVt=m(Zac9=v}B{TUnH z@mX^PMU*FkRJ6{EDs+fyVB&=Os&WIQt#Jew!%6dC*hBSd4+GKE7!$qpgK~fr8CNit z9PbUae|fm%6I&bhmd6?OIw6X;0_f@QMmOxVUbg>ul{C`48DX*<9;V1q-LxWFD_W-f l<&eHq^5Di6qrvBT8OYAf;_S%oy4`Pufr_GrLIun`_&@i%#~}a! literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/all_apps_button_pow2.png b/res/drawable-hdpi/all_apps_button_pow2.png new file mode 100644 index 0000000000000000000000000000000000000000..ab93e949525e96c8f78310c57257bf7c33ba416f GIT binary patch literal 8709 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 - - android:focusable="true" - android:clickable="true" + + android:scaleType="center" + android:src="@drawable/all_apps_button" + + launcher:direction="horizontal" /> + 0) { scrollXPx = 0; } - if (scrollXPx < maxScrollX) { - scrollXPx = maxScrollX; + if (scrollXPx < maxScrollXPx) { + scrollXPx = maxScrollXPx; } // If we've been given a velocity, start a fling @@ -217,8 +220,8 @@ main(int launchID) if (endPos > 0) { endPos = 0; } - if (endPos < maxScrollX) { - endPos = maxScrollX; + if (endPos < maxScrollXPx) { + endPos = maxScrollXPx; } float scrollOnPage = modf(endPos, SCREEN_WIDTH_PX); int endPage = -endPos/SCREEN_WIDTH_PX; @@ -279,8 +282,8 @@ main(int launchID) if (scrollXPx > 0) { scrollXPx = 0; } - if (scrollXPx < maxScrollX) { - scrollXPx = maxScrollX; + if (scrollXPx < maxScrollXPx) { + scrollXPx = maxScrollXPx; } storeI32(ALLOC_STATE, STATE_CURRENT_SCROLL_X, scrollXPx); @@ -290,6 +293,8 @@ main(int launchID) storeF(ALLOC_STATE, STATE_ADJUSTED_DECELERATION, 0); } + // Draw the icons ======================================== + bindProgramVertex(NAMED_PV); bindProgramFragment(NAMED_PF); bindProgramFragmentStore(NAMED_PFS); @@ -307,6 +312,20 @@ main(int launchID) draw_page(icon, lastIcon, -VIEW_ANGLE*currentPagePosition); draw_page(icon+iconsPerPage, lastIcon, (-VIEW_ANGLE*currentPagePosition)+VIEW_ANGLE); + + // Draw the scroll handle ======================================== + /* + bindProgramVertex(NAMED_PVOrtho); + bindProgramFragment(NAMED_PFText); + bindProgramFragmentStore(NAMED_PFSText); + + bindTexture(NAMED_PFText, 0, loadI32(ALLOC_PARAMS, PARAM_SCROLL_HANDLE_ID)); + float handleLeft = 40 + (320 * (scrollXPx/(float)(maxScrollXPx))); + float handleTop = 680; + float handleWidth = loadI32(ALLOC_PARAMS, PARAM_SCROLL_HANDLE_TEX_WIDTH); + float handleHeight = loadI32(ALLOC_PARAMS, PARAM_SCROLL_HANDLE_TEX_HEIGHT); + drawRect(handleLeft, handleTop, handleLeft+handleWidth, handleTop+handleHeight, 0.0f); + */ return !done; } diff --git a/res/values/dimens.xml b/res/values/dimens.xml index b8023536a7..e0ca38469b 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -18,4 +18,5 @@ 19dip 8dip 64dip + 56dip diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java index cd66b4ffd8..d8ac50b482 100644 --- a/src/com/android/launcher2/AllAppsView.java +++ b/src/com/android/launcher2/AllAppsView.java @@ -66,11 +66,25 @@ public class AllAppsView extends RSSurfaceView { private ArrayList mAllAppsList; private ViewConfiguration mConfig; + private int mPageCount; private VelocityTracker mVelocity; private int mLastScrollX; private int mLastMotionX; private ApplicationsAdapter mAdapter; + private TouchHandler mTouchHandler; + private int mScrollHandleTop; + class Defines { + public static final int ALLOC_PARAMS = 0; + public static final int ALLOC_STATE = 1; + public static final int ALLOC_SCRATCH = 2; + public static final int ALLOC_ICON_IDS = 3; + public static final int ALLOC_LABEL_IDS = 4; + + public static final int COLUMNS_PER_PAGE = 4; + public static final int ROWS_PER_PAGE = 4; + + } public AllAppsView(Context context, AttributeSet attrs) { super(context, attrs); @@ -103,6 +117,10 @@ public class AllAppsView extends RSSurfaceView { if (mAllAppsList != null) { mRollo.setApps(mAllAppsList); } + + Resources res = getContext().getResources(); + int barHeight = (int)res.getDimension(R.dimen.button_bar_height); + mScrollHandleTop = h - barHeight; } @Override @@ -115,44 +133,89 @@ public class AllAppsView extends RSSurfaceView { @Override public boolean onTouchEvent(MotionEvent ev) { - int x = (int)ev.getX(); - int deltaX; - switch (ev.getAction()) { - case MotionEvent.ACTION_DOWN: - mLastMotionX = x; - mRollo.mState.read(); - mRollo.mState.scrollX = mLastScrollX = mRollo.mState.currentScrollX; - mRollo.mState.flingVelocityX = 0; - mRollo.mState.adjustedDeceleration = 0; - mRollo.mState.save(); - mVelocity = VelocityTracker.obtain(); - mVelocity.addMovement(ev); - break; - case MotionEvent.ACTION_MOVE: - case MotionEvent.ACTION_OUTSIDE: - deltaX = x - mLastMotionX; - mVelocity.addMovement(ev); - mRollo.mState.currentScrollX = mLastScrollX; - mLastScrollX += deltaX; - mRollo.mState.scrollX = mLastScrollX; - mRollo.mState.save(); - mLastMotionX = x; - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - mVelocity.computeCurrentVelocity(1000 /* px/sec */, - mConfig.getScaledMaximumFlingVelocity()); - mRollo.mState.flingTimeMs = (int)SystemClock.uptimeMillis(); // TODO: use long - mRollo.mState.flingVelocityX = (int)mVelocity.getXVelocity(); - mRollo.mState.save(); - mLastMotionX = -10000; - mVelocity.recycle(); - mVelocity = null; - break; + mTouchHandler = mFlingHandler; + /* + int action = ev.getAction(); + if (action == MotionEvent.ACTION_DOWN) { + if (ev.getY() > mScrollHandleTop) { + mTouchHandler = mScrollHandler; + } else { + mTouchHandler = mFlingHandler; + } } - return true; + */ + return mTouchHandler.onTouchEvent(ev); } + private abstract class TouchHandler { + abstract boolean onTouchEvent(MotionEvent ev); + }; + + private TouchHandler mFlingHandler = new TouchHandler() { + @Override + public boolean onTouchEvent(MotionEvent ev) + { + int x = (int)ev.getX(); + int deltaX; + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + mLastMotionX = x; + mRollo.mState.read(); + mRollo.mState.scrollX = mLastScrollX = mRollo.mState.currentScrollX; + mRollo.mState.flingVelocityX = 0; + mRollo.mState.adjustedDeceleration = 0; + mRollo.mState.save(); + mVelocity = VelocityTracker.obtain(); + mVelocity.addMovement(ev); + break; + case MotionEvent.ACTION_MOVE: + case MotionEvent.ACTION_OUTSIDE: + deltaX = x - mLastMotionX; + mVelocity.addMovement(ev); + mRollo.mState.currentScrollX = mLastScrollX; + mLastScrollX += deltaX; + mRollo.mState.scrollX = mLastScrollX; + mRollo.mState.save(); + mLastMotionX = x; + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + mVelocity.computeCurrentVelocity(1000 /* px/sec */, + mConfig.getScaledMaximumFlingVelocity()); + mRollo.mState.flingTimeMs = (int)SystemClock.uptimeMillis(); // TODO: use long + mRollo.mState.flingVelocityX = (int)mVelocity.getXVelocity(); + mRollo.mState.save(); + mLastMotionX = -10000; + mVelocity.recycle(); + mVelocity = null; + break; + } + return true; + } + }; + + /* + private TouchHandler mScrollHandler = new TouchHandler() { + @Override + public boolean onTouchEvent(MotionEvent ev) + { + int x = (int)ev.getX(); + int w = getWidth(); + + float percent = x / (float)w; + + mRollo.mState.read(); + + mRollo.mState.scrollX = mLastScrollX = -(int)(mPageCount * w * percent); + mRollo.mState.flingVelocityX = 0; + mRollo.mState.adjustedDeceleration = 0; + mRollo.mState.save(); + + return true; + } + }; + */ + @Override public boolean onTrackballEvent(MotionEvent ev) { @@ -177,6 +240,16 @@ public class AllAppsView extends RSSurfaceView { if (mRollo != null) { mRollo.setApps(list); } + mPageCount = countPages(list.size()); + } + + private static int countPages(int iconCount) { + int iconsPerPage = Defines.COLUMNS_PER_PAGE * Defines.ROWS_PER_PAGE; + int pages = iconCount / iconsPerPage; + if (pages*iconsPerPage != iconCount) { + pages++; + } + return pages; } public class RolloRS { @@ -200,6 +273,8 @@ public class AllAppsView extends RSSurfaceView { private ProgramVertex mPVOrtho; private ProgramVertex.MatrixAllocation mPVOrthoAlloc; + private Allocation mScrollHandle; + private Allocation[] mIcons; private int[] mAllocIconIDBuf; private Allocation mAllocIconID; @@ -214,14 +289,6 @@ public class AllAppsView extends RSSurfaceView { Params mParams; State mState; - class Defines { - public static final int ALLOC_PARAMS = 0; - public static final int ALLOC_STATE = 1; - public static final int ALLOC_SCRATCH = 2; - public static final int ALLOC_ICON_IDS = 3; - public static final int ALLOC_LABEL_IDS = 4; - } - class Params extends IntAllocation { Params(RenderScript rs) { super(rs); @@ -230,6 +297,9 @@ public class AllAppsView extends RSSurfaceView { @AllocationIndex(1) public int bubbleHeight; @AllocationIndex(2) public int bubbleBitmapWidth; @AllocationIndex(3) public int bubbleBitmapHeight; + @AllocationIndex(4) public int scrollHandleId; + @AllocationIndex(5) public int scrollHandleTextureWidth; + @AllocationIndex(6) public int scrollHandleTextureHeight; } class State extends IntAllocation { @@ -244,6 +314,7 @@ public class AllAppsView extends RSSurfaceView { @AllocationIndex(5) public int currentScrollX; @AllocationIndex(6) public int flingDuration; @AllocationIndex(7) public int flingEndPos; + @AllocationIndex(8) public int scrollHandlePos; } public RolloRS() { @@ -338,19 +409,21 @@ public class AllAppsView extends RSSurfaceView { mParams.bubbleBitmapWidth = bubble.getBitmapWidth(); mParams.bubbleBitmapHeight = bubble.getBitmapHeight(); + mScrollHandle = Allocation.createFromBitmapResource(mRS, mRes, + R.drawable.all_apps_button_pow2, Element.RGBA_8888, true); + mScrollHandle.uploadToTexture(0); + mParams.scrollHandleId = mScrollHandle.getID(); + Log.d(TAG, "mParams.scrollHandleId=" + mParams.scrollHandleId); + mParams.scrollHandleTextureWidth = 128; + mParams.scrollHandleTextureHeight = 128; + mState.scrollHandlePos = 0; + mParams.save(); mState.save(); setApps(null); } - Allocation makeTextBitmap(Utilities.BubbleText bubble, String label) { - Bitmap b = bubble.createTextBitmap(label); - Allocation a = Allocation.createFromBitmap(mRS, b, Element.RGBA_8888, true); - b.recycle(); - return a; - } - private void initRs() { ScriptC.Builder sb = new ScriptC.Builder(mRS); sb.setScript(mRes, R.raw.rollo); @@ -415,4 +488,3 @@ public class AllAppsView extends RSSurfaceView { } - diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 40f4b39957..e1b213e907 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -528,8 +528,10 @@ public final class Launcher extends Activity mHandleView = (HandleView) findViewById(R.id.all_apps_button); mHandleView.setLauncher(this); mHandleView.setOnClickListener(this); + /* TODO TransitionDrawable handleIcon = (TransitionDrawable) mHandleView.getDrawable(); - handleIcon.setCrossFadeEnabled(true); + handleIocon.setCrossFadeEnabled(true); + */ workspace.setOnLongClickListener(this); workspace.setDragController(dragController); diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java index 0c5dbbdf04..ca12a4d294 100644 --- a/src/com/android/launcher2/Utilities.java +++ b/src/com/android/launcher2/Utilities.java @@ -274,6 +274,7 @@ final class Utilities { textPaint.setTextSize(13*scale); textPaint.setColor(0xffffffff); textPaint.setAntiAlias(true); + //textPaint.setShadowLayer(8, 0, 0, 0xff000000); float ascent = -textPaint.ascent(); float descent = textPaint.descent();