From 4e7bd693b20b471f1d170909e9609fe5c97a72f0 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 14 Jul 2017 13:29:50 -0700 Subject: [PATCH] Misc search fix - Remove incorrect summary from set date/time - Remove some unused resources - Remove ability to clear individual search history - Add remove all query history menu item Change-Id: I4383d075310297163fd2206d1a5b9c8f4ed94078 Fix: 62741488 Fix: 31589605 Test: robotests --- AndroidManifest.xml | 2 +- res/drawable-hdpi/ic_search_history_am.png | Bin 767 -> 0 bytes res/drawable-mdpi/ic_search_history_am.png | Bin 643 -> 0 bytes res/drawable-xhdpi/ic_search_history_am.png | Bin 836 -> 0 bytes res/drawable-xxhdpi/ic_search_history_am.png | Bin 1116 -> 0 bytes res/drawable-xxxhdpi/ic_search_history_am.png | Bin 15862 -> 0 bytes res/drawable/ic_cross_grey_24dp.xml | 24 -------- res/drawable/ic_search_history.xml | 23 ------- res/layout/search_saved_query_item.xml | 27 ++++---- res/layout/search_suggestion_item.xml | 58 ------------------ res/values-sw600dp/dimens.xml | 7 --- res/values/dimens.xml | 23 ------- res/values/strings.xml | 3 + res/xml/date_time_prefs.xml | 42 ++++++------- .../settings/search/SavedQueryController.java | 30 +++++++-- .../settings/search/SavedQueryRemover.java | 14 ++--- .../settings/search/SavedQueryViewHolder.java | 5 +- .../settings/search/SearchFragment.java | 14 +++-- .../CursorToSearchResultConverterTest.java | 10 +-- .../search/InlineSwitchViewHolderTest.java | 12 ++-- .../search/IntentSearchViewHolderTest.java | 2 +- .../SavedQueryRecorderAndRemoverTest.java | 26 ++++++-- .../search/SavedQueryViewHolderTest.java | 8 +-- .../search/SearchResultBuilderTest.java | 8 +-- .../search/SearchResultsAdapterTest.java | 20 +++--- 25 files changed, 128 insertions(+), 230 deletions(-) delete mode 100644 res/drawable-hdpi/ic_search_history_am.png delete mode 100644 res/drawable-mdpi/ic_search_history_am.png delete mode 100644 res/drawable-xhdpi/ic_search_history_am.png delete mode 100644 res/drawable-xxhdpi/ic_search_history_am.png delete mode 100644 res/drawable-xxxhdpi/ic_search_history_am.png delete mode 100644 res/drawable/ic_cross_grey_24dp.xml delete mode 100644 res/drawable/ic_search_history.xml delete mode 100644 res/layout/search_suggestion_item.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c73c909bbf1..925b936da2a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -210,7 +210,7 @@ diff --git a/res/drawable-hdpi/ic_search_history_am.png b/res/drawable-hdpi/ic_search_history_am.png deleted file mode 100644 index eaef70cbcddcf0ba131c830fc88f0993d01ff09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBGB7kWGcf%852S(Or3MTPuM!v-tbhiH=TC}1>IPKHmgMd3 z!tfsi7wla=87RV8;1OBOz`!jG!i)^F=12gI|KjQ57!q;#?ez0r%!UH(``>Ik+RX0X z^j_&zTrFR&Xy)Edb=JKVU->gw;}2(R@9T|oWy!tntY)$1_T3WmPz~9L878|=PXDQD ztf`ZeSe$muviabFoq_`4GWje$jFVJ;zTetvD7(-jY&&NTbN-EtpEo2T*yI}36}%>; z#IUYd_$Pwx9#da~|ALp6ebwJ%8}3AGZ3x;L)u4YhJUu>?t>}~G%vq1z4{#T#22`#t zpTxV=mWy%9){q3Z16miD{8(*tEnTNR(PHju3{P;qrG7x_0$bE1wM%ErxAxZx2DD5) z$&h}4eS`Moci#1{7C1efyD9lD%eltr1kVNE8mv28Cc3L%o5^J9$=8t0dR6emgMfVw zx(nK;2Dockgh)>CW=(#hW`D*-Ye&sKK`+se{`;R;n?J1$Rb%%$EzaY`oa){F?X%L< zsq2})ymrb|nEZM6=iXDsuAjEPcJuOo_v*aBjtS{2ese8oI+?!b-l-W(+P-unsnx3f(vKV~@HS>RFF^4uR(s0_>x$%OH ze|+=;sZAYs5?C0u8mw6ISYB~g&yUidWi1iF7$QE~M*0As*>=mwbZ!$yt_Kn~8041N zemo~DqrrYE;roTn=W87OZmOJ~(k-ES`Ocs3|BHXK-8g#D=*hxG_P|7;TH+c}l9E`G zYL#4+3Zxi}3=B!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pWm85kOx85n;42hu?CQUeBtR|yOZRx=nF#PcV`A9Vw&WlQpQ zcVYMsf(!O8p9~b?EbxddW?U9@CDF{jI;I7?>USUrX*?}R7LQBZYa?3x z@9*1u-X9%!y)@mnFkU!+)v8_gf+92215H*gpZR_Dk35~GNP(OW9O4x{@f8iSchnB; z{?S*fGkI@wSlajEH>@0gcqXjPy(V0@<$Oh_enm&=qmQee{|3K!#>IWBkd2ekwbFFvVj_`_JW1SCj{)Kbj%`9R&H7|X; zV(4iG%cI3L922A$ez>VPSH@A;<-zU!PDKt2t@YAwG3E1mGWvR)zBFISZKBMlLaik} zN5XCi?^=KRdF_OwAtzpZ@iBYLvQhokI;$(W4}a{t9P9je*X8HZ4)4-}TYTpJPoCh< z_$jpP(dm^9DsL7Z+W)pN&FX>v1oK->^68oPbX=KVYE8=ilV8%cCy>RK>1D~@%U;1- zLRo5^nE8J2zH*qX-(&PQ6Bse7C9V-ADTyViR>?)FK#IZ0z|ch3z)aV`GQ`lr%Fxov q&{WsJ+{(bf^ULo(6b-rgDVb@NxHVX;bT$HNVDNPHb6Mw<&;$T@*8Nxj diff --git a/res/drawable-xhdpi/ic_search_history_am.png b/res/drawable-xhdpi/ic_search_history_am.png deleted file mode 100644 index 7183fc214e6db4d7a70a44d4ee46c8fed263fb99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CDO3=9p;3=BX218JamDbSQx2@DKYGZ+}e^C!h0bpxtpOY(Mi zVfYV%3-&Ib3>4uk@Q5sCVBi)8VMc~ob0ioTm@GYA978hhy`AaXciBMXczvccTj+*_ z)4b2P-YnXA=uO+I4Uf4z?l5h1lHv_9RyNVu;n;UjRls9Q&I|X5A3F^LCtJvG+k7Iv z>&=R_f9q<`e>=_HBW0R(Wd&c?nb{`3-uAB@XTDSM6q;3Sq4n8;#b%+se#!y2TXD7q z){Ij+Ki+RlKd_D2gYC!x{Rc7;(!~~x29EQXif69jc3^p9)pL={!9Q=C>jB3VTna`} zmmkP}n0&`N^x*>M4B!65WbT4fGdN~2y>IAWVY+GipSQ3e%X z^=@7VmA3pwY<>V`Hkj=Z#@+hD2k(x-0F2j@EXAe(Mn8lEB^uYCn z4qF&69OGqL#Cu?Y!Yw8qwnf|xye*$~w~0DDoUp2?gC*%9*CH+j?U&mdcNDS)vI|(feg7=l=x1BN1L!NwARII8s(UDlV`LcJ&wqG4K-DexZ zSFmgh7Q4Mp<;KVViyui z1kU@yFJ~#ksnsr!4oq39C9V-ADTyViR>?)FK#IZ0z|ch3z)aV`GQ`lr%Fxov&{WsJ m+{(bf^ULo(6b-rgDVb@NxHVX;bT$HNVDNPHb6Mw<&;$ULI!$r_ diff --git a/res/drawable-xxhdpi/ic_search_history_am.png b/res/drawable-xxhdpi/ic_search_history_am.png deleted file mode 100644 index 174409b92dbde0715d4628f444f6d9da78da0be5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pWm85kOx85n;42hu?CQUeBtR|yOZRx=nF#PcV`A9Vw&WlQpQ zcVYMsf(!O8p9~b?EbxddW?Auorfif_c9$H!*QI3{_%=j}oFu0@?{8*87{ z>^oyIVG0rm*&g-UPlB&KPW#5|uY0E5{}xrn@+xXxxor2AscS3?;)-W#Z!*k~{?Rxi zWcj(q=mR_Qf=h0yWw7rEE52)GIz4?#u6)VEg?V)O9@%&9 zeB8dLKOtbAqj8GV2ic0brt4Z~dtT)EY?h_0CY#Dz&GYBm-5r~xo+;HX$xJ_9-WV+Q zdD(>DJGU132C#ejMO)8fX!n>TmvUSyvEl#Mt7=6%ckORjAN4r2{&H&LZH65OH+2S{ zTzaYaf!znY-*Yp+Rd%!HeQ!u++3r2L=Dy;J(+l#_E*U>yxpB#-DfJGU+T9sXB{cc@n&WQ;4(7IV6liZQ;@YmsduXjl^Ony0GSzqZIvBQJ5?V6zipCwU zwE^c;G8pof#v8id*~ZDU-An0h!)?vRhhdSbvznrphOgw@5i0lihWqv?F1?Q1cK>&9 zU$AH{Qp;_MmiL@xekX_bRYYA{_9e9)vI;xiK4LV#eaP*E8q;6XO@H2nsx{i?9haCS z(&U(&z`tW=_1nOL=dH|nTl@32aayIDI{NW{l_~h`(YvE^?pm=UZ~06gg?(RVxOmI4 zmF^z74`e^Jl%4wYc{k^z6~+$)Cp|kgZ#V14dz_Nn6?lwhuzcIWyFy^Qg23faf$jPS zoV5<<&R~(0+QOMvt93}%qM1jn(fv-7vrjn34%V3p&doW6vlVyLE>gMEWOgD!Xw9Rv zTSrP~r{3Y3EVRebae;JcGo4 zbml17CU3mBWx^tp6A3}wKbZG8{F-BaqQ=8liCg{wLsMM?b1MS_&o96GP&DM`r(~v8;?`iX(ivm}gQu&X J%Q~loCIH4R+?oIY diff --git a/res/drawable-xxxhdpi/ic_search_history_am.png b/res/drawable-xxxhdpi/ic_search_history_am.png deleted file mode 100644 index ffce51ee0b6d59c5671c11e3434ceea90a8f2285..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15862 zcmeI3dsGuw9>)g*iU<`{5cQ}bK-FrPOdvqg5QIcc#3=F*sPY&l1B@n_m`n^%MIb% z-tYH!XFm6L@610_ow#zDkJn5u2!ebxYE=^bo5OrO-RW=j&bFiU&qR|t!vaB*rZOKl zsBUi{1n~k1r7|(GfTT!E0cqlEluEwIOy&`K9D)kZV>vm`ee=V&-5-ZI9Epi3N!@e0 z184ZnXmpf3SGJ>UPZ@IrA%AeeNuyhk^bmX-Z|e(0Ogw7Y8(kEbjy(!@>V@i1>5&#q3|U2SYM-FW_6eapJ7gbcceC@9kW!$Gd4F8h zOWtH)`;5%Mgc)g~udykZS8knyD$96Qx~nMY+N^+t-4E?v`+D)~Z@hlv%SGp2Y2JcO z&cF2O3m=?mzgii-^V+y)g3ksRwO2gkN%G{P%EEb9CtlNj_e@vzqUVDTD^I8PZcA)B zJ-I8(&wuCf7rS1}{@~&2S=HG)_t!lASNX%Wuu!-q{*@JLGOzDm*YNK4{<)QJY^z*e zyqv5(+ca%|-TvQF9^Lbd zHKHY__4C~7@7)i`de+rPf3^70w8uA0z?RLPC&>?;?vYj$%6zjI5{n7I^pl{m+2QCzG>A3yZc+Ji!UGUu6kPXTGZ!K@gi~f z(SPM-pTJKYJ#}dQmnk<7rniI~piZysvCdqq{RIXds|zL~K<^?L8vbLVL5Db2Hw7q|A6H*Qx2ydBo})*?&a z@!FsRD-UhVXd#b(UuCFY5lNm~f5dS6p#%GF+gh$jTVVZNyIuN3$s8i~;gZemnx5o; zpA2cZV=eh?$xjK(4uxdhv28i2tzT>Vx${zT>(+14ud(KNw;S+Q-=d;k>u+oOY||AH zTf}$zFZY!H+!gClvhUXCw@zKXyA|?*CP&=beKiw;qER9xol4iPkYS`D4Aqgjcvzvq zM6W0alE)UBP;3KE@pJKf!Wbj?xus3OCv-7_G>KNEH7W4|LS1aelZ#iTV8t6SsZJ29 z@RAqG=mZ9wLivRTz0o2oj1f5V%IKJBh6Q}5gxU}zh+_uir)v}WO45w;C1DaFCPE_k zQPMC(f<#0ki}+#@5)O;PVI*9Lh-D(F43Y2$4uQgpj^t)to-9eVbYM98UyPuDqD(Rv zw%Kf9w(v00oDU;XsT3B8VX;_9D}!qSSqiQhlGE2JQ<`ybVC?H z=wwo{1QA7vb;77$?c3d%F6adtoxZab)XYhn{fmX(rTc z!I>2sBN$w=L!02x9>;i`D_@3U%x>vDBy5`G+1K}7b_xAz~KUEu*MuN zRz#qH!v)e{jX7Mbh(G~{3#7psbGTR$fdUQ}NP{)zaIqo+1spDr25bC4TwcTP4dO=n zWkDPLR-n#W<3qnu$j8)4S_mo*g`iS91ohpefByqPRuKeU&VeA=vk)|$+?CzF6oTA( zG^)6i!t+0#KfdyPk?(}wt-iCSoSv9fc5w5wiVDH_BZsdl7WjosUHgdp zxf6Ti7pY$jxLEN9<=%IpATNGfw{cB;-H+7L_@-ZuHHezsdZ#{?5&vtp^quW}zs6iZ zZ=C%ibmob+w$ApGi(ko5XXY+nsm=~gSkbY%J7IZ8a^nhhM{3@$Q;t>pII=6SSx{_O zWL3@ENe!hnEnh6&Tho>n9~}@;7jvQFQ`CK*(Lb(yP0NnJxI@|MC!asp+dXgZm(b0L zN3Wb152b(e*_owB$~G*7I^n-W?vfrn0hJzWtC@4AGeKE8r)xp?)$K$}e~|pU7k@i^ yWXJW1KIcz=m>mSC+{)=eXyS_*?7m3rcu4YI^E6#ov5a}^RI_BI>R^0M`Tqb7@9ot9 diff --git a/res/drawable/ic_cross_grey_24dp.xml b/res/drawable/ic_cross_grey_24dp.xml deleted file mode 100644 index 312c034a786..00000000000 --- a/res/drawable/ic_cross_grey_24dp.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/res/drawable/ic_search_history.xml b/res/drawable/ic_search_history.xml deleted file mode 100644 index 05384d27d2b..00000000000 --- a/res/drawable/ic_search_history.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - diff --git a/res/layout/search_saved_query_item.xml b/res/layout/search_saved_query_item.xml index 50001a5ff62..f8c239a9f04 100644 --- a/res/layout/search_saved_query_item.xml +++ b/res/layout/search_saved_query_item.xml @@ -20,28 +20,25 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:background="?android:attr/selectableItemBackground" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical"> + + - - \ No newline at end of file diff --git a/res/layout/search_suggestion_item.xml b/res/layout/search_suggestion_item.xml deleted file mode 100644 index 85a33816726..00000000000 --- a/res/layout/search_suggestion_item.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml index 041191467fe..4d309692663 100755 --- a/res/values-sw600dp/dimens.xml +++ b/res/values-sw600dp/dimens.xml @@ -59,13 +59,6 @@ 80dp 24dp - - 24dp - - - 24dp - 32dp - 64dp diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 4bbc43a7a8f..0e10a716df7 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -96,9 +96,6 @@ 2dp - - 48dp - 72dp @@ -116,26 +113,6 @@ 72dp 16dp - - 4dp - - - 12dp - - - 24dp - - - 12dp - 32dp - - - 24dp - - - 32dp - 32dp - diff --git a/res/values/strings.xml b/res/values/strings.xml index df2168d7ed9..a9a0892e4e2 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2345,6 +2345,9 @@ No results + + Clear history + Display diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml index 78591198fe3..c9ad0dddb23 100644 --- a/res/xml/date_time_prefs.xml +++ b/res/xml/date_time_prefs.xml @@ -14,44 +14,44 @@ limitations under the License. --> - + - + settings:restrictedSwitchSummary="@string/enabled_by_admin" /> - + android:summaryOff="@string/zone_auto_summaryOff" /> - + android:summary="@string/summary_placeholder" /> - + android:summary="@string/summary_placeholder" /> + android:summary="GMT-8:00" /> - + diff --git a/src/com/android/settings/search/SavedQueryController.java b/src/com/android/settings/search/SavedQueryController.java index f6a3ff6972d..c61d5449783 100644 --- a/src/com/android/settings/search/SavedQueryController.java +++ b/src/com/android/settings/search/SavedQueryController.java @@ -21,12 +21,16 @@ import android.app.LoaderManager; import android.content.Context; import android.content.Loader; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import com.android.settings.R; import com.android.settings.overlay.FeatureFactory; import java.util.List; -public class SavedQueryController implements LoaderManager.LoaderCallbacks { +public class SavedQueryController implements LoaderManager.LoaderCallbacks, + MenuItem.OnMenuItemClickListener { // TODO: make a generic background task manager to handle one-off tasks like this one. @@ -35,6 +39,8 @@ public class SavedQueryController implements LoaderManager.LoaderCallbacks { private static final int LOADER_ID_SAVED_QUERIES = 2; private static final String ARG_QUERY = "remove_query"; + private static final int MENU_SEARCH_HISTORY = 1000; + private final Context mContext; private final LoaderManager mLoaderManager; private final SearchFeatureProvider mSearchFeatureProvider; @@ -55,7 +61,7 @@ public class SavedQueryController implements LoaderManager.LoaderCallbacks { case LOADER_ID_SAVE_QUERY_TASK: return new SavedQueryRecorder(mContext, args.getString(ARG_QUERY)); case LOADER_ID_REMOVE_QUERY_TASK: - return new SavedQueryRemover(mContext, args.getString(ARG_QUERY)); + return new SavedQueryRemover(mContext); case LOADER_ID_SAVED_QUERIES: return mSearchFeatureProvider.getSavedQueryLoader(mContext); } @@ -76,7 +82,21 @@ public class SavedQueryController implements LoaderManager.LoaderCallbacks { @Override public void onLoaderReset(Loader loader) { + } + @Override + public boolean onMenuItemClick(MenuItem item) { + if (item.getItemId() != MENU_SEARCH_HISTORY) { + return false; + } + removeQueries(); + return true; + } + + public void buildMenuItem(Menu menu) { + final MenuItem item = + menu.add(Menu.NONE, MENU_SEARCH_HISTORY, Menu.NONE, R.string.search_clear_history); + item.setOnMenuItemClickListener(this); } public void saveQuery(String query) { @@ -85,9 +105,11 @@ public class SavedQueryController implements LoaderManager.LoaderCallbacks { mLoaderManager.restartLoader(LOADER_ID_SAVE_QUERY_TASK, args, this); } - public void removeQuery(String query) { + /** + * Remove all saved queries from DB + */ + public void removeQueries() { final Bundle args = new Bundle(); - args.putString(ARG_QUERY, query); mLoaderManager.restartLoader(LOADER_ID_REMOVE_QUERY_TASK, args, this); } diff --git a/src/com/android/settings/search/SavedQueryRemover.java b/src/com/android/settings/search/SavedQueryRemover.java index 47bb3baa2e8..77334a5ab55 100644 --- a/src/com/android/settings/search/SavedQueryRemover.java +++ b/src/com/android/settings/search/SavedQueryRemover.java @@ -17,25 +17,21 @@ package com.android.settings.search; +import static com.android.settings.search.IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES; + import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.util.Log; -import com.android.settings.search.IndexDatabaseHelper; import com.android.settings.utils.AsyncLoader; -import static com.android.settings.search.IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES; - public class SavedQueryRemover extends AsyncLoader { private static final String LOG_TAG = "SavedQueryRemover"; - private final String mQuery; - - public SavedQueryRemover(Context context, String query) { + public SavedQueryRemover(Context context) { super(context); - mQuery = query; } @Override @@ -44,8 +40,8 @@ public class SavedQueryRemover extends AsyncLoader { try { // First, delete all saved queries that are the same database.delete(TABLE_SAVED_QUERIES, - IndexDatabaseHelper.SavedQueriesColumns.QUERY + " = ?", - new String[]{mQuery}); + null /* where */, + null /* whereArgs */); } catch (Exception e) { Log.d(LOG_TAG, "Cannot update saved Search queries", e); } diff --git a/src/com/android/settings/search/SavedQueryViewHolder.java b/src/com/android/settings/search/SavedQueryViewHolder.java index 14509b6f9c5..a8d449d45f9 100644 --- a/src/com/android/settings/search/SavedQueryViewHolder.java +++ b/src/com/android/settings/search/SavedQueryViewHolder.java @@ -25,12 +25,10 @@ import com.android.internal.logging.nano.MetricsProto; public class SavedQueryViewHolder extends SearchViewHolder { public final TextView titleView; - public final View removeButton; public SavedQueryViewHolder(View view) { super(view); titleView = view.findViewById(android.R.id.title); - removeButton = view.findViewById(android.R.id.icon); } @Override @@ -40,8 +38,7 @@ public class SavedQueryViewHolder extends SearchViewHolder { @Override public void onBind(SearchFragment fragment, SearchResult result) { + itemView.setOnClickListener(v -> fragment.onSavedQueryClicked(result.title)); titleView.setText(result.title); - titleView.setOnClickListener(v -> fragment.onSavedQueryClicked(result.title)); - removeButton.setOnClickListener(v -> fragment.onRemoveSavedQueryClicked(result.title)); } } \ No newline at end of file diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java index 2a485fe7a94..468a196ea7d 100644 --- a/src/com/android/settings/search/SearchFragment.java +++ b/src/com/android/settings/search/SearchFragment.java @@ -32,6 +32,8 @@ import android.util.Log; import android.util.Pair; import android.util.TypedValue; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; @@ -103,7 +105,7 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O @VisibleForTesting SearchFeatureProvider mSearchFeatureProvider; - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + @VisibleForTesting SearchResultsAdapter mSearchAdapter; @VisibleForTesting @@ -164,6 +166,12 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O } } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + mSavedQueryController.buildMenuItem(menu); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -361,10 +369,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O onQueryTextChange(queryString); } - public void onRemoveSavedQueryClicked(CharSequence title) { - mSavedQueryController.removeQuery(title.toString()); - } - private void restartLoaders() { mShowingSavedQuery = false; final LoaderManager loaderManager = getLoaderManager(); diff --git a/tests/robotests/src/com/android/settings/search/CursorToSearchResultConverterTest.java b/tests/robotests/src/com/android/settings/search/CursorToSearchResultConverterTest.java index 1aed11d00d3..0d1d7e6aa5e 100644 --- a/tests/robotests/src/com/android/settings/search/CursorToSearchResultConverterTest.java +++ b/tests/robotests/src/com/android/settings/search/CursorToSearchResultConverterTest.java @@ -17,6 +17,8 @@ package com.android.settings.search; +import static com.google.common.truth.Truth.assertThat; + import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -26,14 +28,14 @@ import android.graphics.drawable.Drawable; import com.android.settings.DisplaySettings; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.search.ResultPayload.Availability; import com.android.settings.search.ResultPayload.PayloadType; - +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.wifi.WifiSettings; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,8 +50,6 @@ import java.util.Arrays; import java.util.List; import java.util.Set; -import static com.google.common.truth.Truth.assertThat; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class CursorToSearchResultConverterTest { @@ -60,7 +60,7 @@ public class CursorToSearchResultConverterTest { private static final String TARGET_CLASS = "a.b.c.class"; private static final String KEY = "key"; private static final Intent INTENT = new Intent("com.android.settings"); - private static final int ICON = R.drawable.ic_search_history; + private static final int ICON = R.drawable.ic_search_24dp; private static final int BASE_RANK = 1; @Mock(answer = Answers.RETURNS_DEEP_STUBS) diff --git a/tests/robotests/src/com/android/settings/search/InlineSwitchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/InlineSwitchViewHolderTest.java index 093909bf730..d87550bce96 100644 --- a/tests/robotests/src/com/android/settings/search/InlineSwitchViewHolderTest.java +++ b/tests/robotests/src/com/android/settings/search/InlineSwitchViewHolderTest.java @@ -17,14 +17,18 @@ package com.android.settings.search; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + import android.content.Context; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -38,10 +42,6 @@ import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class InlineSwitchViewHolderTest { @@ -65,7 +65,7 @@ public class InlineSwitchViewHolderTest { public void setUp() { MockitoAnnotations.initMocks(this); final Context context = RuntimeEnvironment.application; - mIcon = context.getDrawable(R.drawable.ic_search_history); + mIcon = context.getDrawable(R.drawable.ic_search_24dp); FakeFeatureFactory.setupForTest(mContext); mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java index cee3c7831c0..38e6285b7ff 100644 --- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java +++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java @@ -85,7 +85,7 @@ public class IntentSearchViewHolderTest { View view = LayoutInflater.from(context).inflate(R.layout.search_intent_item, null); mHolder = new IntentSearchViewHolder(view); - mIcon = context.getDrawable(R.drawable.ic_search_history); + mIcon = context.getDrawable(R.drawable.ic_search_24dp); mBadgedIcon = context.getDrawable(R.drawable.ic_add); when(mFragment.getActivity().getPackageManager()).thenReturn(mPackageManager); } diff --git a/tests/robotests/src/com/android/settings/search/SavedQueryRecorderAndRemoverTest.java b/tests/robotests/src/com/android/settings/search/SavedQueryRecorderAndRemoverTest.java index 6d49555496f..af8cfe40bd3 100644 --- a/tests/robotests/src/com/android/settings/search/SavedQueryRecorderAndRemoverTest.java +++ b/tests/robotests/src/com/android/settings/search/SavedQueryRecorderAndRemoverTest.java @@ -18,11 +18,13 @@ package com.android.settings.search; +import static com.google.common.truth.Truth.assertThat; + import android.content.Context; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.DatabaseTestUtils; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.After; import org.junit.Before; @@ -33,8 +35,6 @@ import org.robolectric.annotation.Config; import java.util.List; -import static com.google.common.truth.Truth.assertThat; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SavedQueryRecorderAndRemoverTest { @@ -57,7 +57,7 @@ public class SavedQueryRecorderAndRemoverTest { public void canSaveAndRemoveQuery() { final String query = "test"; mRecorder = new SavedQueryRecorder(mContext, query); - mRemover = new SavedQueryRemover(mContext, query); + mRemover = new SavedQueryRemover(mContext); // Record a new query and load all queries from DB mRecorder.loadInBackground(); @@ -75,4 +75,22 @@ public class SavedQueryRecorderAndRemoverTest { // Saved query list should be empty because it's removed. assertThat(results).isEmpty(); } + + @Test + public void canRemoveAllQueriesAtOnce() { + mRemover = new SavedQueryRemover(mContext);; + + // Record a new query and load all queries from DB + new SavedQueryRecorder(mContext, "Test1").loadInBackground(); + new SavedQueryRecorder(mContext, "Test2").loadInBackground(); + final SavedQueryLoader loader = new SavedQueryLoader(mContext); + List results = loader.loadInBackground(); + assertThat(results.size()).isEqualTo(2); + + mRemover.loadInBackground(); + results = loader.loadInBackground(); + + // Saved query list should be empty because it's removed. + assertThat(results).isEmpty(); + } } diff --git a/tests/robotests/src/com/android/settings/search/SavedQueryViewHolderTest.java b/tests/robotests/src/com/android/settings/search/SavedQueryViewHolderTest.java index 691fcf7fae9..bb8f6d12da8 100644 --- a/tests/robotests/src/com/android/settings/search/SavedQueryViewHolderTest.java +++ b/tests/robotests/src/com/android/settings/search/SavedQueryViewHolderTest.java @@ -26,8 +26,8 @@ import android.view.LayoutInflater; import android.view.View; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -47,7 +47,6 @@ public class SavedQueryViewHolderTest { private SavedQueryViewHolder mHolder; private View mView; private View mTitleView; - private View mRemoveButton; @Before public void setUp() { @@ -56,7 +55,6 @@ public class SavedQueryViewHolderTest { mView = LayoutInflater.from(mContext) .inflate(R.layout.search_saved_query_item, null); mTitleView = mView.findViewById(android.R.id.title); - mRemoveButton = mView.findViewById(android.R.id.icon); mHolder = new SavedQueryViewHolder(mView); } @@ -65,10 +63,8 @@ public class SavedQueryViewHolderTest { final SearchResult result = mock(SearchResult.class); mHolder.onBind(mSearchFragment, result); - mTitleView.performClick(); - mRemoveButton.performClick(); + mHolder.itemView.performClick(); verify(mSearchFragment).onSavedQueryClicked(nullable(CharSequence.class)); - verify(mSearchFragment).onRemoveSavedQueryClicked(nullable(CharSequence.class)); } } diff --git a/tests/robotests/src/com/android/settings/search/SearchResultBuilderTest.java b/tests/robotests/src/com/android/settings/search/SearchResultBuilderTest.java index e601087d4b2..cd77b25753c 100644 --- a/tests/robotests/src/com/android/settings/search/SearchResultBuilderTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchResultBuilderTest.java @@ -17,14 +17,16 @@ package com.android.settings.search; +import static com.google.common.truth.Truth.assertThat; + import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.search.SearchResult.Builder; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -34,8 +36,6 @@ import org.robolectric.shadows.ShadowApplication; import java.util.ArrayList; -import static com.google.common.truth.Truth.assertThat; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SearchResultBuilderTest { @@ -57,7 +57,7 @@ public class SearchResultBuilderTest { mResultPayload = new ResultPayload(new Intent()); final Context context = ShadowApplication.getInstance().getApplicationContext(); - mIcon = context.getDrawable(R.drawable.ic_search_history); + mIcon = context.getDrawable(R.drawable.ic_search_24dp); } @Test diff --git a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java index 9c1453ffa7b..e605ec1729b 100644 --- a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java @@ -17,6 +17,14 @@ package com.android.settings.search; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -26,10 +34,10 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.search.SearchResult.Builder; import com.android.settings.search.ranking.SearchResultsRankerCallback; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -49,14 +57,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SearchResultsAdapterTest { @@ -553,7 +553,7 @@ public class SearchResultsAdapterTest { private Set getIntentSampleResults() { Set sampleResults = new HashSet<>(); ArrayList breadcrumbs = new ArrayList<>(); - final Drawable icon = mContext.getDrawable(R.drawable.ic_search_history); + final Drawable icon = mContext.getDrawable(R.drawable.ic_search_24dp); final ResultPayload payload = new ResultPayload(null); final SearchResult.Builder builder = new Builder(); builder.setTitle("title")