From 03a6110b4f62e72592b451c05848cfaad8c65324 Mon Sep 17 00:00:00 2001 From: Ken Shirriff Date: Mon, 8 Jun 2009 13:49:05 -0700 Subject: [PATCH] Implement the power-control widget. This widget allows uses to turn on/off bluetooth, wifi, gps, and sync, and adjust brightness without going through the settings menu. The widget provider updates the settings when the buttons are pressed. The widget provider is also a receiver for events indicating that the status was updated elsewhere and the buttons need to be changed. --- AndroidManifest.xml | 15 +- res/drawable/icon.png | Bin 0 -> 3285 bytes res/drawable/widget_bg.9.png | Bin 0 -> 777 bytes res/drawable/widget_btn.xml | 33 ++ res/drawable/widget_btn_bluetooth.png | Bin 0 -> 873 bytes res/drawable/widget_btn_bluetooth_gray.png | Bin 0 -> 701 bytes res/drawable/widget_btn_bluetooth_off.png | Bin 0 -> 930 bytes res/drawable/widget_btn_brightness.png | Bin 0 -> 1650 bytes res/drawable/widget_btn_brightness_off.png | Bin 0 -> 1630 bytes res/drawable/widget_btn_default.9.png | Bin 0 -> 3371 bytes res/drawable/widget_btn_gps.png | Bin 0 -> 696 bytes res/drawable/widget_btn_gps_off.png | Bin 0 -> 749 bytes res/drawable/widget_btn_pressed.9.png | Bin 0 -> 3722 bytes res/drawable/widget_btn_selected.9.png | Bin 0 -> 3690 bytes res/drawable/widget_btn_sync.png | Bin 0 -> 1335 bytes res/drawable/widget_btn_sync_off.png | Bin 0 -> 1363 bytes res/drawable/widget_btn_wifi.png | Bin 0 -> 1218 bytes res/drawable/widget_btn_wifi_gray.png | Bin 0 -> 871 bytes res/drawable/widget_btn_wifi_off.png | Bin 0 -> 1379 bytes res/layout/widget.xml | 76 ++++ res/values/strings.xml | 4 +- res/xml/appwidget_info.xml | 22 ++ .../settings/widget/SettingsAppWidgetProvider.java | 404 +++++++++++++++++++++ 23 files changed, 548 insertions(+), 6 deletions(-) create mode 100755 res/drawable/icon.png create mode 100644 res/drawable/widget_bg.9.png create mode 100644 res/drawable/widget_btn.xml create mode 100644 res/drawable/widget_btn_bluetooth.png create mode 100644 res/drawable/widget_btn_bluetooth_gray.png create mode 100644 res/drawable/widget_btn_bluetooth_off.png create mode 100644 res/drawable/widget_btn_brightness.png create mode 100644 res/drawable/widget_btn_brightness_off.png create mode 100644 res/drawable/widget_btn_default.9.png create mode 100644 res/drawable/widget_btn_gps.png create mode 100644 res/drawable/widget_btn_gps_off.png create mode 100644 res/drawable/widget_btn_pressed.9.png create mode 100644 res/drawable/widget_btn_selected.9.png create mode 100644 res/drawable/widget_btn_sync.png create mode 100644 res/drawable/widget_btn_sync_off.png create mode 100644 res/drawable/widget_btn_wifi.png create mode 100644 res/drawable/widget_btn_wifi_gray.png create mode 100644 res/drawable/widget_btn_wifi_off.png create mode 100644 res/layout/widget.xml create mode 100644 res/xml/appwidget_info.xml create mode 100644 src/com/android/settings/widget/SettingsAppWidgetProvider.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 204da69152..150e27deda 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -520,9 +520,16 @@ - + + + + + + + + + + + - - - diff --git a/res/drawable/icon.png b/res/drawable/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..16db056f788ea81a1c52a89dab5c92fd836b6e1c GIT binary patch literal 3285 zcmV;`3@Y=9P)tmE0_9Pd)6 zxeX3vArV|i)SN2=K8nen`kgDm6twXe$&NBpO^?I)>pK%tf(=!WveMkHcXwvr=ly)% zaoN<=6n&MCvI_vtCjfi@)LMm;jd3l8?+1R??RQ2T&-3>@w`=^o1_0r!iTJ}rtQltt z3-}FOa{B!acfk2GUU^~9-aQ|mZveFTf@yRwhwzLsAwRjEOID3VW{s6`Og&>Sx7YFl zJsJ#nqoEd_BuyW+lgWwm!UApWowd9W_Lx;VV;UpJaflg=8rL;SFyi0^PJZ4$N(Jg8 zrXP{#9_Ky1uiNvNuL@~dGN1xK36NoWb?Vgr)dG42-ENvDGYpG3_sQp+Zb>&1&vPj_ zgjI*W6f>4mualwnHqu>Jx*Btw6TCi?Sz0 zVu9?D+(9d0UMI9JT*rlAnfeR`JeU?<2&%)o!gn3w_iQ2dR;M%$Qw#CcY2uIVAX;YO z4;~q=z)#@!Fvd~L{|M(dXd-+YmVN&VwSd9cl|p#o|3MItZQJq*V}=j{R)FvtM1p$- zU5Chp@Wn$wz_TM+vOFl;wxU%d;1^*uO7KDn6QQtTds}KLE0Z52W z71EaL@cdaoesce7ZS`M>3pstxloT2t>NwCrb@g>paH)MMM)54Hz(tnoY@=Wxkb)Y? zBjp*gIyG*^Jou=bT)KbME5D;u;Z;(~i<%>_VIZ z^>-jaSjbRT=}JJw#MFc(1?L4*#tk8sy`g}@FpOc8e1WdQ-9OxS?|rxJ_}z}q*#pS) zE?4s{lj$T}i5Ft;R&Yc-6j%`)gbjol3Vb@igvR!TMfVS=l_?7S(lX>Ku5Ei~-m8_XY?+H$djA(8>3lq6Oj)X~m3F zDrD^ALiiA_;X}|ckMj`HG1l{OEnG&tn}n;`mKD2ClmKwHSK8NR(segOcp#-E7&Rid z;O|8k3ot4$%FbSiIe*#B2Y0ZM@ERd@*5#DCGA(05+5sP7g;;A$LE{P_FZ#N)RJ?K| zoEQO*0$UV$F~tH1e^7X>%51JXk$u-e2B52zOyg>dVThtQBJv9`i0g?`%M`iLORXt< z?0$SqRT2L^Ri%|?dp3fq1uItOowu7Cy zosVsQ7OpH-oWwY-#<=n}Q4~eW6}3e0v9TD$C)w!N@cs%2b5#)dYw(d}zR$CDYwUv? zH*HP?d44(W)j;TPLy)VHaViNwsm6fYZ~y=a9P*0*mC(E-wZ_kcb$wCkeSf0$<<|Dy z&+q=bh?v;_OU9&{Cu1_JiyTVK(W=D5!JH=u}Rx~5l#JdCWsX}Wp~ z>*%nqmk)-!bKQNaO2pbMD;cqz;`uzKiZQrT0U!$6*`mAoj^+{Nd&QcYFis0L5jfru zmKo;=QkH}8@8*af$x#S_a_t>2Z`b&K*xORQ#nQ&>8j^7q zEb`ys&FV8)DXvz*986`336;OgmFB9I@Ve5b(EJG%oF8JGEQy18 zC9b5E#6h`AuLAhwSpkTY2Epo~%^P@>NKqYFr~H_0m@n*I&d%Wo< zO&=jpP0U>`DMGZyDIh*>*V-RGuxs27vVH)ajOIcW2FnIcn6fg_dc_ z#3+PBRmF$6L?su~m?GW9LxA95Z$aLbeSp{`i1-i5&MsM#l--?NLunoEQzU!JMa9m@ z{?}TEogU`|3ZIT+KF$jOL_^%<(J;NY>$zQ@9>iFu*B^4XI|KZC9V1x-q&_lT5#cV~NY48Q z4Vh3ovL0>O1pa{@+wFI}y86tkTYtH=7jO1{=FZ%w9b4{c7K!B_YRKcxyY4K5`c_#6 zOPjj+3y8RS<|^Pr2ihn%U`xTpFq6=Hl_$E^$Rdd-qj^w!uGb}l*?2!kDIo+hR*0D{7G#en(Fv`>?)rJ6X4kCc&0@|FHb_N~s%{kREJ#vgJiM*b2<|P<@Yn?td}O?$Ae7$5hH^ zqf`pM4=6`@r2WayTB-S`%{jp(XScmRdkegc-`!EeSEP!jbRl|MX@6qsOZ;E%oc~W8 zZ2nOdwYSxA&s~8uvlfN**nLFpsIC7-&v^>#PtuooT=-A@1ppTSe8mC$SAYQkyysNt TiSFS!00000NkvXXu0mjfDB?y{ literal 0 HcmV?d00001 diff --git a/res/drawable/widget_bg.9.png b/res/drawable/widget_bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a2007ad92e0512c58ce3373937b72f80d8277268 GIT binary patch literal 777 zcmV+k1NQuhP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXJ< z6&e)e93Jcd00N0gL_t(&-tC&fN*hrWhQB-2icT;Mfz(w&+eN#WSy|`{2&J1oMYqAF zP!Yrwe22bADY$AkwoBUxmKZ6`s+A!bG0A8$bGmS}lc|n@HpvX!1DAwJnECF>fB$ni zHwr*R08mO@y}vG$Qa6A24+l%%3(R#bx+4cS4JP1TaIeb4jZ?`+U_4?7eZQF~08D$#ak6p-Z zRVvF}&)W|~WD=w6dHY+H$}*6<4Om&0wbb>zgGs?gpbsp|S^`uOaIRLXZAeO@R;z6Q zxhQblCCr6|g_mh@gpkFIF1I-FoN1a?T7W~Axg;N+QA$mx1vq4xNdh*~Ufhh(u&*YS zLSUu$5*kD?3k3`0WR0uitdMkiT3vp@+Id0t?`Cao*gE zJaeF!skB$Nc<6?<2F^P0P`k2=Kc|d7hB1I)NycR*xAOc3)&lInn^mIf00000NkvXX Hu0mjf!meeD literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn.xml b/res/drawable/widget_btn.xml new file mode 100644 index 0000000000..720bc4999a --- /dev/null +++ b/res/drawable/widget_btn.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/res/drawable/widget_btn_bluetooth.png b/res/drawable/widget_btn_bluetooth.png new file mode 100644 index 0000000000000000000000000000000000000000..5de9d78f8568f80ac08b00e473c94686b6428d8f GIT binary patch literal 873 zcmV-v1D5=WP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP% z5*Y!q-V8+m00QYrL_t(Y$L*FsNF!Sm#(%k4%xGrDDJ*<>5*xKp3#$|(_>^F0Bchd! zVH+Fmo}CJUgoSiMAQlfoidD3?P|QQC*N7k%DuTkwD+U?kznIBPwpeD^5Zy$xY_WLY zz~%Ct^WF2^d+xpPZoj+vssRQE2miXizyDM!l_E7K_4)n_27`ZRv)O-N!hEQfBp3{S zR#mlCQ55`se^pZ3wz<8%jo7yR8TjMP#7#|2tqlzg2q7qyO5S{be?LM9_V)J5@InX_ zMWIkAwEie>Rbt0+JpbNWT3Q$z8>6SEhn1C;XXEN3wr!hYu~;$x^z;OPuIp%;#`5wq zg+ie$?nfqSA$DEUG;i!ybaZq?cXv1OcpODh%J6j)Tb9Mh$Ox%aiqX+gEX%^OECAB! zG@F~7w6(R7NF?a!=)kh9s>D^Lc4a;|IACaKh{?%GBuOHl&%3R|_4PFXs;VN(@{8N^ zsy>cJqb0YEWLai*c9wyG0rL4gk|c3;bwwx?BA3fCH#f)m`MIam&d!eS%~BVOMbAys zWNB%MOeTXQNdSaGA&!raiN#`^oSc;5f7;=4_j_w=%ahu19M;y>FbtytTNm;76%>m_ zY}+Opjd~ReAs8PYN0#LZY+b~T<9LYzfdKRK^Gr=mc@~Mkxr+HL?SqjQ@_-1#eIE!bai!+NF+!m zlic0i0r2qfKy!050H$eT7)DJM*K}q2d_LCK*V*3Q_Ig%`Z)={JnL*ce&d$z=#bV@g zIe@YU<;@klZWx9)b`OuP>+J9EGchrNX__xSDsOt7o(=r)Ep%gJgN22KSN}k2A{Iha zEa2keg6ZjLve|5Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP% z5*`+QOdmx600KQpL_t(Y$L*F+ZW=KZ#((xWfEh-BqJ%+2;TG9exl7KFL-Yjfy3G+P zHc_`d1X&=U`KJ*f$;8ZHcQqqup-Ew?ESe{I<7a)J-{;Tv6TM!K_Xx>5#s5dFUR!W_ zdip6%)6c-kU*LXMN}XR`UVht}SSfX}x3?E6r4T~A%IKUUP16(S+y&6yn%MKaP)eDD zW>Krv0C;?ST(?=Qwc$=u|4O(F9s~iEN`>3o+v3gToZC16wAQp*Erbwj^Mw#ArG5i8 z#!xPoX}8;J^E(qa8Vx#~4$WqB1vrW#X0sVeDZ(&BYyBqTSI^j5iz$r}>>$N@0v)I2`i){QPgsl~w=n@UQ|rolY^v6zghh?aFY@5d^`?D^{=9bGesC zVHJCx$I;OdjYcD{C`l5^9A8J%-K;y6CriMZeI jfBjSM^wC#;5O0c~Xnwh%1b?c*00000NkvXXu0mjflqEno literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_bluetooth_off.png b/res/drawable/widget_btn_bluetooth_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b831a46bca094c55b40a20828fd255bf1202408f GIT binary patch literal 930 zcmV;T16}-yP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP% z5*Z-=w;US)00SaPL_t(Y$L*F&NIO>)#($XvUx{%L6(1OM;mRzBU?SLvpoRoN1aaX? z+O6)oO|p~X(v_RG;-U*9V<_&7fw*Z&5J8;yfW|R z6iWE`_&9w!vA4HZ>HtmCxVgCr zHY~NKY2^yg-QBIjlF1~pEPrudLp3fAj@j8+W@ct|-~0OdXl`!CVzH3PWNIcBY8fD^ zsxm!2jmP7uAXQZryWP&t&JH%44OLZ9RkdQ^G}KNWj|Z>UtHaajH2wYk1Ofrp*Vhq6 zk?rkm91cgR#$QG3^?LF7d^#)~4x=av0MF0QbaZq8kjZ3tczCEOV^fv0)LoA4@9z^1 zhgn)$0$_D@6_?A!_4PF?D=R!cJ_6_tltwc4zkQKq8CjM~buZ5972pqmP$f6)P)6d)Pr~UW#H{XhNkI=y9^8f$<07*qoM6N<$ Ef)mTK9smFU literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_brightness.png b/res/drawable/widget_btn_brightness.png new file mode 100644 index 0000000000000000000000000000000000000000..a162899e2184faaaafb749849bdc0a6303e2e6e2 GIT binary patch literal 1650 zcmV-&295cNP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP% z5*iD6CbpOW00r_%L_t(Y$K{u4Xk6D7$N%>&v%fc5#)_7C<5@hCN0S=KBPxw#E#4qO zQd&ZS>o)j%LzI?6=m(cHt<#0nG}RYlT2iOblC+?ZfJ1CajXVNHwQR+KSfR0#j6E6` z$sKDO>CL?5zS|G794D4-$!!Ux2M&+RyZ8L=Ip?0ckiC2N;;Rr2Uy=Opfs?IC(){)2 zhW|RaCD~G!OeSmB+P+d>YcLS(Pqror0JOEXiOFR0(T&;@HrlbFzG2&nzVedW?LN4$ zu<)UxC{IVCk+%H1`R4Z4_V-IFO1@uNUU^WoiG!o5QTo8(rbLqfK%$f`T=?Jus|nQb zRn=AX=O)h$WHZ_40>MB}PzmzY)z#0=+2%fK+}ZeJS(Yzf{_HXbfF=?N8v${ipFF>~ zDX`P-bjhW1KQ(Elqod<5g<`=jNfO%I+P9@^(ys@UfQ=J5?D*P_CrsVsg5e;4Eqjfl zCVgo4?%fHG$Mcj{(B1;@$Mx*<;c$3eaArEA9s2g6+U>FJKNUssAb=*n;@{$QI#IEu zLJ&lO0MH~^vXzyVaUeiprQp>g=q9_#> zwMqm*fMr<#0K+hF`0!!7uImVeLU`;Ok0GRl-23H|qldVxf z5Mm&}*!Y;sExYFxMX3<&B21VdAmG76EvU%la#&nkL^hkn)YKGudV0{^-3`MuaOv-t z)XddPPe(@wW0V=Xp^u!MI9t3c*yVH?vHIBak}M@eQG{3af-wfuG}od40|s#0x@C;v z#*G^o7#M)t?Z&QMyAY0qpD8ITdB!wNGn>i2@M-$f;d|Ec@VmoTwuQERD;kYnsE^gd zBYD6WyQP#-5Jo_)J1b^+c^M~9o`kBZsII9-eXO2_!{MJr>!L@;$H$HPF0MkMFwX=w z?eqG+$qT&gb}-nghXuWW;h|w@n)ZdU#bOauk zmFX+bPMn?K6FU>XoP2*$zXLq>x3Q0!l1)9Tsm4WJ>=T)INaRHa09dd-?`W-hzBZZL zg%ARds@caGPvu6)tbunm~hN-Ek-yA=Fy#ImDW5Sabj&KiCMga>9 z90+$aNCFWMkH=wI7W{rcc09ZTKA(@>{7o3xfzHm(6RA{cX;a|#WV=`@m3~K(rGIDz z?UZI{|8zNAhdGXe1q-5G#DOOd002Zm1jln&DXvV@B7Mnjvp-&1QralVQUbuprmjAM zU2tfI_C~Q#>_}fte|L6zc0xCFP)ezx8ShX^4c^Yf;;c_hW?r;lVQFb;<@7tJf0xVU zdcp9hwRV(k#^aGQBY6M=YwfPx#07*qoM6N<$f?!E84*&oF literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_brightness_off.png b/res/drawable/widget_btn_brightness_off.png new file mode 100644 index 0000000000000000000000000000000000000000..0f42f2dae97a5911788242710ce7de2aa7e9ad24 GIT binary patch literal 1630 zcmV-k2BGPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP% z5*jGmLC5L<00rJjL_t(Y$K{u8OjB1F$N%T{-rL)jwjfmjTPT#5Axa=HppX_;F`0^+ zaTsGX+xIPOX32)p&6gp=I`_gCqg%FRG0WV7iCJcRfvCk0mFd1rm$*&qYmlUo(%asa z`*!w0F?K3~*MNInN=B7A?ZFXbhfF`|p9hjb2h;S6}t7gB!dJ zWnQnhbn@Ggs>Nkd+c-ttL9e~C*;IVi^Z}g8jb$ya=Bjj zlz5uN<6^z9(f3Q{oXqt(**R-Co;x-e8q@$F7!0}rxB*=4?CiWcEstw!YT4SF+N|oT zY61ZB^5+?v{mt_|#hwFm=gfUM-<{v)cDW6Cd3kTno;&;9x|+J~1(geo48t%0(9_fN z0e~=o*Jk9g$!Id$vTVJYs$KW{{XZmANu$+jg|Eq19G(~6pYO`&8ID2a!pe44RvCAZ z+i>gVEvD}Ix)p&J0-G6zS#ZzPL*4=anJSOFwsduxt>zthi9X^|SEZA%^E9LXc zH(PDi8jj;&x7k4{g{rEPQGfyk(C*5&wzgvN;>Bq;Y&IJ>maFsmdKhN7aPG^H!yE77&9*B;Mv=K1n+^KyA3pEj;T2LlGFR0>j3LLd-G8y_AXMp;=I zvK`rQWIHrVhNYV~@;mqK+b2&627qKTIYwD}!(n%s+uZf*|V4;cTuK2%f2u=7S-)``{|L95$z$5 zht3TBR_m>8lT@jKlerF#a<6g*PMDnAcs!1HJU%6q5P}SA2A~6yEd7y^Qy&on`R>Tk zBk?KIsrS=f>TU2|$}h;j*3{U_~tPduIK>+4yY-S(Et>Dp>CnONvRBK|OxHLy5!>QwqRNC*lF3Q+P~37`Wx zIXRx$IkUfSX>O@_B3KZFKuJl-n$ptJOCY!)Cd3ITnGQ9XOb=-iLXexAi`LdwWSBFc z>-tr**?gg)6S#Qs;%9sI?CG8Hc^nJ|TVz>Y`e2_?FhURnP)flP78Mm0&~+V7 zrxTS6D&cTA=)Fh~3c9+vx%ul*C={C!Sl9Ic&+`i(TuTPV;8#@@I&^SG4y#wK1^{p@ z2gbl4kxJaqQrb=xK;*wgEs# zN5^tiQ58v&J{*sZf0Aj-9J1Q26{ELCKjj5}z-F`UR~6NmN~P%buI&-X4rY?T-nhbg7%bZR&< z-J3-F%61+M^uE466#&+)S(jD*YcW?K7nOEA)eFyrae-!+vwybR#d+4V_>eJ|w c|J~i`FD1uuc5SXgbN~PV07*qoM6N<$g08^?vj6}9 literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_default.9.png b/res/drawable/widget_btn_default.9.png new file mode 100644 index 0000000000000000000000000000000000000000..febf2223eb54a1244236e859924dfafa3e7eb4b7 GIT binary patch literal 3371 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 BQyTyP literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_gps.png b/res/drawable/widget_btn_gps.png new file mode 100644 index 0000000000000000000000000000000000000000..3394cb40b867efa55dfc6cf769db6b13a644daab GIT binary patch literal 696 zcmV;p0!RIcP)Px#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP%5*s1A zhE5Lv00KNoL_t(I%jJ|`NK;W9$3J)XZg61CtDYoj$22DMl*sNu70pTQ zoAGrSRmRtRq>iH=-=xtkV7*zF^4eCd9VfECycxBplfM+s_yqm0h{j_6NHw2gb}G*vgK(2PVxi3q?x}CoGl#JE~7TWpB?F8fpoM zK7oQ#4x&-q7A+|U!yGqjmZw05MrBi8jdVpk0qZ$k6fq3J&)iH??drqIGo2MZMaS!q zbIlL9x>Zi1R$d}mJ`BurA9~lqSH1adLTa`nArJ^mB)GrhY+TCFNtBQr$iem}?#&Q> zWzv=(C`84=#KZ*XEp5rzNe)N_b@&$wVk`m1GPU3NB6>=?yfER?LFGmwu e+R#62`o94KfZBRGE=Yd>0000Px#0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP%5*seg8R00MDIL_t(I%jK0_NK;`L$A4#Mer!W)w#1xRc#*Qy94E2}A|eMRfl*-MMfsUf zS3wd{7ePS?MWmTgnn5w7L7?GVn7^X83^zzvINM3>(!XGf0Uv7!`)|DO7We90*VlFlhld zHfdm`Lx>iVbA`r+{4MK)#TDu$chqf{h;t7X%s6yym&Vk20f0$)_`_*;XjcT~n%(jn zKeHq*lusE_0jBB1^-0{(=8q7PeB+8MVyn)dNoiaVRfl>8<`Hw`vk{bcCHiL6lLHTz z>-IfHhdu?sGnKfn(ZfeI$umKQ!y869X1|`eR%_XEAk0lcbc#nCE^lsj1sY`7s2mA9 zwrYzZ9pD=mGkOsgvnixYl)qig_ zJmk)OzVc`5me5ANBEa3;s-MD|U}yH$Z3)ccq5&5&N)WGD!`My(ugOz~-upYO-|;QI zcoh}3YWRLMu literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_pressed.9.png b/res/drawable/widget_btn_pressed.9.png new file mode 100644 index 0000000000000000000000000000000000000000..70a200b96057cf9c39afd90b149f4b387fc921be GIT binary patch literal 3722 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 literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_selected.9.png b/res/drawable/widget_btn_selected.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6f2989fa1f953be532539ab960a3f11d16633256 GIT binary patch literal 3690 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 IM6N<$g7*OFdH?_b literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_sync.png b/res/drawable/widget_btn_sync.png new file mode 100644 index 0000000000000000000000000000000000000000..9682879e3735add327bb258e90b75d4a850ef423 GIT binary patch literal 1335 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 literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_wifi_gray.png b/res/drawable/widget_btn_wifi_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3cc49c229fc2848973bed1b84f5112289b84bd GIT binary patch literal 871 zcmV-t1DO1YP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP% z5*`X_O+yL*00QSpL_t(Y$HiA$PTN2fJ!8+qb__(klz<|{Ci>gWu!b(8o9J5l+f5*3 zg;pS5A+`t4cy2$?jACLCc~rg9C{||db06niUo#@Y|1iGl4b$lqjIqvtM1<4R)0LjX zR*Bey#&HbJUwv-d7H!*th;VXpvVGv|>+9DPaSkB_7-J#wwrydIfpZSy@p!wb_K^x9 z5JgcZ-9CD2?e-$RyuAEst^H0!UsiDP7w7!j`T6MXf^!beIaq69j6u^hXqpB@G}^evdwY9G)3i5Y z?*Qi&3!p-XkQE|=b8a(WBEs|YGpeeBF=lDs z>-gp61ppwW47%PJ*jfu~Ez&eak|Yp91X(%fV2pt=23l*>bsg^87#IMOB*Ed~VQ-C< zQcy}E&vV?~-lDGS^?{3`=m2Z2Lyi5lwHBOnNGXvd36xUMT7!r{L@0^^lgZ@sI-X9a z;ks!W@@(duf7qRb5P=6o1f>)M(A&fLJK9AQMF0>;0|3St*#lPcNa>jPLzJlX0r}3V+_Z~$E%ZzF}6gKr>7?< zrBIe7>bgdnrWgzcFvfJwdf=7G(4bV1VIp zh%C!cRTUl|A5oU&k_`9v_czz^q78>b0?}z2`P=nQw{XYoF&i=JPr3@9#VNeQH=4m~%cALY!)?L;7a3Sx2*d zz1tWw-3WMRXXheGk{zyu0k3aV`2QU)&|KD5zfxewmaSmA>aqT x#l<-fz-`-Z{}aZ)6cz{hzUlIxe8Ozg{sMm+{`*kdHCzAy002ovPDHLkV1iZ{j?Dl7 literal 0 HcmV?d00001 diff --git a/res/drawable/widget_btn_wifi_off.png b/res/drawable/widget_btn_wifi_off.png new file mode 100644 index 0000000000000000000000000000000000000000..8f15b4f9d484adf7281e92a187a689f8a6105e79 GIT binary patch literal 1379 zcmV-p1)TbcP)r`C<~&#uoF^w55?sk=R-TGaJjGsM(C&)KUc(E(XEb&1RPV z0fGp#6mdYTG_x77?FXn*dya5jm;a+l^)4718p7-K;_-L@a2yBQwn?Ycb?qbSQ9Lv>grX>fLLnlN2to)x zfBuZF>r^Tg?%lh$`{0WgFCs}2;c%E(EQYG8c)eZ#bX{kDex7o<%2F&zS))u zg`l~)dFt}z%YP;ki8f#o7)~aWOLZx3XlNK|Zf=e=HZ~&5^1p&*S*E?cy*Cz%bps9% z1jc~+!29;?i>RtfJRYaBvy=ArcB0WJ;cytg-_Od*3c9XSEEbuYo5L^+VzC&3K)?%> zfgG^5BOjkXf1bX+K72mkma#w}fZy*&(=_7oIHgjFYPE`Knkb6$2k;x9*A1>#tCY)S zR##Vf{`@(!v$GTm1wMZK$nx?s!C;VBEXI)|N6<8_7I3d$zox6J>l!efOeU?m!KP_4 zHa5oOD8z>kADEw?$1seYT_FAa{Wa48B{jnIWIgBg-C>m# zzkffLWs%F}n3$NrbzMrOQq58w9UTH-czAewii5!*fj|IBl6dpx4I4kVyu8fd;2_=I z-AIyz5CTDyK9*^_z;ltV(}e^vFo}hih^mHsH#d&PY)+foTx?b zyLazMr_-paN?%_eb8~Z4tJT_i+qMxx)E`_Pj|azbkR*woo*q)E6irP{7=}SMn`Lx# zltQ6^ZQDF~@&s9yYk{}{-ndNadXLwiwtY8l+*leM93&czVwxr|U%n)p&2sA0DbAcZ z!-EG8xO?|5Q&Ur$)~{Pd)TMYG+5~)m?%X*vO~W)za=9Gobebzyt}rk#0KmY&0FLAE z^y$+r;GLY~24E2Qsima_(=^FuvkVUp^XkgkJe5j?@$vCZlgG!$F->z*w=8Q%iaP)qSa|mA*@2Of5oTs)ux-0`+#JW@?Af!7 zj*fEc)~!u}r6|f43v3ts`#M-kr_(=ItJMRJ**aCr_TNCGxT?6NyAnRh7lXMJkmFl}d$b zwaUcA#O|iIZEbCYLLn4I!Rz&+C<=S_>_O8s48ve;ZH=X+rQI)KVzC&Srs4DX@OV53 lA-0q;3kwVXO$oD`?H`MyNUSDFe!c(z002ovPDHLkV1k_IkHr80 literal 0 HcmV?d00001 diff --git a/res/layout/widget.xml b/res/layout/widget.xml new file mode 100644 index 0000000000..63ce5a5089 --- /dev/null +++ b/res/layout/widget.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 9ea852b6fe..62120fcaee 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1649,6 +1649,6 @@ found in the list of installed applications. Refresh + + Power Control - - diff --git a/res/xml/appwidget_info.xml b/res/xml/appwidget_info.xml new file mode 100644 index 0000000000..2186dab659 --- /dev/null +++ b/res/xml/appwidget_info.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java new file mode 100644 index 0000000000..002816f8b8 --- /dev/null +++ b/src/com/android/settings/widget/SettingsAppWidgetProvider.java @@ -0,0 +1,404 @@ +/* + * 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 com.android.settings.widget; + +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.bluetooth.BluetoothDevice; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.IContentService; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.LocationManager; +import android.net.ConnectivityManager; +import android.net.Uri; +import android.net.wifi.WifiManager; +import android.os.IHardwareService; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.provider.Settings; +import android.util.Log; +import android.widget.RemoteViews; +import com.android.settings.R; +import com.android.settings.bluetooth.LocalBluetoothManager; + +/** + * Provides control of power-related settings from a widget. + */ +public class SettingsAppWidgetProvider extends AppWidgetProvider { + static final String TAG = "SettingsAppWidgetProvider"; + + static final ComponentName THIS_APPWIDGET = + new ComponentName("com.android.settings", + "com.android.settings.widget.SettingsAppWidgetProvider"); + + private static LocalBluetoothManager mLocalBluetoothManager = null; + + private static final int BUTTON_WIFI = 0; + private static final int BUTTON_BRIGHTNESS = 1; + private static final int BUTTON_SYNC = 2; + private static final int BUTTON_GPS = 3; + private static final int BUTTON_BLUETOOTH = 4; + + private static final int STATE_DISABLED = 0; + private static final int STATE_ENABLED = 1; + private static final int STATE_INTERMEDIATE = 2; + + /** + * Minimum and maximum brightnesses. Don't go to 0 since that makes the display unusable + */ + private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10; + private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON; + private static final int DEFAULT_BACKLIGHT = (int) (android.os.Power.BRIGHTNESS_ON * 0.4f); + + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, + int[] appWidgetIds) { + // Update each requested appWidgetId + RemoteViews view = buildUpdate(context, -1); + + for (int i = 0; i < appWidgetIds.length; i++) { + appWidgetManager.updateAppWidget(appWidgetIds[i], view); + } + } + + @Override + public void onEnabled(Context context) { + PackageManager pm = context.getPackageManager(); + pm.setComponentEnabledSetting( + new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"), + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + } + + @Override + public void onDisabled(Context context) { + Class clazz = com.android.settings.widget.SettingsAppWidgetProvider.class; + PackageManager pm = context.getPackageManager(); + pm.setComponentEnabledSetting( + new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"), + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + } + + /** + * Load image for given widget and build {@link RemoteViews} for it. + */ + static RemoteViews buildUpdate(Context context, int appWidgetId) { + RemoteViews views = new RemoteViews(context.getPackageName(), + R.layout.widget); + views.setOnClickPendingIntent(R.id.btn_wifi, getLaunchPendingIntent(context, appWidgetId, + BUTTON_WIFI)); + views.setOnClickPendingIntent(R.id.btn_brightness, + getLaunchPendingIntent(context, + appWidgetId, BUTTON_BRIGHTNESS)); + views.setOnClickPendingIntent(R.id.btn_sync, + getLaunchPendingIntent(context, + appWidgetId, BUTTON_SYNC)); + views.setOnClickPendingIntent(R.id.btn_gps, + getLaunchPendingIntent(context, appWidgetId, BUTTON_GPS)); + views.setOnClickPendingIntent(R.id.btn_bluetooth, + getLaunchPendingIntent(context, + appWidgetId, BUTTON_BLUETOOTH)); + + updateButtons(views, context); + return views; + } + + /** + * Updates the widget when something changes, or when a button is pushed. + * + * @param context + */ + public static void updateWidget(Context context) { + RemoteViews views = buildUpdate(context, -1); + // Update specific list of appWidgetIds if given, otherwise default to all + final AppWidgetManager gm = AppWidgetManager.getInstance(context); + gm.updateAppWidget(THIS_APPWIDGET, views); + } + + /** + * Updates the buttons based on the underlying states of wifi, etc. + * + * @param views The RemoteViews to update. + * @param context + */ + private static void updateButtons(RemoteViews views, Context context) { + switch (getWifiState(context)) { + case STATE_DISABLED: + views.setImageViewResource(R.id.btn_wifi, R.drawable.widget_btn_wifi_off); + break; + case STATE_ENABLED: + views.setImageViewResource(R.id.btn_wifi, R.drawable.widget_btn_wifi); + break; + case STATE_INTERMEDIATE: + views.setImageViewResource(R.id.btn_wifi, R.drawable.widget_btn_wifi_gray); + break; + } + if (getBrightness(context)) { + views.setImageViewResource(R.id.btn_brightness, R.drawable.widget_btn_brightness); + } else { + views.setImageViewResource(R.id.btn_brightness, R.drawable.widget_btn_brightness_off); + } + if (getBackgroundDataState(context)) { + views.setImageViewResource(R.id.btn_sync, R.drawable.widget_btn_sync); + } else { + views.setImageViewResource(R.id.btn_sync, R.drawable.widget_btn_sync_off); + } + if (getGpsState(context)) { + views.setImageViewResource(R.id.btn_gps, R.drawable.widget_btn_gps); + } else { + views.setImageViewResource(R.id.btn_gps, R.drawable.widget_btn_gps_off); + } + switch (getBluetoothState(context)) { + case STATE_DISABLED: + views.setImageViewResource(R.id.btn_bluetooth, R.drawable.widget_btn_bluetooth_off); + break; + case STATE_ENABLED: + views.setImageViewResource(R.id.btn_bluetooth, R.drawable.widget_btn_bluetooth); + break; + case STATE_INTERMEDIATE: + views.setImageViewResource(R.id.btn_bluetooth, R.drawable.widget_btn_bluetooth_gray); + break; + } + } + + /** + * Creates PendingIntent to notify the widget of a button click. + * + * @param context + * @param appWidgetId + * @return + */ + private static PendingIntent getLaunchPendingIntent(Context context, int appWidgetId, int buttonId) { + Intent launchIntent = new Intent(); + launchIntent.setClass(context, SettingsAppWidgetProvider.class); + launchIntent.addCategory(Intent.CATEGORY_ALTERNATIVE); + launchIntent.setData(Uri.parse("custom:" + buttonId)); + PendingIntent pi = PendingIntent.getBroadcast(context, 0 /* no requestCode */, + launchIntent, 0 /* no flags */); + return pi; + } + + /** + * Receives and processes a button pressed intent or state change. + * + * @param context + * @param intent Indicates the pressed button. + */ + @Override + public void onReceive(Context context, Intent intent) { + super.onReceive(context, intent); + if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) { + Uri data = intent.getData(); + int buttonId = Integer.parseInt(data.getSchemeSpecificPart()); + if (buttonId == BUTTON_WIFI) { + toggleWifi(context); + } else if (buttonId == BUTTON_BRIGHTNESS) { + toggleBrightness(context); + } else if (buttonId == BUTTON_SYNC) { + toggleBackgroundData(context); + } else if (buttonId == BUTTON_GPS) { + toggleGps(context); + } else if (buttonId == BUTTON_BLUETOOTH) { + toggleBluetooth(context); + } + } + // State changes fall through + updateWidget(context); + } + + /** + * Gets the state of Wi-Fi + * + * @param context + * @return STATE_ENABLED, STATE_DISABLED, or STATE_INTERMEDIATE + */ + private static int getWifiState(Context context) { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + int wifiState = wifiManager.getWifiState(); + if (wifiState == WifiManager.WIFI_STATE_DISABLED) { + return STATE_DISABLED; + } else if (wifiState == WifiManager.WIFI_STATE_ENABLED) { + return STATE_ENABLED; + } else { + return STATE_INTERMEDIATE; + } + } + + /** + * Toggles the state of Wi-Fi + * + * @param context + */ + private void toggleWifi(Context context) { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + int wifiState = getWifiState(context); + if (wifiState == STATE_ENABLED) { + wifiManager.setWifiEnabled(false); + } else if (wifiState == STATE_DISABLED) { + wifiManager.setWifiEnabled(true); + mLocalBluetoothManager.setBluetoothEnabled(true); + } + } + + /** + * Gets the state of background data. + * + * @param context + * @return true if enabled + */ + private static boolean getBackgroundDataState(Context context) { + ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + return connManager.getBackgroundDataSetting(); + } + + /** + * Toggle background data and sync tickles. + * + * @param context + */ + private void toggleBackgroundData(Context context) { + ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + boolean sync = getBackgroundDataState(context); + connManager.setBackgroundDataSetting(!sync); + + IContentService contentService = ContentResolver.getContentService(); + try { + contentService.setListenForNetworkTickles(!sync); + } catch (RemoteException e) { + Log.d(TAG, "toggleBackgroundData: " + e); + } + } + + /** + * Gets the state of GPS location. + * + * @param context + * @return true if enabled. + */ + private static boolean getGpsState(Context context) { + ContentResolver resolver = context.getContentResolver(); + return Settings.Secure.isLocationProviderEnabled(resolver, LocationManager.GPS_PROVIDER); + } + + /** + * Toggles the state of GPS. + * + * @param context + */ + private void toggleGps(Context context) { + ContentResolver resolver = context.getContentResolver(); + boolean enabled = getGpsState(context); + Settings.Secure.setLocationProviderEnabled(resolver, LocationManager.GPS_PROVIDER, !enabled); + } + + /** + * Gets state of brightness. + * + * @param context + * @return true if more than moderately bright. + */ + private static boolean getBrightness(Context context) { + try { + IHardwareService hardware = IHardwareService.Stub.asInterface( + ServiceManager.getService("hardware")); + if (hardware != null) { + int brightness = Settings.System.getInt(context.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS); + return brightness > 100; + } + } catch (Exception e) { + Log.d(TAG, "getBrightness: " + e); + } + return false; + } + + /** + * Increases or decreases the brightness. + * + * @param context + */ + private void toggleBrightness(Context context) { + try { + IHardwareService hardware = IHardwareService.Stub.asInterface( + ServiceManager.getService("hardware")); + if (hardware != null) { + ContentResolver cr = context.getContentResolver(); + int brightness = Settings.System.getInt(cr, + Settings.System.SCREEN_BRIGHTNESS); + // Rotate MINIMUM -> DEFAULT -> MAXIMUM + // Technically, not a toggle... + if (brightness < DEFAULT_BACKLIGHT) { + brightness = DEFAULT_BACKLIGHT; + } else if (brightness < MAXIMUM_BACKLIGHT) { + brightness = MAXIMUM_BACKLIGHT; + } else { + brightness = MINIMUM_BACKLIGHT; + } + hardware.setBacklights(brightness); + Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness); + brightness = Settings.System.getInt(cr, + Settings.System.SCREEN_BRIGHTNESS); + } + } catch (RemoteException e) { + Log.d(TAG, "toggleBrightness: " + e); + } catch (Settings.SettingNotFoundException e) { + Log.d(TAG, "toggleBrightness: " + e); + } + } + + /** + * Gets state of bluetooth + * + * @param context + * @return STATE_ENABLED, STATE_DISABLED, or STATE_INTERMEDIATE + */ + private static int getBluetoothState(Context context) { + if (mLocalBluetoothManager == null) { + mLocalBluetoothManager = LocalBluetoothManager.getInstance(context); + if (mLocalBluetoothManager == null) { + return STATE_INTERMEDIATE; // On emulator? + } + } + int state = mLocalBluetoothManager.getBluetoothState(); + if (state == BluetoothDevice.BLUETOOTH_STATE_OFF) { + return STATE_DISABLED; + } else if (state == BluetoothDevice.BLUETOOTH_STATE_ON) { + return STATE_ENABLED; + } else { + return STATE_INTERMEDIATE; + } + } + + /** + * Toggles the state of bluetooth + * + * @param context + */ + private void toggleBluetooth(Context context) { + int state = getBluetoothState(context); + if (state == STATE_ENABLED) { + mLocalBluetoothManager.setBluetoothEnabled(false); + } else if (state == STATE_DISABLED) { + mLocalBluetoothManager.setBluetoothEnabled(true); + } + } +} -- 2.11.0