From 594d76dc66cb5666830b62594909fed187987d42 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 6 Nov 2014 10:12:54 -0800 Subject: [PATCH] Using the default search widget in Launcher3 > Removing all logic related to search and voice overlays from Launcher3 > Using the widget provided by global search provider on the homescreen > Removing VoiceButtonProxy, as it is not being used anymore Change-Id: Ie8b09b44f7213c8fa11bce685914442e4884295d --- .../ic_home_search_normal_holo.png | Bin 1655 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 1340 -> 0 bytes res/drawable-hdpi/search_frame.9.png | Bin 392 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 1510 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 959 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 2031 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 3990 -> 0 bytes .../ic_home_search_normal_holo.png | Bin 1071 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 865 -> 0 bytes res/drawable-mdpi/search_frame.9.png | Bin 292 -> 0 bytes .../ic_home_search_normal_holo.png | Bin 2304 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 1825 -> 0 bytes res/drawable-xhdpi/search_frame.9.png | Bin 521 -> 0 bytes .../ic_home_search_normal_holo.png | Bin 5046 -> 0 bytes .../ic_home_voice_search_holo.png | Bin 3774 -> 0 bytes res/drawable-xxhdpi/search_bg_panel.9.png | Bin 1087 -> 0 bytes res/drawable-xxhdpi/search_frame.9.png | Bin 1582 -> 0 bytes res/layout-land/qsb.xml | 50 --- res/layout-port/launcher.xml | 12 - res/layout-port/qsb.xml | 72 --- res/layout-sw720dp/launcher.xml | 10 - res/layout-sw720dp/qsb.xml | 72 --- res/values-v17/styles.xml | 3 - res/values/attrs.xml | 14 - res/values/dimens.xml | 3 - res/values/strings.xml | 4 - res/values/styles.xml | 6 - src/com/android/launcher3/DeviceProfile.java | 35 +- .../launcher3/DrawableStateProxyView.java | 69 --- .../launcher3/HolographicImageView.java | 121 ----- .../launcher3/HolographicLinearLayout.java | 134 ------ .../launcher3/HolographicViewHelper.java | 109 ----- src/com/android/launcher3/Launcher.java | 416 +++--------------- .../android/launcher3/LauncherProvider.java | 27 +- .../launcher3/SearchDropTargetBar.java | 21 +- src/com/android/launcher3/Utilities.java | 38 +- src/com/android/launcher3/Workspace.java | 13 - 37 files changed, 104 insertions(+), 1125 deletions(-) delete mode 100644 res/drawable-hdpi/ic_home_search_normal_holo.png delete mode 100644 res/drawable-hdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-hdpi/search_frame.9.png delete mode 100644 res/drawable-land-hdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-land-mdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-land-xhdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-land-xxhdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-mdpi/ic_home_search_normal_holo.png delete mode 100644 res/drawable-mdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-mdpi/search_frame.9.png delete mode 100644 res/drawable-xhdpi/ic_home_search_normal_holo.png delete mode 100644 res/drawable-xhdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-xhdpi/search_frame.9.png delete mode 100644 res/drawable-xxhdpi/ic_home_search_normal_holo.png delete mode 100644 res/drawable-xxhdpi/ic_home_voice_search_holo.png delete mode 100644 res/drawable-xxhdpi/search_bg_panel.9.png delete mode 100644 res/drawable-xxhdpi/search_frame.9.png delete mode 100644 res/layout-land/qsb.xml delete mode 100644 res/layout-port/qsb.xml delete mode 100644 res/layout-sw720dp/qsb.xml delete mode 100644 src/com/android/launcher3/DrawableStateProxyView.java delete mode 100644 src/com/android/launcher3/HolographicImageView.java delete mode 100644 src/com/android/launcher3/HolographicLinearLayout.java delete mode 100644 src/com/android/launcher3/HolographicViewHelper.java diff --git a/res/drawable-hdpi/ic_home_search_normal_holo.png b/res/drawable-hdpi/ic_home_search_normal_holo.png deleted file mode 100644 index 3f64d682342cae9c42d042ed328bd7f5ce60cbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1655 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 diff --git a/res/drawable-hdpi/search_frame.9.png b/res/drawable-hdpi/search_frame.9.png deleted file mode 100644 index 15ca1f4e65c1eb7172865cec305409d3956f38cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%EX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYZ(|AwLD!MLp(a)PTS~r#DT|UzInTn-IEmy+KTqeb^hv_n&GGPlbvPu z8qFeYSNA=$U7B7k>p5<`O*mRG)YT<|(R5z;lZW zy3{2NRqy>3TRt1`TomdsJSK4HW_A6kN^hI&9Nq%@k6Pq* zy|XNz9_j7%pZl>b@}7Q#Th&Uf{+yV^Db_blcF7d`$Ug1e-gD`w%3H%-W-*V_11~?g kuQ*ly#M)3ju9aH$4%w*_OTGO|fI-RN>FVdQ&MBb@0QQlXp8x;= diff --git a/res/drawable-land-hdpi/ic_home_voice_search_holo.png b/res/drawable-land-hdpi/ic_home_voice_search_holo.png deleted file mode 100644 index 5a7fc99e45dac7f2ce8187d6ce9eabecb31688f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1510 zcmZ{kYdq5n7{~wELS}BcByu_C5@U0lEw?d;F`DaPlw4-yu2FJZ4NGoE95G@QA|0gA zA=yeqS*gfGcGSXgO@;D_vwC-4oEN|6`+1(v^Zh*Uo;;$5v-Dooy#N46<6UrGLLz=d z0wk>8rH~LIL_^)2alkI4_-UW8lT2_4I4Pvd&-^+RZTn-Gl7OWM`O^isD+Rv+0B8k| z!}|C?T)q??v(IaKKo^v-0WT;{PM6ul--0c@JxvXZ7DouME znC&ah6;4cPDtV15+8M?j%U}c-edU*d#RJiLopbANjP1%U8=26GvGW{z@3GPv(?%%I zkl5^~xad|+PAB@kzs}hp9*Oy+k;GLmF2s3$AoP|{XeDlIy#~w5tVh>AUbWf zQG~7y2H_`;El}IhR=W<&?2%Txk#whL99FZC*iOI+;9hh&TYGniI_> zo4jg(J;m7>^-p|lpXK{l6&%Pdmx$5X@fDY4daQ3}vg~#tEfstQNpblPa9i-VmewkR z7rLT=f!5h~!8=pZS>NfmW-^QYJVUKf6$fIO@{PF0F8F9*nw^qGY|+5^IyIY%c_dPs zYN2zd{4%eAe>oGjx@vv?rGkh}xN-XqPg)_4!jQPPq@; z+lOIc#MJuC<5W)g2Go7dpYw|)IQ7}y6}$&42n3mqy6+|*FPhb6-fg&YE%|Hn@+DXC zi%lm|(ZK*?*c9fgINENrIDVfv3o{%~MytM_ZW(5m1zNN=buFcZcO^OXGF`g=r0&2( z4*^ae{obDIhPg9RYU9ixS3T9gZ9~(Oo?)KCYmtfCJ|>1+-vna&{%)#V>Xtrr+V51d zJg=NAt3I8dYLU!g(qtYy!i}p02vETKn;@A8-4e#??#W|o<*e}4rHp3Y%fLwr^s6a7 zWxo>3%&owPX9GHJF>}bL8pW0In&Aa2Ann^X61Kt7Yt?Vv7aw8e9P6G#CPiR34+`>b z?C0b%A9W~DTD#MdEMylvzmU3S@n?z-j3_m6y{jLNCzP3c9Nv!G9l{ltn7S`c3SO5t zkRx7*iOuyuSK}R6*l2x7n>)KVdisl@g&f{MFt71IKTrRlaV>cBNC0=)NVOjrjjF)3 zWX-FDL6%l|T0m5Wy-2(PfnNIDmE?6R;Y_&ykp_Yr%9+Y;7iV~%u^v@exc6$~U6n@A zQU%kNDG;rIp$A;TGMRwgA^zrFn;Ro~61mxr$iswsIcEsI9|>vJq#cOj_7g76sC#bb z)YFcd=wtWxJYa@?u1}+mY&<7w(MDhQvt9ohMpJ$#h|s|vAOm-_4z^(3Zg1SA^oDZ2 z6l&w;(fsqmHwdFT`BTF~sANo75?Khq6oEv-5okEl!Ut)EL839HmT&|LgFw6$sZIWm z5E~yJ6_NV?LTixTkWkqF@@J=4M J7Kh{K{smnUm9YQ- diff --git a/res/drawable-land-mdpi/ic_home_voice_search_holo.png b/res/drawable-land-mdpi/ic_home_voice_search_holo.png deleted file mode 100644 index ee7dde52cf65d926854cf6f697bdad26730d4eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 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 diff --git a/res/drawable-mdpi/ic_home_search_normal_holo.png b/res/drawable-mdpi/ic_home_search_normal_holo.png deleted file mode 100644 index 7367c380c1c7e5f31ac457cac7a517e3a00ad04d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1071 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8!2v z2N=7Z%(epwmK8Xr18D^?ZvQoBE&~Izxu=U`h{y4}Q|dFWq{+&U*XN@aQ21hurbdX7xDhi}9q4y!C$AsQwWnW)mCD7KMDiu<>A?}3d`(f2ei zUg^tod-m`R`>wZnYm1+MufFeJ|6}oj-Ic%ftL*>V+N{6+x$eP3=KuR6el+lvI*MMY z=3<(0>Y>;xhQLLw-rm(*QW+~*@>z{iO2w}`EZLV>#at%)JJgSPPl@Rt-2~&z=1gCn zH|PGp=-ai^{_;xM*LhCrya!H)uja4Tb+Vn^%^Gf$KB@L^{QQ4ch11`BUcTbjm8P%4 z4=*c|tcorRx82pAWOYVpT{hp_ z5Bp!v5BEJ2_c3_a3%l(+s$SE@OB82$Ec?AjC+_SO;b|KfRw$XazL?c6<5}X5-Hs1Ar-0A#$bD6N0*M#ZOnmdZ8rLyfyPT44}%6&j!{ic(N zFRmEw-&^$SXz){(1vQKlZ1{rqY_jBgU{T4z;`Okeo2B$i%*10=Iw5^g3|W@!T-j-R z51Sv>@Y?&ZC~rf@{IfkgmwrrC<;q#qup-;{@t%z_&m^wD-=y|nwt(}K!)uk|^N#C3 zE1!G4@^81G?}yv`F8A^di!m#jP5aA!CH&$XJC&jbyvsPxua09$s(s%v$L{fdW_uOW zGfBakjf?uyO()(wU1yotn{e!`N<0(w#{7~ce=Oh$?;>wvbrqp!Egm1nkOLV3cy?PXK$(8lc8O<|q--~^`z5trW3E`9fk8%GZ7ym%}4QD)+kxGY!uxXR|;0%kKRX1L^s zAM~y>d>q!aNb7my>_$_oH1}E0?m63Jg}+v9QAQ&rUPlPUWU+{6}muenVv3=Ar`04PVx1a5-8Gkzj*)q+4jD3b&m0< za-2N0NTK(Rh*S3lS8K;9VprFRZSHJ3!NDZHO(TkJWkiNZuGS(S9nB1<6%N^68xGD7 z^kz>^E1L83-R&fgXZ{)C??2snKJWLu;&*!w{9kfeVM{>Z3JnM49dcd*g`C_ELk`r= z3_79__1S{eB7klGrxl;AkLCIB`+YlW7P?Z~jo)s~Z0$c0?g@p=O->v5 z8C;CSmom(3)BpF?#79XrV5hNyLcj$>k<>J?P+kGIf1QqpG*0ma@ozg$y*E+!V{s#IMY)eeuJY^%*9gKKbP`@A(>LylQiBJoCjQxlfCVet*1RUi9+$P2&$+ zEA%5>$`3B&E;z?H|3A~s`|Y`P;a1by1(kYd>&t(>dUN)j(yhOjsUK#%{^xtb`OEhN zO3y7_rX;r|GpN|t%C+x)%M&|Y;i#Tx37-G2-JK_NIWtl-T0K1J;!pSW4-aI`i`J+J z=;GRZrf66162BX(1J68U2S)mgdCVUp+}4yWKh4T-^WnhW%cZA3dKLcde|GRdP`(kYX@0Ff`OPu+%j)4KcK^GPJZZGSf9Mw=yue$2h+f zMMG|WN@iLmZVl^W)K3C6NP=t#&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN160J| M>FVdQ&MBb@02mWt@c;k- diff --git a/res/drawable-mdpi/search_frame.9.png b/res/drawable-mdpi/search_frame.9.png deleted file mode 100644 index 058905bdb43c093a8c0785341425439a3983a801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@;M7UB8wRq zxI00Z(fs7;wLrmRo-U3d7QJt$T;x4uz~eICxm6>HgKc4QIy2h~4xUB<$A!J!i%4>6Twv>+hNprMzWIaew~` iEhW+PmqC98LZ*tpUf`g#&U+)sn+%?=elF{r5}E-0h;4fS diff --git a/res/drawable-xhdpi/ic_home_search_normal_holo.png b/res/drawable-xhdpi/ic_home_search_normal_holo.png deleted file mode 100644 index 0fe1cd1332ba0bc18193bcca0fe16a9b8db3a7b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2304 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 P00000NkvXXu0mjftP)}p diff --git a/res/drawable-xhdpi/search_frame.9.png b/res/drawable-xhdpi/search_frame.9.png deleted file mode 100644 index 32a07143ea2657a0b4c53fad07bd53b196b5473a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)77FJXh5n)GZVST57 zs-Rdv7(a1Ts?i-JoHtbj-0RYbZ{3TFWc5O=_}0fJz29ei#q2}~fW zdJo)MY>dBfU^K|8RqBM?v{?9-EV*|;1g)Wd}~$CGQqSr;*Lrm%IF*I z`*F4^2LivP+$6S+{M(j7H2hSdW%yW3AZaze0zj-v2}FZWT9rXrZq3*ev3b)T>HEiI zF?rhqI|wA&r9hHA-v*LavRI8>K!$vVK>G9lBQgG{Idpf~1ggq6r*M?MVYX*500000 LNkvXXu0mjfD$wEZ diff --git a/res/drawable-xxhdpi/ic_home_search_normal_holo.png b/res/drawable-xxhdpi/ic_home_search_normal_holo.png deleted file mode 100644 index a9523d3ccaab05dd1e04712590fd47b294a3a556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5046 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 YbGhtF9a~1&;h!`ULvw@2dTz1*15-QB6951J diff --git a/res/drawable-xxhdpi/ic_home_voice_search_holo.png b/res/drawable-xxhdpi/ic_home_voice_search_holo.png deleted file mode 100644 index c9c0b50bd062c31d8406a9513e5fc4e82d50999a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3774 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 Ben$WR diff --git a/res/drawable-xxhdpi/search_bg_panel.9.png b/res/drawable-xxhdpi/search_bg_panel.9.png deleted file mode 100644 index 85cae17bcb5ce27089daff4c7abc4569f0b2dd96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1087 zcmbVLPiWIn7>`rNHa8K$F*k&e2@12#OS&XYSe;pux`LgvE864Ix@?!F8v!2En zQ^5^A2u^RFJc&0!1y3G4c$f&vE`qGEn@90fU%GaB7&{n9-uqsDzu))gec%1*sVjXw zgFO^Q^<^iuJXyQQoA2r*UwiQJAX&~}y@+Sf9IhHZq*M!)Af0uLd6!{bTMt9L`PQ70*D@_%#7Z$`j6H>AtJP|} znusHRp5@klmyQ&T5~|=7Ln7Tv!SQmrePK6f z6^fLM4GoXw;(&FWD6b|uzgP*D-LvVR!cGDPu#LCMbD^GMwB#x=Q%OSak8We6G@d9MLj7Bg51_Ph?_~uk|+zR zrl|>z(}60dWnv^Gj!#HwRc~{%Zh#Hfgl)ez@!R6chjNv)4-Jg`0z!-J4wx<@jDj-q z==6+0=M2+!BRjgDy=*n;+jpRq@sUF}>#NuY_y>|MOVWfcay;M6n**|}>w*A4GCi8i zFfFe2KQ&`XFl^Ku|1?Ych;(4I-EVzj><-KN>H(ySV<2t@W=xwav@dlf7q0 zI+JhiZVZ*5?X0a1?LK_ITVLC<#>4!V+1D#4PWRON9z3!->NmitTVBVp0qR%1^!@4v QvmK3eR-e*dPRy?S0ka-hl>h($ diff --git a/res/drawable-xxhdpi/search_frame.9.png b/res/drawable-xxhdpi/search_frame.9.png deleted file mode 100644 index f297bf19c27f26241d722daa78343d53ac5bc2b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmbVMdr;GM9FKsk;$z6p=Qb{FXSr2rl0K3&QXy?x%8epJHoM(!TWAB++N7pYN_A5K z8F)Ka6=a?|d^5IVAWZOu9NwJB@U-IGO@`Zijk$T=bUwG!B}m==@cd)BOMbua@Av(D zzVB4$=46gfn4SOt!1ydXl_#!R>6OKc-{kbFJ>oJ=usVf#T%k}x^9(?`xdH~v^3g?1 z9z(lJ7aeEP03f!|lkXIqj%>ok`82eoqY3)_A{qeF(u025b3UUYF6WNS_0y1qqSB#|ShS^etoqM9`!d<|V|vbPOrL zVHLq^Qap0X>Bt2w9M6CT4V>zNQ5ZxK4WiRy7&Z&k!Uzn(S_sjmA{e355-<#oJPOeo z?=B?rDBFlFQ8Fot1;I~1P)SLNrbMUV_#y}~8jTW%R+}nnqy|b^fexm!0cDhdVgfGS z;}<*}3rdW10k>E%DMU{nh2Zl$9FK|Fz(}IRltDq-4{7+#WY!wUL+& z#VCVTi=a4y7%|dd#z`%TT5;51Fh)6^gr#fG8z?f0 z&0+%r&AOPVU5{vY1Z#XMmay;)EpU83$1RL@KyEQ7aDigZ4_f9KKnLyeu#zm5=TWp2 z!+Vx6ZX3_}z~TH7o+sGXnZ>TLqNvfTg{8Q0+=7}B3ry-LBSu*;#R%5@e{u$i&OlOg z{HIx>M`8y`+sCah3Xg|}Va18z#nHI9r#}S%V&2Z8$o$~B-#4Dfi9r%qbTF4Mj2~qR z^p9<(@zBLFK|TA)d$A`sr*$8Vb7fS|tc)8xi+=A|(BC?{%{SwmYWdu( zH{%GIyuE8{uf1%ls=nG429;%0Se8U8>~YoL!|7jLf#c6JVD|0)%IJ@BQJ_U8g?W z2>`DxdvDqcX>vE- zRNkTvA4s8Cys7rt}Y) zUAAHfrpn7+sN6@Rwd*3r`B128w3@taFIaT`>c?%^>+ucSI+8y)TituC$(uO8F6pPE oXE1xq&q)iucIgkEWzC_!Fuz;&56rAaRsaA1 diff --git a/res/layout-land/qsb.xml b/res/layout-land/qsb.xml deleted file mode 100644 index d56e380d0d..0000000000 --- a/res/layout-land/qsb.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 9e4c245153..af30a32e50 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -66,18 +66,6 @@ android:id="@+id/search_drop_target_bar" layout="@layout/search_drop_target_bar" /> - - - - - - - - - - - - - - - diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml index 1ef7df5fec..960ccf330d 100644 --- a/res/layout-sw720dp/launcher.xml +++ b/res/layout-sw720dp/launcher.xml @@ -66,16 +66,6 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> - - - - - - - - - - - - - - diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml index 71c4bfa66c..11d2a1f82a 100644 --- a/res/values-v17/styles.xml +++ b/res/values-v17/styles.xml @@ -3,7 +3,4 @@ - diff --git a/res/values/attrs.xml b/res/values/attrs.xml index a52bbe23fb..3331cdec4d 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -18,13 +18,6 @@ - - - - - - @@ -76,13 +69,6 @@ - - - - - - - diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 493f29c69c..f12cb57ba9 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -43,9 +43,6 @@ 4dip 12dip - - 36dp - 36dp App info - - Search - - Voice Search Apps diff --git a/res/values/styles.xml b/res/values/styles.xml index 15415c7c65..77798f1749 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -51,8 +51,6 @@ false - - - - diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index bd7a7726a0..d6aadcee1e 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -122,9 +122,7 @@ public class DeviceProfile { int allAppsNumRows; int allAppsNumCols; int searchBarSpaceWidthPx; - int searchBarSpaceMaxWidthPx; int searchBarSpaceHeightPx; - int searchBarHeightPx; int pageIndicatorHeightPx; int allAppsButtonVisualSize; @@ -372,10 +370,10 @@ public class DeviceProfile { hotseatIconSizePx = (int) (DynamicGrid.pxFromDp(hotseatIconSize, dm) * scale); // Search Bar - searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width); - searchBarHeightPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height); - searchBarSpaceWidthPx = Math.min(searchBarSpaceMaxWidthPx, widthPx); - searchBarSpaceHeightPx = searchBarHeightPx + getSearchBarTopOffset(); + searchBarSpaceWidthPx = Math.min(widthPx, + resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width)); + searchBarSpaceHeightPx = getSearchBarTopOffset() + + resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height); // Calculate the actual text height Paint textPaint = new Paint(); @@ -398,10 +396,6 @@ public class DeviceProfile { folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset; // All Apps - Rect padding = getWorkspacePadding(isLandscape ? - CellLayout.LANDSCAPE : CellLayout.PORTRAIT); - int pageIndicatorOffset = - resources.getDimensionPixelSize(R.dimen.apps_customize_page_indicator_offset); allAppsCellWidthPx = allAppsIconSizePx; allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + iconTextSizePx; int maxLongEdgeCellCount = @@ -717,9 +711,6 @@ public class DeviceProfile { lp.gravity = Gravity.TOP | Gravity.LEFT; lp.width = searchBarSpaceHeightPx; lp.height = LayoutParams.WRAP_CONTENT; - searchBar.setPadding( - 0, 2 * edgeMarginPx, 0, - 2 * edgeMarginPx); LinearLayout targets = (LinearLayout) searchBar.findViewById(R.id.drag_target_bar); targets.setOrientation(LinearLayout.VERTICAL); @@ -728,27 +719,9 @@ public class DeviceProfile { lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; lp.width = searchBarSpaceWidthPx; lp.height = searchBarSpaceHeightPx; - searchBar.setPadding( - 2 * edgeMarginPx, - getSearchBarTopOffset(), - 2 * edgeMarginPx, 0); } searchBar.setLayoutParams(lp); - // Layout the voice proxy - View voiceButtonProxy = launcher.findViewById(R.id.voice_button_proxy); - if (voiceButtonProxy != null) { - if (hasVerticalBarLayout) { - // TODO: MOVE THIS INTO SEARCH BAR MEASURE - } else { - lp = (FrameLayout.LayoutParams) voiceButtonProxy.getLayoutParams(); - lp.gravity = Gravity.TOP | Gravity.END; - lp.width = (widthPx - searchBarSpaceWidthPx) / 2 + - 2 * iconSizePx; - lp.height = searchBarSpaceHeightPx; - } - } - // Layout the workspace PagedView workspace = (PagedView) launcher.findViewById(R.id.workspace); lp = (FrameLayout.LayoutParams) workspace.getLayoutParams(); diff --git a/src/com/android/launcher3/DrawableStateProxyView.java b/src/com/android/launcher3/DrawableStateProxyView.java deleted file mode 100644 index c83659ad52..0000000000 --- a/src/com/android/launcher3/DrawableStateProxyView.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2012 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.launcher3; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.widget.LinearLayout; - -public class DrawableStateProxyView extends LinearLayout { - - private View mView; - private int mViewId; - - public DrawableStateProxyView(Context context) { - this(context, null); - } - - public DrawableStateProxyView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - - public DrawableStateProxyView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DrawableStateProxyView, - defStyle, 0); - mViewId = a.getResourceId(R.styleable.DrawableStateProxyView_sourceViewId, -1); - a.recycle(); - - setFocusable(false); - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - - if (mView == null) { - View parent = (View) getParent(); - mView = parent.findViewById(mViewId); - } - if (mView != null) { - mView.setPressed(isPressed()); - mView.setHovered(isHovered()); - } - } - - @Override - public boolean onHoverEvent(MotionEvent event) { - return false; - } -} diff --git a/src/com/android/launcher3/HolographicImageView.java b/src/com/android/launcher3/HolographicImageView.java deleted file mode 100644 index 18ac092e6c..0000000000 --- a/src/com/android/launcher3/HolographicImageView.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2011 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.launcher3; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.StateListDrawable; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; - -public class HolographicImageView extends ImageView { - - private final HolographicViewHelper mHolographicHelper; - private boolean mHotwordOn; - private boolean mIsPressed; - private boolean mIsFocused; - - public HolographicImageView(Context context) { - this(context, null); - } - - public HolographicImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public HolographicImageView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - mHolographicHelper = new HolographicViewHelper(context); - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HolographicLinearLayout, - defStyle, 0); - mHotwordOn = a.getBoolean(R.styleable.HolographicLinearLayout_stateHotwordOn, false); - a.recycle(); - - setOnTouchListener(new OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (isPressed() != mIsPressed) { - mIsPressed = isPressed(); - refreshDrawableState(); - } - return false; - } - }); - - setOnFocusChangeListener(new OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (isFocused() != mIsFocused) { - mIsFocused = isFocused(); - refreshDrawableState(); - } - } - }); - } - - void invalidatePressedFocusedStates() { - mHolographicHelper.invalidatePressedFocusedStates(this); - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - - mHolographicHelper.generatePressedFocusedStates(this); - Drawable d = getDrawable(); - if (d instanceof StateListDrawable) { - StateListDrawable sld = (StateListDrawable) d; - sld.setState(getDrawableState()); - sld.invalidateSelf(); - } - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // One time call to generate the pressed/focused state -- must be called after - // measure/layout - mHolographicHelper.generatePressedFocusedStates(this); - } - - private boolean isHotwordOn() { - return mHotwordOn; - } - - public void setHotwordState(boolean on) { - if (on == mHotwordOn) { - return; - } - mHotwordOn = on; - refreshDrawableState(); - } - - @Override - public int[] onCreateDrawableState(int extraSpace) { - final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); - if (isHotwordOn()) { - mergeDrawableStates(drawableState, new int[] {R.attr.stateHotwordOn}); - } - return drawableState; - } -} diff --git a/src/com/android/launcher3/HolographicLinearLayout.java b/src/com/android/launcher3/HolographicLinearLayout.java deleted file mode 100644 index 5344a7ee9a..0000000000 --- a/src/com/android/launcher3/HolographicLinearLayout.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2011 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.launcher3; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.StateListDrawable; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; - -public class HolographicLinearLayout extends LinearLayout { - private final HolographicViewHelper mHolographicHelper; - private ImageView mImageView; - private int mImageViewId; - - private boolean mHotwordOn; - private boolean mIsPressed; - private boolean mIsFocused; - - public HolographicLinearLayout(Context context) { - this(context, null); - } - - public HolographicLinearLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public HolographicLinearLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HolographicLinearLayout, - defStyle, 0); - mImageViewId = a.getResourceId(R.styleable.HolographicLinearLayout_sourceImageViewId, -1); - mHotwordOn = a.getBoolean(R.styleable.HolographicLinearLayout_stateHotwordOn, false); - a.recycle(); - - - setWillNotDraw(false); - mHolographicHelper = new HolographicViewHelper(context); - - setOnTouchListener(new OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (isPressed() != mIsPressed) { - mIsPressed = isPressed(); - refreshDrawableState(); - } - return false; - } - }); - - setOnFocusChangeListener(new OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (isFocused() != mIsFocused) { - mIsFocused = isFocused(); - refreshDrawableState(); - } - } - }); - } - - @Override - protected void drawableStateChanged() { - super.drawableStateChanged(); - - if (mImageView != null) { - mHolographicHelper.generatePressedFocusedStates(mImageView); - Drawable d = mImageView.getDrawable(); - if (d instanceof StateListDrawable) { - StateListDrawable sld = (StateListDrawable) d; - sld.setState(getDrawableState()); - sld.invalidateSelf(); - } - } - } - - void invalidatePressedFocusedStates() { - mHolographicHelper.invalidatePressedFocusedStates(mImageView); - invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // One time call to generate the pressed/focused state -- must be called after - // measure/layout - if (mImageView == null) { - mImageView = (ImageView) findViewById(mImageViewId); - } - mHolographicHelper.generatePressedFocusedStates(mImageView); - } - - private boolean isHotwordOn() { - return mHotwordOn; - } - - public void setHotwordState(boolean on) { - if (on == mHotwordOn) { - return; - } - mHotwordOn = on; - refreshDrawableState(); - } - - @Override - public int[] onCreateDrawableState(int extraSpace) { - final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); - if (isHotwordOn()) { - mergeDrawableStates(drawableState, new int[] {R.attr.stateHotwordOn}); - } - return drawableState; - } -} diff --git a/src/com/android/launcher3/HolographicViewHelper.java b/src/com/android/launcher3/HolographicViewHelper.java deleted file mode 100644 index 7ef0355558..0000000000 --- a/src/com/android/launcher3/HolographicViewHelper.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2011 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.launcher3; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.StateListDrawable; -import android.widget.ImageView; - -public class HolographicViewHelper { - - private final Canvas mTempCanvas = new Canvas(); - - private boolean mStatesUpdated; - private int mHighlightColor, mHotwordColor; - - public HolographicViewHelper(Context context) { - Resources res = context.getResources(); - mHighlightColor = res.getColor(android.R.color.holo_blue_light); - mHotwordColor = res.getColor(android.R.color.holo_green_light); - } - - /** - * Generate the pressed/focused states if necessary. - */ - void generatePressedFocusedStates(ImageView v) { - if (!mStatesUpdated && v != null) { - mStatesUpdated = true; - Bitmap original = createOriginalImage(v, mTempCanvas); - Bitmap outline = createImageWithOverlay(v, mTempCanvas, mHighlightColor); - Bitmap hotword = createImageWithOverlay(v, mTempCanvas, mHotwordColor); - FastBitmapDrawable originalD = new FastBitmapDrawable(original); - FastBitmapDrawable outlineD = new FastBitmapDrawable(outline); - FastBitmapDrawable hotwordD = new FastBitmapDrawable(hotword); - - StateListDrawable states = new StateListDrawable(); - - states.addState(new int[] {android.R.attr.state_pressed}, outlineD); - states.addState(new int[] {android.R.attr.state_focused}, outlineD); - states.addState(new int[] {R.attr.stateHotwordOn}, hotwordD); - states.addState(new int[] {}, originalD); - v.setImageDrawable(states); - } - } - - /** - * Invalidates the pressed/focused states. - */ - void invalidatePressedFocusedStates(ImageView v) { - mStatesUpdated = false; - if (v != null) { - v.invalidate(); - } - } - - /** - * Creates a copy of the original image. - */ - private Bitmap createOriginalImage(ImageView v, Canvas canvas) { - final Drawable d = v.getDrawable(); - final Bitmap b = Bitmap.createBitmap( - d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - - canvas.setBitmap(b); - canvas.save(); - d.draw(canvas); - canvas.restore(); - canvas.setBitmap(null); - - return b; - } - - /** - * Creates a new press state image which is the old image with a blue overlay. - * Responsibility for the bitmap is transferred to the caller. - */ - private Bitmap createImageWithOverlay(ImageView v, Canvas canvas, int color) { - final Drawable d = v.getDrawable(); - final Bitmap b = Bitmap.createBitmap( - d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - - canvas.setBitmap(b); - canvas.save(); - d.draw(canvas); - canvas.restore(); - canvas.drawColor(color, PorterDuff.Mode.SRC_IN); - canvas.setBitmap(null); - - return b; - } -} diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 8b3b2a1e36..ffbb873520 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -66,7 +66,6 @@ import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.os.SystemClock; -import android.speech.RecognizerIntent; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -96,7 +95,6 @@ import android.view.inputmethod.InputMethodManager; import android.widget.Advanceable; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; import com.android.launcher3.DropTarget.DragObject; @@ -210,15 +208,12 @@ public class Launcher extends Activity static final String ACTION_FIRST_LOAD_COMPLETE = "com.android.launcher3.action.FIRST_LOAD_COMPLETE"; - private static final String TOOLBAR_ICON_METADATA_NAME = "com.android.launcher.toolbar_icon"; - private static final String TOOLBAR_SEARCH_ICON_METADATA_NAME = - "com.android.launcher.toolbar_search_icon"; - private static final String TOOLBAR_VOICE_SEARCH_ICON_METADATA_NAME = - "com.android.launcher.toolbar_voice_search_icon"; - public static final String SHOW_WEIGHT_WATCHER = "debug.show_mem"; public static final boolean SHOW_WEIGHT_WATCHER_DEFAULT = false; + private static final String QSB_WIDGET_ID = "qsb_widget_id"; + private static final String QSB_WIDGET_PROVIDER = "qsb_widget_provider"; + public static final String USER_HAS_MIGRATED = "launcher.user_migrated_from_old_data"; /** The different states that Launcher can be in. */ @@ -282,7 +277,7 @@ public class Launcher extends Activity private AppsCustomizeTabHost mAppsCustomizeTabHost; private AppsCustomizePagedView mAppsCustomizeContent; private boolean mAutoAdvanceRunning = false; - private View mQsb; + private AppWidgetHostView mQsb; private Bundle mSavedState; // We set the state in both onCreate and then onNewIntent in some cases, which causes both @@ -330,10 +325,6 @@ public class Launcher extends Activity // match the sensor state. private final int mRestoreScreenOrientationDelay = 500; - // External icons saved in case of resource changes, orientation, etc. - private static Drawable.ConstantState[] sGlobalSearchIcon = new Drawable.ConstantState[2]; - private static Drawable.ConstantState[] sVoiceSearchIcon = new Drawable.ConstantState[2]; - private Drawable mWorkspaceBackgroundDrawable; private final ArrayList mSynchronouslyBoundPages = new ArrayList(); @@ -484,8 +475,6 @@ public class Launcher extends Activity IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); registerReceiver(mCloseSystemDialogsReceiver, filter); - updateGlobalIcons(); - // On large interfaces, we want the screen to auto-rotate based on the current orientation unlockScreenOrientation(true); @@ -567,28 +556,6 @@ public class Launcher extends Activity } } - private void updateGlobalIcons() { - boolean searchVisible = false; - boolean voiceVisible = false; - // If we have a saved version of these external icons, we load them up immediately - int coi = getCurrentOrientationIndexForGlobalIcons(); - if (sGlobalSearchIcon[coi] == null || sVoiceSearchIcon[coi] == null) { - searchVisible = updateGlobalSearchIcon(); - voiceVisible = updateVoiceSearchIcon(searchVisible); - } - if (sGlobalSearchIcon[coi] != null) { - updateGlobalSearchIcon(sGlobalSearchIcon[coi]); - searchVisible = true; - } - if (sVoiceSearchIcon[coi] != null) { - updateVoiceSearchIcon(sVoiceSearchIcon[coi]); - voiceVisible = true; - } - if (mSearchDropTargetBar != null) { - mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible); - } - } - private void checkForLocaleChange() { if (sLocaleConfiguration == null) { new AsyncTask() { @@ -1078,12 +1045,6 @@ public class Launcher extends Activity // Process any items that were added while Launcher was away. InstallShortcutReceiver.disableAndFlushInstallQueue(this); - // Update the voice search button proxy - updateVoiceButtonProxyVisible(false); - - // Again, as with the above scenario, it's possible that one or more of the global icons - // were updated in the wrong orientation. - updateGlobalIcons(); if (DEBUG_RESUME_TIME) { Log.d(TAG, "Time spent in onResume: " + (System.currentTimeMillis() - startTime)); } @@ -1473,6 +1434,7 @@ public class Launcher extends Activity dragController.addDropTarget(mWorkspace); if (mSearchDropTargetBar != null) { mSearchDropTargetBar.setup(this, dragController); + mSearchDropTargetBar.setQsbSearchBar(getQsbBar()); } if (getResources().getBoolean(R.bool.debug_memory_enabled)) { @@ -2644,51 +2606,6 @@ public class Launcher extends Activity } } - /** - * Event handler for the search button - * - * @param v The view that was clicked. - */ - public void onClickSearchButton(View v) { - v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); - - onSearchRequested(); - } - - /** - * Event handler for the voice button - * - * @param v The view that was clicked. - */ - public void onClickVoiceButton(View v) { - v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); - - startVoice(); - } - - public void startVoice() { - if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) { - mLauncherCallbacks.startVoice(); - return; - } - - try { - final SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - ComponentName activityName = searchManager.getGlobalSearchActivity(); - Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (activityName != null) { - intent.setPackage(activityName.getPackageName()); - } - startActivity(null, intent, "onClickVoiceButton"); - } catch (ActivityNotFoundException e) { - Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivitySafely(null, intent, "onClickVoiceButton"); - } - } - /** * Event handler for the "grid" button that appears on the home screen, which * enters all apps mode. @@ -2967,10 +2884,8 @@ public class Launcher extends Activity } void startApplicationDetailsActivity(ComponentName componentName, UserHandleCompat user) { - String packageName = componentName.getPackageName(); try { LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(this); - UserManagerCompat userManager = UserManagerCompat.getInstance(this); launcherApps.showAppDetailsForProfile(componentName, user); } catch (SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); @@ -3445,8 +3360,6 @@ public class Launcher extends Activity final View page = content.getPageAt(content.getCurrentPage()); final View revealView = toView.findViewById(R.id.fake_page); - final float initialPanelAlpha = 1f; - final boolean isWidgetTray = contentType == AppsCustomizePagedView.ContentType.Widgets; if (isWidgetTray) { revealView.setBackground(res.getDrawable(R.drawable.quantum_panel_dark)); @@ -4032,137 +3945,8 @@ public class Launcher extends Activity // TODO } - /** - * Hides the hotseat area. - */ - void hideHotseat(boolean animated) { - if (!LauncherAppState.getInstance().isScreenLarge()) { - if (animated) { - if (mHotseat.getAlpha() != 0f) { - int duration = 0; - if (mSearchDropTargetBar != null) { - duration = mSearchDropTargetBar.getTransitionOutDuration(); - } - mHotseat.animate().alpha(0f).setDuration(duration); - } - } else { - mHotseat.setAlpha(0f); - } - } - } - - /** - * Add an item from all apps or customize onto the given workspace screen. - * If layout is null, add to the current screen. - */ - void addExternalItemToScreen(ItemInfo itemInfo, final CellLayout layout) { - if (!mWorkspace.addExternalItemToScreen(itemInfo, layout)) { - showOutOfSpaceMessage(isHotseatLayout(layout)); - } - } - - /** Maps the current orientation to an index for referencing orientation correct global icons */ - private int getCurrentOrientationIndexForGlobalIcons() { - // default - 0, landscape - 1 - switch (getResources().getConfiguration().orientation) { - case Configuration.ORIENTATION_LANDSCAPE: - return 1; - default: - return 0; - } - } - - private Drawable getExternalPackageToolbarIcon(ComponentName activityName, String resourceName) { - try { - PackageManager packageManager = getPackageManager(); - // Look for the toolbar icon specified in the activity meta-data - Bundle metaData = packageManager.getActivityInfo( - activityName, PackageManager.GET_META_DATA).metaData; - if (metaData != null) { - int iconResId = metaData.getInt(resourceName); - if (iconResId != 0) { - Resources res = packageManager.getResourcesForActivity(activityName); - return res.getDrawable(iconResId); - } - } - } catch (NameNotFoundException e) { - // This can happen if the activity defines an invalid drawable - Log.w(TAG, "Failed to load toolbar icon; " + activityName.flattenToShortString() + - " not found", e); - } catch (Resources.NotFoundException nfe) { - // This can happen if the activity defines an invalid drawable - Log.w(TAG, "Failed to load toolbar icon from " + activityName.flattenToShortString(), - nfe); - } - return null; - } - - // if successful in getting icon, return it; otherwise, set button to use default drawable - private Drawable.ConstantState updateTextButtonWithIconFromExternalActivity( - int buttonId, ComponentName activityName, int fallbackDrawableId, - String toolbarResourceName) { - Drawable toolbarIcon = getExternalPackageToolbarIcon(activityName, toolbarResourceName); - Resources r = getResources(); - int w = r.getDimensionPixelSize(R.dimen.toolbar_external_icon_width); - int h = r.getDimensionPixelSize(R.dimen.toolbar_external_icon_height); - - TextView button = (TextView) findViewById(buttonId); - // If we were unable to find the icon via the meta-data, use a generic one - if (toolbarIcon == null) { - toolbarIcon = r.getDrawable(fallbackDrawableId); - toolbarIcon.setBounds(0, 0, w, h); - if (button != null) { - button.setCompoundDrawables(toolbarIcon, null, null, null); - } - return null; - } else { - toolbarIcon.setBounds(0, 0, w, h); - if (button != null) { - button.setCompoundDrawables(toolbarIcon, null, null, null); - } - return toolbarIcon.getConstantState(); - } - } - - // if successful in getting icon, return it; otherwise, set button to use default drawable - private Drawable.ConstantState updateButtonWithIconFromExternalActivity( - int buttonId, ComponentName activityName, int fallbackDrawableId, - String toolbarResourceName) { - ImageView button = (ImageView) findViewById(buttonId); - Drawable toolbarIcon = getExternalPackageToolbarIcon(activityName, toolbarResourceName); - - if (button != null) { - // If we were unable to find the icon via the meta-data, use a - // generic one - if (toolbarIcon == null) { - button.setImageResource(fallbackDrawableId); - } else { - button.setImageDrawable(toolbarIcon); - } - } - - return toolbarIcon != null ? toolbarIcon.getConstantState() : null; - - } - - private void updateTextButtonWithDrawable(int buttonId, Drawable d) { - TextView button = (TextView) findViewById(buttonId); - button.setCompoundDrawables(d, null, null, null); - } - - private void updateButtonWithDrawable(int buttonId, Drawable.ConstantState d) { - ImageView button = (ImageView) findViewById(buttonId); - button.setImageDrawable(d.newDrawable(getResources())); - } - - private void invalidatePressedFocusedStates(View container, View button) { - if (container instanceof HolographicLinearLayout) { - HolographicLinearLayout layout = (HolographicLinearLayout) container; - layout.invalidatePressedFocusedStates(); - } else if (button instanceof HolographicImageView) { - HolographicImageView view = (HolographicImageView) button; - view.invalidatePressedFocusedStates(); - } + protected void disableVoiceButtonProxy(boolean disable) { + // NO-OP } public View getQsbBar() { @@ -4171,140 +3955,54 @@ public class Launcher extends Activity } if (mQsb == null) { - mQsb = mInflater.inflate(R.layout.qsb, mSearchDropTargetBar, false); - mSearchDropTargetBar.addView(mQsb); + AppWidgetProviderInfo searchProvider = Utilities.getSearchWidgetProvider(this); + if (searchProvider == null) { + return null; + } + + Bundle opts = new Bundle(); + opts.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, + AppWidgetProviderInfo.WIDGET_CATEGORY_SEARCHBOX); + + SharedPreferences sp = getSharedPreferences( + LauncherAppState.getSharedPreferencesKey(), MODE_PRIVATE); + int widgetId = sp.getInt(QSB_WIDGET_ID, -1); + if (!searchProvider.provider.flattenToString().equals( + sp.getString(QSB_WIDGET_PROVIDER, null)) + || (widgetId == -1) + || !mAppWidgetManager.getAppWidgetInfo(widgetId).provider + .equals(searchProvider.provider)) { + // A valid widget is not already bound. + if (widgetId > -1) { + mAppWidgetHost.deleteAppWidgetId(widgetId); + widgetId = -1; + } + + // Try to bind a new widget + widgetId = mAppWidgetHost.allocateAppWidgetId(); + + if (!AppWidgetManagerCompat.getInstance(this) + .bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) { + mAppWidgetHost.deleteAppWidgetId(widgetId); + widgetId = -1; + } + + sp.edit() + .putInt(QSB_WIDGET_ID, widgetId) + .putString(QSB_WIDGET_PROVIDER, searchProvider.provider.flattenToString()) + .commit(); + } + + if (widgetId != -1) { + mQsb = mAppWidgetHost.createView(this, widgetId, searchProvider); + mQsb.updateAppWidgetOptions(opts); + mQsb.setPadding(0, 0, 0, 0); + mSearchDropTargetBar.addView(mQsb); + } } return mQsb; } - protected boolean updateGlobalSearchIcon() { - if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) { - return true; - } - - final View searchButtonContainer = findViewById(R.id.search_button_container); - final ImageView searchButton = (ImageView) findViewById(R.id.search_button); - final View voiceButtonContainer = findViewById(R.id.voice_button_container); - final View voiceButton = findViewById(R.id.voice_button); - - final SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - ComponentName activityName = searchManager.getGlobalSearchActivity(); - if (activityName != null) { - int coi = getCurrentOrientationIndexForGlobalIcons(); - sGlobalSearchIcon[coi] = updateButtonWithIconFromExternalActivity( - R.id.search_button, activityName, R.drawable.ic_home_search_normal_holo, - TOOLBAR_SEARCH_ICON_METADATA_NAME); - if (sGlobalSearchIcon[coi] == null) { - sGlobalSearchIcon[coi] = updateButtonWithIconFromExternalActivity( - R.id.search_button, activityName, R.drawable.ic_home_search_normal_holo, - TOOLBAR_ICON_METADATA_NAME); - } - - if (searchButtonContainer != null) searchButtonContainer.setVisibility(View.VISIBLE); - searchButton.setVisibility(View.VISIBLE); - invalidatePressedFocusedStates(searchButtonContainer, searchButton); - return true; - } else { - // We disable both search and voice search when there is no global search provider - if (searchButtonContainer != null) searchButtonContainer.setVisibility(View.GONE); - if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.GONE); - if (searchButton != null) searchButton.setVisibility(View.GONE); - if (voiceButton != null) voiceButton.setVisibility(View.GONE); - updateVoiceButtonProxyVisible(false); - return false; - } - } - - protected void updateGlobalSearchIcon(Drawable.ConstantState d) { - if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) return; - final View searchButtonContainer = findViewById(R.id.search_button_container); - final View searchButton = (ImageView) findViewById(R.id.search_button); - updateButtonWithDrawable(R.id.search_button, d); - invalidatePressedFocusedStates(searchButtonContainer, searchButton); - } - - protected boolean updateVoiceSearchIcon(boolean searchVisible) { - if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) { - return true; - } - final View voiceButtonContainer = findViewById(R.id.voice_button_container); - final View voiceButton = findViewById(R.id.voice_button); - - // We only show/update the voice search icon if the search icon is enabled as well - final SearchManager searchManager = - (SearchManager) getSystemService(Context.SEARCH_SERVICE); - ComponentName globalSearchActivity = searchManager.getGlobalSearchActivity(); - - ComponentName activityName = null; - if (globalSearchActivity != null) { - // Check if the global search activity handles voice search - Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); - intent.setPackage(globalSearchActivity.getPackageName()); - activityName = intent.resolveActivity(getPackageManager()); - } - - if (activityName == null) { - // Fallback: check if an activity other than the global search activity - // resolves this - Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); - activityName = intent.resolveActivity(getPackageManager()); - } - if (searchVisible && activityName != null) { - int coi = getCurrentOrientationIndexForGlobalIcons(); - sVoiceSearchIcon[coi] = updateButtonWithIconFromExternalActivity( - R.id.voice_button, activityName, R.drawable.ic_home_voice_search_holo, - TOOLBAR_VOICE_SEARCH_ICON_METADATA_NAME); - if (sVoiceSearchIcon[coi] == null) { - sVoiceSearchIcon[coi] = updateButtonWithIconFromExternalActivity( - R.id.voice_button, activityName, R.drawable.ic_home_voice_search_holo, - TOOLBAR_ICON_METADATA_NAME); - } - if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.VISIBLE); - voiceButton.setVisibility(View.VISIBLE); - updateVoiceButtonProxyVisible(false); - invalidatePressedFocusedStates(voiceButtonContainer, voiceButton); - return true; - } else { - if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.GONE); - if (voiceButton != null) voiceButton.setVisibility(View.GONE); - updateVoiceButtonProxyVisible(false); - return false; - } - } - - protected void updateVoiceSearchIcon(Drawable.ConstantState d) { - if (mLauncherCallbacks != null && mLauncherCallbacks.providesSearch()) { - return; - } - - final View voiceButtonContainer = findViewById(R.id.voice_button_container); - final View voiceButton = findViewById(R.id.voice_button); - updateButtonWithDrawable(R.id.voice_button, d); - invalidatePressedFocusedStates(voiceButtonContainer, voiceButton); - } - - public void updateVoiceButtonProxyVisible(boolean forceDisableVoiceButtonProxy) { - if (mLauncherCallbacks != null) { - forceDisableVoiceButtonProxy |= mLauncherCallbacks.forceDisableVoiceButtonProxy(); - } - final View voiceButtonProxy = findViewById(R.id.voice_button_proxy); - if (voiceButtonProxy != null) { - boolean visible = !forceDisableVoiceButtonProxy && - mWorkspace.shouldVoiceButtonProxyBeVisible(); - voiceButtonProxy.setVisibility(visible ? View.VISIBLE : View.GONE); - voiceButtonProxy.bringToFront(); - } - } - - /** - * This is an overrid eot disable the voice button proxy. If disabled is true, then the voice button proxy - * will be hidden regardless of what shouldVoiceButtonProxyBeVisible() returns. - */ - public void disableVoiceButtonProxy(boolean disabled) { - updateVoiceButtonProxyVisible(disabled); - } - @Override public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { final boolean result = super.dispatchPopulateAccessibilityEvent(event); @@ -4883,13 +4581,15 @@ public class Launcher extends Activity getDeviceProfile().getSearchBarBounds(); } - @Override public void bindSearchablesChanged() { - boolean searchVisible = updateGlobalSearchIcon(); - boolean voiceVisible = updateVoiceSearchIcon(searchVisible); - if (mSearchDropTargetBar != null) { - mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible); + if (mSearchDropTargetBar == null) { + return; } + if (mQsb != null) { + mSearchDropTargetBar.removeView(mQsb); + mQsb = null; + } + mSearchDropTargetBar.setQsbSearchBar(getQsbBar()); } /** diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 365d989bf0..cadc06eefd 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -16,7 +16,6 @@ package com.android.launcher3; -import android.app.SearchManager; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; @@ -57,7 +56,6 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; -import java.util.List; public class LauncherProvider extends ContentProvider { private static final String TAG = "Launcher.LauncherProvider"; @@ -1342,29 +1340,8 @@ public class LauncherProvider extends ContentProvider { } private ComponentName getSearchWidgetProvider() { - SearchManager searchManager = - (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); - ComponentName searchComponent = searchManager.getGlobalSearchActivity(); - if (searchComponent == null) return null; - return getProviderInPackage(searchComponent.getPackageName()); - } - - /** - * Gets an appwidget provider from the given package. If the package contains more than - * one appwidget provider, an arbitrary one is returned. - */ - private ComponentName getProviderInPackage(String packageName) { - AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext); - List providers = appWidgetManager.getInstalledProviders(); - if (providers == null) return null; - final int providerCount = providers.size(); - for (int i = 0; i < providerCount; i++) { - ComponentName provider = providers.get(i).provider; - if (provider != null && provider.getPackageName().equals(packageName)) { - return provider; - } - } - return null; + AppWidgetProviderInfo searchProvider = Utilities.getSearchWidgetProvider(mContext); + return (searchProvider == null) ? null : searchProvider.provider; } private void migrateLauncher2Shortcuts(SQLiteDatabase db, Uri uri) { diff --git a/src/com/android/launcher3/SearchDropTargetBar.java b/src/com/android/launcher3/SearchDropTargetBar.java index 6205088c55..99c2e0859c 100644 --- a/src/com/android/launcher3/SearchDropTargetBar.java +++ b/src/com/android/launcher3/SearchDropTargetBar.java @@ -22,7 +22,6 @@ import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Rect; -import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.view.animation.AccelerateInterpolator; @@ -50,7 +49,6 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D private int mBarHeight; private boolean mDeferOnDragEnd = false; - private Drawable mPreviousBackground; private boolean mEnableDropDownDropTargets; public SearchDropTargetBar(Context context, AttributeSet attrs) { @@ -70,7 +68,10 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D dragController.setFlingToDeleteDropTarget(mDeleteDropTarget); mInfoDropTarget.setLauncher(launcher); mDeleteDropTarget.setLauncher(launcher); - mQSBSearchBar = launcher.getQsbBar(); + } + + public void setQsbSearchBar(View qsb) { + mQSBSearchBar = qsb; if (mQSBSearchBar != null) { if (mEnableDropDownDropTargets) { mQSBSearchBarAnim = LauncherAnimUtils.ofFloat(mQSBSearchBar, "translationY", 0, @@ -224,20 +225,6 @@ public class SearchDropTargetBar extends FrameLayout implements DragController.D } } - public void onSearchPackagesChanged(boolean searchVisible, boolean voiceVisible) { - if (mQSBSearchBar != null) { - Drawable bg = mQSBSearchBar.getBackground(); - if (bg != null && (!searchVisible && !voiceVisible)) { - // Save the background and disable it - mPreviousBackground = bg; - mQSBSearchBar.setBackgroundResource(0); - } else if (mPreviousBackground != null && (searchVisible || voiceVisible)) { - // Restore the background - mQSBSearchBar.setBackground(mPreviousBackground); - } - } - } - public Rect getSearchBarBounds() { if (mQSBSearchBar != null) { final int[] pos = new int[2]; diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 7a16914b9d..1e751b0581 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -18,6 +18,9 @@ package com.android.launcher3; import android.annotation.TargetApi; import android.app.Activity; +import android.app.SearchManager; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProviderInfo; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; @@ -39,8 +42,6 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.PaintDrawable; import android.os.Build; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; import android.util.Log; import android.util.Pair; import android.util.SparseArray; @@ -508,4 +509,37 @@ public final class Utilities { return v.getKeyDispatcherState() != null; } } + + /** + * Returns a widget with category {@link AppWidgetProviderInfo#WIDGET_CATEGORY_SEARCHBOX} + * provided by the same package which is set to be global search activity. + * If widgetCategory is not supported, or no such widget is found, returns the first widget + * provided by the package. + */ + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) + public static AppWidgetProviderInfo getSearchWidgetProvider(Context context) { + SearchManager searchManager = + (SearchManager) context.getSystemService(Context.SEARCH_SERVICE); + ComponentName searchComponent = searchManager.getGlobalSearchActivity(); + if (searchComponent == null) return null; + String providerPkg = searchComponent.getPackageName(); + + AppWidgetProviderInfo defaultWidgetForSearchPackage = null; + + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + for (AppWidgetProviderInfo info : appWidgetManager.getInstalledProviders()) { + if (info.provider.getPackageName().equals(providerPkg)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + if ((info.widgetCategory & AppWidgetProviderInfo.WIDGET_CATEGORY_SEARCHBOX) != 0) { + return info; + } else if (defaultWidgetForSearchPackage == null) { + defaultWidgetForSearchPackage = info; + } + } else { + return info; + } + } + } + return defaultWidgetForSearchPackage; + } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 66d4ac010b..c24e271770 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1329,13 +1329,11 @@ public class Workspace extends SmoothPagedView if (mCustomContentCallbacks != null) { mCustomContentCallbacks.onShow(false); mCustomContentShowTime = System.currentTimeMillis(); - mLauncher.updateVoiceButtonProxyVisible(false); } } else if (hasCustomContent() && getNextPage() != 0 && mCustomContentShowing) { mCustomContentShowing = false; if (mCustomContentCallbacks != null) { mCustomContentCallbacks.onHide(); - mLauncher.updateVoiceButtonProxyVisible(false); } } } @@ -2203,16 +2201,6 @@ public class Workspace extends SmoothPagedView return -offsetFromTopEdge + mInsets.top + offsetToCenterInOverview; } - boolean shouldVoiceButtonProxyBeVisible() { - if (isOnOrMovingToCustomContent()) { - return false; - } - if (mState != State.NORMAL) { - return false; - } - return true; - } - public void updateInteractionForState() { if (mState != State.NORMAL) { mLauncher.onInteractionBegin(); @@ -2468,7 +2456,6 @@ public class Workspace extends SmoothPagedView setScaleY(mNewScale); setTranslationY(finalWorkspaceTranslationY); } - mLauncher.updateVoiceButtonProxyVisible(false); if (stateIsNormal) { animateBackgroundGradient(0f, animated);