package Ġcom . de de . son ime i . module . search Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Search View Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Auto Complete TextView Ċ import Ġcom . de de . son ime i .* Ċ import Ġcom . de de . son ime i . base . Base Fragment Ċ import Ġcom . de de . son ime i . component . Circular Re veal Drawable Ċ import Ġcom . de de . son ime i . module . db . Database Open Helper . Companion . COLUMNS _ TEXT Ċ import Ġcom . de de . son ime i . module . home . Search H is Adapter Ċ import Ġcom . de de . son ime i . module . home . Source Type Dialog Ċ import Ġcom . de de . son ime i . module . search . net result . SearchResult Fragment Ċ import Ġcom . de de . son ime i . util . Screen Helper Ċ import Ġcom . de de . son ime i . util . extends . color Ċ import Ġcom . de de . son ime i . util . extends . notNull Ċ import Ġcom . de de . son ime i . util . extends . to Ċ import Ġkotlinx . android . synt hetic . main . fragment _ search .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġh sh Ġon Ġ 2 0 1 8 / 8 / 3 . Ċ Ġ* Ġæ Ĳ ľç´¢ é¡µéĿ¢ ï¼Į åĮħæĭ¬ tool Ġbar Ċ Ġ*/ Ċ class ĠSearch Fragment Ġ: ĠBase Fragment (), ĠSearch View . On Query Text Listener Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch View ?. clear Focus () ĊĠĠĠĠĠĠĠ Ġsearch Result Fragment . search ( query ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ä¿ĿåŃĺ æĲľç´¢ åİĨåı² ĊĠĠĠĠĠĠĠ Ġhis Adapter ?. new Search H is ( query ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse // Ġ åħ³éĹŃ éĶ® çĽĺ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id () Ġ= ĠR . layout . fragment _ search ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawable : ĠCircular Re veal Drawable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Result Fragment : ĠSearch Result Fragment ĊĊĠĠĠ Ġoverride Ġfun Ġinit View ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp _ bar . set Padding ( 0 , ĠScreen Helper . get Frame Top Margin ( activity ), Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġactivity !!. to < AppCompatActivity >(). set Support ActionBar ( tool _ bar ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġsearch Result Fragment Ġ= Ġchild FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Fragment ById ( R . id . search _ result _ fragment ) Ġas ĠSearch Result Fragment ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġsearch Result Fragment . getType Source (). first ĊĊĠĠĠĠĠĠĠ Ġdrawable Ġ= ĠCircular Re veal Drawable ( color ( R . color . color Primary )) ĊĠĠĠĠĠĠĠ Ġapp _ bar . background Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġapp _ bar . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġsource Color ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . play ( color ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 L ) ĊĠĠĠĠĠĠĠ Ġtv _ source _ name . text Ġ= Ġsource Name ( source ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġsearch View : ĠSearch View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhis Adapter : ĠSearch H is Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġauto Complete Text : ĠAuto Complete TextView ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?, Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ search _ net , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġval Ġmenu Item Ġ= Ġmenu !!. find Item ( R . id . menu _ search _ net ) ĊĠĠĠĠĠĠĠ Ġsearch View Ġ= Ġmenu Item . action View Ġas ĠSearch View ? ĊĠĠĠĠĠĠĠ Ġval Ġsearch Type Ġ= Ġsearch Type ( SEARCH _ NAME ) ĊĠĠĠĠĠĠĠ Ġtv _ search _ type . text Ġ= Ġsearch Type ĊĠĠĠĠĠĠĠ Ġsearch View ?. query Hint Ġ= Ġsearch Type ĊĠĠĠĠĠĠĠ Ġsearch View ?. setOn Query Text Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĨħéĥ¨ æĺ¯ ç»§æī¿ äºİ Auto Complete TextView çļĦ Search Auto Complete ĊĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġsearch View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . findViewById < Auto Complete TextView >( R . id . search _ src _ text ) ĊĠĠĠĠĠĠĠ Ġthis . auto Complete Text Ġ= ĠtextView ĊĠĠĠĠĠĠĠ Ġif Ġ( textView Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . set Hint TextColor ( Color . arg b ( 1 8 0 , Ġ 2 5 5 , Ġ 2 5 5 , Ġ 2 5 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĽłä¸º Search View & Search Auto Complete éĩį åĨĻ äºĨ en ough To Filter æĸ¹æ³ķ ï¼Į å°ı äºİ 0 æĹ¶ è¿ĶåĽŀ true çĽ´æİ¥ æĺ¾ç¤º pop List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä½Ĩæĺ¯ ä¼ļ åĴĮ éĶ® çĽĺ åĲĮæĹ¶ å¼¹ èµ· ï¼Į ä½¿ pop æĺ¾ç¤º ä½įç½® ä¸į åĩĨ ç¡® ï¼Į è¿ĻéĩĮ ä¸į ä½¿çĶ¨ è¿ĶåĽŀ å°ı äºİ 0 çļĦ æķ° æĺ¯ æĲľç´¢ åİĨåı² èĩªåĬ¨ æĺ¾ç¤º ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĽĳåĲ¬ çĦ ¦ çĤ¹ åıĺåĮĸ ï¼Į å»¶ è¿ Ł å¼¹ åĩº æĲľç´¢ åİĨåı² pop ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setOn Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . threshold Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å»¶ æĹ¶ æĺ¾ç¤º ï¼Į çŃīå¾ħ éĶ® çĽĺ å¼¹ èµ· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . show DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . threshold Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġposition Ġ- ĠSearch H is Adapter . HEADER _ COUNT // Ġ åİ» æİī header çļĦ ä¸ªæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ< Ġ 0 ) Ġreturn @ setOn ItemClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġsearch View !!. suggestions Adapter . cursor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ>= Ġcursor . count ) Ġreturn @ setOn ItemClickListener ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo Position ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġcursor . getString ( cursor . getColumnIndex ( COLUMNS _ TEXT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSearch View & Search Auto Complete éĩį åĨĻ replace Text ( text ) æĸ¹æ³ķ ä¸ºç©º æĸ¹æ³ķ ï¼Į éľĢè¦ģ æīĭåĬ¨ è®¾ç½® æĸĩæľ¬ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View !!. set Query ( text , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhis Adapter Ġ= ĠSearch H is Adapter ( context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View !!. suggestions Adapter Ġ= Ġhis Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmenu Item . expand Action View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ source _ type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠSource Type Dialog ( context !! , Ġsearch Result Fragment . getType Source ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ source _ name . text Ġ= Ġsource Name ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Type Ġ= Ġsearch Type ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View ?. query Hint Ġ= Ġsearch Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ search _ type . text Ġ= Ġsearch Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġsearch View ?. query ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query . notNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Result Fragment . search ( query , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Result Fragment . setType Source ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . play ( source Color ( source )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search View ?. has Focus () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext !!. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ). to < Input Method Manager >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . hide Soft Input From Window ( auto Complete Text ?. window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View ?. post Delayed ({ Ġdialog . show () Ġ}, Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġhis Adapter ?. cursor ?. close () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ }