From bedf9232eb67a420f0372d3ca135ca13194e603b Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 10 Jul 2015 12:38:30 -0700 Subject: [PATCH] Adding market search. Change-Id: Id41615653cd4fa76213add4595418ad0cc6e7852 --- res/drawable-hdpi/ic_arrow_back_grey.png | Bin 190 -> 152 bytes res/drawable-hdpi/ic_search_grey.png | Bin 743 -> 419 bytes res/drawable-mdpi/ic_arrow_back_grey.png | Bin 151 -> 117 bytes res/drawable-mdpi/ic_search_grey.png | Bin 497 -> 263 bytes .../all_apps_search_market_bg.xml | 19 +++ res/drawable-xhdpi/ic_arrow_back_grey.png | Bin 234 -> 151 bytes res/drawable-xhdpi/ic_search_grey.png | Bin 972 -> 497 bytes res/drawable-xxhdpi/ic_arrow_back_grey.png | Bin 308 -> 190 bytes res/drawable-xxhdpi/ic_search_grey.png | Bin 1473 -> 743 bytes res/drawable-xxxhdpi/ic_arrow_back_grey.png | Bin 359 -> 234 bytes res/drawable-xxxhdpi/ic_search_grey.png | Bin 1996 -> 972 bytes res/drawable/all_apps_search_market_bg.xml | 20 +++ res/drawable/horizontal_line.xml | 21 +++ res/layout/all_apps_empty_search.xml | 15 +- res/layout/all_apps_search_bar.xml | 13 +- res/layout/all_apps_search_market.xml | 29 ++++ res/layout/all_apps_search_market_divider.xml | 27 ++++ res/values/colors.xml | 1 + res/values/strings.xml | 7 +- src/com/android/launcher3/Launcher.java | 15 +- .../android/launcher3/LauncherCallbacks.java | 1 + .../allapps/AllAppsContainerView.java | 31 ++--- .../launcher3/allapps/AllAppsGridAdapter.java | 130 +++++++++++++----- .../allapps/AllAppsRecyclerView.java | 2 + .../allapps/AlphabeticalAppsList.java | 61 ++++++-- .../allapps/DefaultAppSearchController.java | 18 +-- .../launcher3/testing/LauncherExtension.java | 5 + 27 files changed, 327 insertions(+), 88 deletions(-) create mode 100644 res/drawable-v21/all_apps_search_market_bg.xml create mode 100644 res/drawable/all_apps_search_market_bg.xml create mode 100644 res/drawable/horizontal_line.xml create mode 100644 res/layout/all_apps_search_market.xml create mode 100644 res/layout/all_apps_search_market_divider.xml diff --git a/res/drawable-hdpi/ic_arrow_back_grey.png b/res/drawable-hdpi/ic_arrow_back_grey.png index ccd3900ddf0e69d99a7e318847415e17dd6658e2..c7c00886fc0460c97b61834b365a5b085231d713 100755 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8yr+v}h{y5d1PRu|LQ~A9m<1f4 z@!#QwgKYA@>3KS-%lZs+t{9|UUSO2=xxgfiyR_$L*ey1%i$4?-lRH|rm~$M>ek)SJ ztGnUm%Bg|wy;8s241zopr00_P~ AVE_OC literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawT0LDHLo)8Yy}X;Z!GOm#(0>AF zf=_wPCUpbu9Sb@%CJOpr+#C16W82w|jt-4auR^*=ajkr)F+pz5Wpn+gIgETV z76lIuG%_#G_IuP(7}v1x=@*7c(K8j*{jSL(y$KKnF2+y85}Sb4q9e0K8L08vpFo6u#6qxnZDP4#Zy{J&<_6+V6Z9U0GRNu~%fvV%rmHy5)ETZG8j zeDFPDcU;t2-a&|VFjPc{v2UJ7h)FP1M~Iehp71t27-}Gd>zl{CV-XBh5Tfgwrx0Qh z3}q2wM#LvCBg8Nmim^n9l27`B5LKIV?P)8LQEIh_B)d(GsBl;3iCg^VSZnJ%sJ;fGchJim@r|&_z&%5m?h6C1xge+ zAml=uITteb zIx>biRql*3%6Y}aX|JV< zrTmfj6L%+Aa@?QO-stx3nQ*~mxwDuaO(DDQOt_@77PY0>m95G0K-v@6rzNyzE##eND2N}L#QAMHv8b?g1^=fDv5#-AACgcr64?^gy3&9gieCChU6~G_~3^H zzo8*CBMQ#@;1>lyr6H6S1uuPc>R*B%)DUX3&azRD^tg4FwHS@CDvF+y@IbckL$E7G zC-hryHJ?0?pDpsO(F$Lz!daKpdyCpMdZE|xew=lsBbgGfjb`}Z_=;G1YAw;?n5;6B zMmNORb^OEyW7WR4h%s(0r?1ZUnxe;+C5K=5|cz}vaTJdD;Yx%TP}1q|7>)}^@E!HV?-az z6dzG3vLd@OM|Dv$hE@icW}RcMDRILw8%#0iJVJR{Hzn8V-5ffU_JgR@*=VJMP{~DO zbt>&OUTMEVsUuW!D0Ti1O5Yo=v==BLhf?Epj4_6e2c=->{8b8$&Vy2rbi#xQ6DEx3 Z{037>p9cHt>oouX002ovPDHLkV1nM|U8ev5 diff --git a/res/drawable-mdpi/ic_arrow_back_grey.png b/res/drawable-mdpi/ic_arrow_back_grey.png index 11996efe3f710c98d035a90ab0927641f843ccc7..5892c77d536b14f8d1774404538cf712c0f70e8b 100755 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*18&4O<5R22v2@=~DY+1Oa(d6lW z@A~Ok6PMYvm^@u*5-R7`^~rvT=5c1t>kQ>V7ApnK_H4Q>Ur#}7p Q31|+3r>mdKI;Vst0Q|}+rvLx| literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DI8PVHkch)?CvN0zaNs$Tr=76D z!=$5!NBBVS#b*=WxhBTvdv~%h%yn_A`WhZx_4Rz%`hOjqwpCwV#Q$xd`L&+ohQG;! ylaGbfJF}A10=;!qv^pou>GZXWN)l%%DPrcRnNmLGu{Y2n1_n=8KbLh*2~7YQWHkZ+ diff --git a/res/drawable-mdpi/ic_search_grey.png b/res/drawable-mdpi/ic_search_grey.png index e83891c11cd38aa5f2974fbaa495674414143778..c386dbb381a8bfdc2857b33c5badfecd1a1b617e 100755 GIT binary patch literal 263 zcmV+i0r>ujP)uqdu(AZ{v63@si|En<+Du&b|n_#O!t_#Kl3^F-^GF> zH7{xo%s&nH*`QW?`YB<9xU(cDqhLiq_|#*>ol%2~35Z!tI3kvYtr7c}P$P1~28e4+ zcp);wdWdK0hQhER;uaGQh?QX_ViyzUh`_i(COi<+_+mXGux3DyAtevQHl4ILNpBGs z`?Iz*W6zZ*H+D>&~tr8By7U(n|H6a_XYwRGkFp$UBYyy56Q1kgFlncdP&a N002ovPDHLkV1oXZZ9V`1 literal 497 zcmV(4}cZTXIavHlJWd({i?CfszwG!Jejt zY{>{Ew|oMXrnziMHzf~Zg1bKpj$&IBwk4yK-0=w%nwGaEiK|$;MfkDfls1X@~rhG-ips31G)D4P?97WBbD9cxr nLQs}ko)AJ%l3LygC*;L9+X5DqusM8900000NkvXXu0mjfMZ?}n diff --git a/res/drawable-v21/all_apps_search_market_bg.xml b/res/drawable-v21/all_apps_search_market_bg.xml new file mode 100644 index 0000000000..7bd2f8816f --- /dev/null +++ b/res/drawable-v21/all_apps_search_market_bg.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/res/drawable-xhdpi/ic_arrow_back_grey.png b/res/drawable-xhdpi/ic_arrow_back_grey.png index 79b9b486c9bfee950fd4e9a9c4a8e78491cc137a..11996efe3f710c98d035a90ab0927641f843ccc7 100755 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DI8PVHkch)?CvN0zaNs$Tr=76D z!=$5!NBBVS#b*=WxhBTvdv~%h%yn_A`WhZx_4Rz%`hOjqwpCwV#Q$xd`L&+ohQG;! ylaGbfJF}A10=;!qv^pou>GZXWN)l%%DPrcRnNmLGu{Y2n1_n=8KbLh*2~7YQWHkZ+ literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgHhQ`^hE&{od-WvmAqN50i+l`4 zEeg+$8SP{&Y~0za(`UA9cDQ|`R^~JgpkjuI)@#w{*Z!Y#t@w4iuf!K)wKHEftJYko ze?KGo|FyC&FE20mpKn+D3(nwvS)X|Ft2pP4p!&v!+^?)67EY{sg^lT34!Em1Hnr4y z?C_qTu+Z;NToVhYsgRtIipPWx#+>aPXE>LiII8nd=BI>^(JOw==_gK4Dd2@TKwNu< UnT5E9m=lQW>FVdQ&MBb@00SypIsgCw diff --git a/res/drawable-xhdpi/ic_search_grey.png b/res/drawable-xhdpi/ic_search_grey.png index bd5fdf4446d4f0ceede6ae3ec23798e375333057..e83891c11cd38aa5f2974fbaa495674414143778 100755 GIT binary patch literal 497 zcmV(4}cZTXIavHlJWd({i?CfszwG!Jejt zY{>{Ew|oMXrnziMHzf~Zg1bKpj$&IBwk4yK-0=w%nwGaEiK|$;MfkDfls1X@~rhG-ips31G)D4P?97WBbD9cxr nLQs}ko)AJ%l3LygC*;L9+X5DqusM8900000NkvXXu0mjfMZ?}n literal 972 zcmV;-12g=IP)Q6U5| zpjV|r@F0+4LLvw$Sr5`6Gqbhb-I;c9-rTy~_j_-5K7R9?B}79*LqkJDLqo$N;713h zv4kX2ILA3sNMaGw=zy=-rB`DN-(X~Edx#=XjM7Wcg0-yD|8A>jE-v}C*vMIYrmdr< zIK-DChKs!A8!&Kz36vIEz7HQQiO;kxcnc~20e;w$Z@|D2LWPq52&cB?8!&K!hlP3i z=JLNFhA;vsg9|Q{A%HNZu${%ieffQ#-+9uQMV;wg^_WB2q$9~33%G?(Tp2G>o`dz* z+C^}$x)?^rH z;dGuVOH4JKd8|pi0XAi8x6Bn`xK>2VuVQB&TYL$IuTrdmF=pN`x5ejY)`d~A2I%d| ztZl}5ig8!$W|4m3b+$P}45zp?868xp&yKJrDb|QM1JhKfm?Nw+6zilo14~q>up_Lk z6l+490s3V-QeQxjV%-*JAVq~LbA;7Hu^x&ua88ACIl}6uSkF{9kXF459jiWwlj004 z3YkXRDAr|p3)z$-tZ|ApE-#gEV8%uXzRF7_d`#k1Z=17$;q;5lNB5{;bG8{5D8?PJ z`++F4p}A{|uY##?M8z5iFfaU-qv@f6d!l#6t4zozmbp3^t~cVV63v{_Y|vtX>=(n; zD5Em8&V=31|NIet92VgDUlyd;(&9mWCtj%K$WL1JP4uR1@OxfXiVu`r;%g?AF zf=_wPCUpbu9Sb@%CJOpr+#C16W82w|jt-4auR^*=ajkr)F+pz5Wpn+gIgETV z76lIuG%_#G_IuP(7}v1x=@*7c(K8j*{jSL(y$KKnF2+y85}Sb4q9e0K8L08vp>%KBk@HNZ zVx{@aYVHNIny)53`L5lp&TAlkY=VmCBnY~4XOo_G>yghj{DDs#Lp~{JRSHbC>F|G@{nd0Uj_Y$`rHIM~e2Pk?de@a`O_ALvu7?dn3(e`xSw&p zm3^;WNgfTB|ihv1@k;kgi&5>TkN+zluOVgV&Hq%X3<*c=z{|JSQzzF4Xu z@UYXx+^CboUuBoDr%Q#>#by_!L&`93sBHbtbZyUZH`mp%?|{L;;OXk;vd$@?2>|`B BbD#hK diff --git a/res/drawable-xxhdpi/ic_search_grey.png b/res/drawable-xxhdpi/ic_search_grey.png index 1d5c91361c1cd6ca4c4cd0f8e55653e94858bf44..f4c5e27d26bf76ca0a3675fe504a8c268a428d57 100755 GIT binary patch literal 743 zcmV?P)8LQEIh_B)d(GsBl;3iCg^VSZnJ%sJ;fGchJim@r|&_z&%5m?h6C1xge+ zAml=uITteb zIx>biRql*3%6Y}aX|JV< zrTmfj6L%+Aa@?QO-stx3nQ*~mxwDuaO(DDQOt_@77PY0>m95G0K-v@6rzNyzE##eND2N}L#QAMHv8b?g1^=fDv5#-AACgcr64?^gy3&9gieCChU6~G_~3^H zzo8*CBMQ#@;1>lyr6H6S1uuPc>R*B%)DUX3&azRD^tg4FwHS@CDvF+y@IbckL$E7G zC-hryHJ?0?pDpsO(F$Lz!daKpdyCpMdZE|xew=lsBbgGfjb`}Z_=;G1YAw;?n5;6B zMmNORb^OEyW7WR4h%s(0r?1ZUnxe;+C5K=5|cz}vaTJdD;Yx%TP}1q|7>)}^@E!HV?-az z6dzG3vLd@OM|Dv$hE@icW}RcMDRILw8%#0iJVJR{Hzn8V-5ffU_JgR@*=VJMP{~DO zbt>&OUTMEVsUuW!D0Ti1O5Yo=v==BLhf?Epj4_6e2c=->{8b8$&Vy2rbi#xQ6DEx3 Z{037>p9cHt>oouX002ovPDHLkV1nM|U8ev5 literal 1473 zcmV;y1wQ(TP)TOVFn)54Nfv%JriIp)8Z8t87Ht(*q9GE6f~81| zVyRj`aI5g7_1lezpkPc96SYvQXu(}qB1Ei8s}@Y7F^IUA1cl;PG|8N1(M2iq&gAya zJNL{@^7{{-_s*SjW-hVwM>Wf6;WVA}($4_HBVN%*FP)qQ8hHz`OYmhP%Q?n<0yIWI z53MvZaqI+I$Vr}}d3r)S3raoE1lDjHEx;|B$(3fHGFI~dO+YVAr59*EzoQAd&b-nI zRK;P2(1Z3brCx23x^+0QRiF)*$=IjP4;{ck1{n-qZ;|DY)9pthWD91T8 zMQ6xmDNtD+pPqm_9Az_$nMpMjBdVFnVz$sq7Xdm-?O6(RV3cV(S#)FPuaixa#?W39?UpgFuiWBkZ_NS3Q(t&76VP-0qV3JNmvW&)I-i*pf!)Xn7IOu>*Bz zuoLK*bNZ=8Je%#Dh>q9^bRP}XiKO5v8mik$py|#tT#uw+BN}R$X*L2ab6#N8NDAI@ z9?()7fm}oX9V8`pT?>wlK&R1AN0F4Yp`ki#1nNXXZAMbE6%BRSMxb6a)M6wh^{%bn zMxcH))J!BLwP>ivHUbTxp{kLT)S#hW*a$R?hN?hPQi+Bd%0!^?K(EYRVlQn3>Kp%( z9>2|d85Fk^eNen)d(~(y`l``xBM@k)E+i%Q&`{fK1ZqS>1x!!rafdoI*a%cjfQH(D zq+pZtfTr3AB=n%6t{^G+)%`rmN}yKf8O}mH`^fqEJ!~gXBkFJh@$3}pu*A}f!za!c zhcgh5KHv=+s?XAkL!ljY_zCgoJnGPfSPHZNMN?ln8c?TCYy}c-p$-q3jCe4WN2tSf z#9E+c)ag9p!9~>R3wwcb^rB863EP1>-J#50AfX9$3iujH&^Ks=&#nGW`UdJW$T}n; z8yG^JE+bY0&0`RC3TW|uaVZ0QY&Vc_2#s`sDFxoSE~1fkB9;SH(v3!XSilOw$zix=>GUGaEsuLW`3~NJ1qC z8AKEIn*Ed`|Ii4#O$Bn8%QZAXSExh&MT?V2NYYAr&;)d|0{IV(u`3IKgd9!WL|&w>7KpU!R=gn}rB-jdmzt$9)b^L{`I8Ot3U$r6Qo_hBElT?iym zxPNcjeBhYaI2_%p}0tqCL1rtahfdmprAb|ujfdmpr bpdafC?m9)~Vz%P)00000NkvXXu0mjf^4^xC diff --git a/res/drawable-xxxhdpi/ic_arrow_back_grey.png b/res/drawable-xxxhdpi/ic_arrow_back_grey.png index 854a9bd1a9a74af9350f0bb94fe2a680e1bf2a99..79b9b486c9bfee950fd4e9a9c4a8e78491cc137a 100755 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgHhQ`^hE&{od-WvmAqN50i+l`4 zEeg+$8SP{&Y~0za(`UA9cDQ|`R^~JgpkjuI)@#w{*Z!Y#t@w4iuf!K)wKHEftJYko ze?KGo|FyC&FE20mpKn+D3(nwvS)X|Ft2pP4p!&v!+^?)67EY{sg^lT34!Em1Hnr4y z?C_qTu+Z;NToVhYsgRtIipPWx#+>aPXE>LiII8nd=BI>^(JOw==_gK4Dd2@TKwNu< UnT5E9m=lQW>FVdQ&MBb@00SypIsgCw literal 359 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 e1OR{l0MI{a5w(t + + + + + + diff --git a/res/drawable/horizontal_line.xml b/res/drawable/horizontal_line.xml new file mode 100644 index 0000000000..3f3f17e351 --- /dev/null +++ b/res/drawable/horizontal_line.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/res/layout/all_apps_empty_search.xml b/res/layout/all_apps_empty_search.xml index f60c4a09ad..b9b493eab3 100644 --- a/res/layout/all_apps_empty_search.xml +++ b/res/layout/all_apps_empty_search.xml @@ -18,11 +18,14 @@ android:id="@+id/empty_text" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:gravity="center" - android:paddingTop="24dp" - android:paddingBottom="24dp" - android:paddingRight="@dimen/all_apps_grid_view_start_margin" - android:textSize="16sp" - android:textColor="#4c4c4c" + android:gravity="start" + android:paddingTop="20dp" + android:paddingBottom="8dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:fontFamily="sans-serif-medium" + android:textSize="14sp" + android:textColor="#212121" + android:alpha="0.56" android:focusable="false" /> diff --git a/res/layout/all_apps_search_bar.xml b/res/layout/all_apps_search_bar.xml index cf30eac364..4947203df5 100644 --- a/res/layout/all_apps_search_bar.xml +++ b/res/layout/all_apps_search_bar.xml @@ -32,11 +32,10 @@ android:id="@+id/dismiss_search_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="4dp" - android:layout_marginStart="4dp" + android:layout_gravity="center_vertical" + android:layout_marginLeft="16dp" + android:layout_marginStart="16dp" android:contentDescription="@string/all_apps_button_label" - android:paddingBottom="13dp" - android:paddingTop="13dp" android:src="@drawable/ic_arrow_back_grey" /> \ No newline at end of file diff --git a/res/layout/all_apps_search_market.xml b/res/layout/all_apps_search_market.xml new file mode 100644 index 0000000000..1282069c88 --- /dev/null +++ b/res/layout/all_apps_search_market.xml @@ -0,0 +1,29 @@ + + + diff --git a/res/layout/all_apps_search_market_divider.xml b/res/layout/all_apps_search_market_divider.xml new file mode 100644 index 0000000000..39097818f7 --- /dev/null +++ b/res/layout/all_apps_search_market_divider.xml @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/res/values/colors.xml b/res/values/colors.xml index 51e4d40a5b..0add48cd85 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -44,6 +44,7 @@ #009688 + #DDDDDD #42FFFFFF diff --git a/res/values/strings.xml b/res/values/strings.xml index 88f149bd0e..fefadef282 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -24,10 +24,10 @@ content://com.android.launcher2.settings/favorites?notify=true - + com.android.launcher3.permission.RECEIVE_LAUNCH_BROADCASTS - + com.android.launcher3.permission.RECEIVE_FIRST_LOAD_BROADCAST @@ -61,6 +61,9 @@ Loading Apps… No Apps found matching \"%1$s\" + + Go to %1$s diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 9d04770af6..2d338e3d42 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2132,6 +2132,15 @@ public class Launcher extends Activity } } + public void startSearchFromAllApps(View v, Intent searchIntent, String searchQuery) { + if (mLauncherCallbacks != null && mLauncherCallbacks.startSearchFromAllApps(searchQuery)) { + return; + } + + // If not handled, then just start the provided search intent + startActivitySafely(v, searchIntent, null); + } + public boolean isOnCustomContent() { return mWorkspace.isOnOrMovingToCustomContent(); } @@ -2533,6 +2542,10 @@ public class Launcher extends Activity if (!isAppsViewVisible()) { showAppsView(true /* animated */, false /* resetListToTop */, true /* updatePredictedApps */, false /* focusSearchBar */); + + if (mLauncherCallbacks != null) { + mLauncherCallbacks.onClickAllAppsButton(v); + } } } @@ -2924,7 +2937,7 @@ public class Launcher extends Activity return false; } - @Thunk boolean startActivitySafely(View v, Intent intent, Object tag) { + public boolean startActivitySafely(View v, Intent intent, Object tag) { boolean success = false; if (mIsSafeModeEnabled && !Utilities.isSystemApp(this, intent)) { Toast.makeText(this, R.string.safemode_shortcut_error, Toast.LENGTH_SHORT).show(); diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java index 6618cca781..e34bd57fdd 100644 --- a/src/com/android/launcher3/LauncherCallbacks.java +++ b/src/com/android/launcher3/LauncherCallbacks.java @@ -77,6 +77,7 @@ public interface LauncherCallbacks { public boolean providesSearch(); public boolean startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, Rect sourceBounds); + public boolean startSearchFromAllApps(String query); @Deprecated public void startVoice(); public boolean hasCustomContentToLeft(); diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 010b2cb486..e129dc6d37 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -16,34 +16,26 @@ package com.android.launcher3.allapps; import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.content.Context; +import android.content.Intent; import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.InsetDrawable; -import android.os.Build; -import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.view.KeyEvent; -import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.widget.FrameLayout; import android.widget.LinearLayout; - import com.android.launcher3.AppInfo; import com.android.launcher3.BaseContainerView; -import com.android.launcher3.BubbleTextView; import com.android.launcher3.CellLayout; -import com.android.launcher3.CheckLongPressHelper; import com.android.launcher3.DeleteDropTarget; import com.android.launcher3.DeviceProfile; import com.android.launcher3.DragSource; @@ -53,7 +45,6 @@ import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherTransitionable; import com.android.launcher3.R; -import com.android.launcher3.Stats; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.util.ComponentKey; @@ -155,6 +146,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Thunk AllAppsSearchBarController mSearchBarController; private ViewGroup mSearchBarContainerView; private View mSearchBarView; + private SpannableStringBuilder mSearchQueryBuilder = null; private int mSectionNamesMargin; private int mNumAppsPerRow; @@ -165,7 +157,13 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc // This coordinate is relative to its parent private final Point mIconLastTouchPos = new Point(); - private SpannableStringBuilder mSearchQueryBuilder = null; + private View.OnClickListener mSearchClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent searchIntent = (Intent) v.getTag(); + mLauncher.startActivitySafely(v, searchIntent, null); + } + }; public AllAppsContainerView(Context context) { this(context, null); @@ -182,8 +180,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mLauncher = (Launcher) context; mSectionNamesMargin = res.getDimensionPixelSize(R.dimen.all_apps_grid_view_start_margin); mApps = new AlphabeticalAppsList(context); - mAdapter = new AllAppsGridAdapter(context, mApps, this, mLauncher, this); - mAdapter.setEmptySearchText(res.getString(R.string.all_apps_loading_message)); + mAdapter = new AllAppsGridAdapter(mLauncher, mApps, this, mLauncher, this); mApps.setAdapter(mAdapter); mLayoutManager = mAdapter.getLayoutManager(); mItemDecoration = mAdapter.getItemDecoration(); @@ -615,13 +612,9 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override public void onSearchResult(String query, ArrayList apps) { if (apps != null) { - if (apps.isEmpty()) { - String formatStr = getResources().getString(R.string.all_apps_no_search_results); - mAdapter.setEmptySearchText(String.format(formatStr, query)); - } else { - mAppsRecyclerView.scrollToTop(); - } mApps.setOrderedFilter(apps); + mAdapter.setLastSearchQuery(query); + mAppsRecyclerView.scrollToTop(); } } diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index e96567c413..4acfc5ca6a 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -16,14 +16,17 @@ package com.android.launcher3.allapps; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PointF; import android.graphics.Rect; -import android.os.Handler; import android.support.v4.view.accessibility.AccessibilityRecordCompat; import android.support.v4.view.accessibility.AccessibilityEventCompat; +import android.net.Uri; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -34,6 +37,7 @@ import android.view.accessibility.AccessibilityEvent; import android.widget.TextView; import com.android.launcher3.AppInfo; import com.android.launcher3.BubbleTextView; +import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.Thunk; @@ -58,6 +62,10 @@ class AllAppsGridAdapter extends RecyclerView.Adapter 1) { return false; } - // If there is exactly one icon, then quick-launch it + // Otherwise, find the first icon, or fallback to the search-market-view and launch it List items = mApps.getAdapterItems(); for (int i = 0; i < items.size(); i++) { AlphabeticalAppsList.AdapterItem item = items.get(i); - if (item.viewType == AllAppsGridAdapter.ICON_VIEW_TYPE) { - mAppsRecyclerView.getChildAt(i).performClick(); - mInputMethodManager.hideSoftInputFromWindow( - mContainerView.getWindowToken(), 0); - return true; + switch (item.viewType) { + case AllAppsGridAdapter.ICON_VIEW_TYPE: + case AllAppsGridAdapter.SEARCH_MARKET_VIEW_TYPE: + mAppsRecyclerView.getChildAt(i).performClick(); + mInputMethodManager.hideSoftInputFromWindow( + mContainerView.getWindowToken(), 0); + return true; } } return false; diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java index 34492e4cae..8702877bf5 100644 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ b/src/com/android/launcher3/testing/LauncherExtension.java @@ -201,6 +201,11 @@ public class LauncherExtension extends Launcher { return false; } + @Override + public boolean startSearchFromAllApps(String query) { + return false; + } + @Override public void startVoice() { }