package Ġeasy adapter . dc . com . easy adapter Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . content . Local Broadcast Manager Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . Search View Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroid . widget . Toast Ċ import Ġeasy adapter . dc . com . easy adapter . databinding . Activity Main Binding Ċ import Ġeasy adapter . dc . com . easy adapter . databinding . Inflater Category Name Binding Ċ import Ġeasy adapter . dc . com . library . Easy Adapter Ċ import Ġeasy adapter . dc . com . library . Easy Array Adapter Ċ import Ġeasy adapter . dc . com . library . Easy Spinner ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠCategory Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspinner Adapter : ĠCategory Adapter ĊĊĠĠĠ Ġprivate Ġval Ġnames : ĠList < Category > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠArrayList < Category >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Kr upal ĠMe ht a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" A ag am ĠMe ht a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" An and ĠP ate l ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ag ar ĠP anch al ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" P ank aj ĠSh arma ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dar sh ak Ġj ani ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ank et ĠCh au han ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dh ru v ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ag ar ĠP anch al ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" P ank aj ĠSh arma ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dar sh ak Ġj ani ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ank et ĠCh au han ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dh ru v ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Kr upal ĠMe ht a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" A ag am ĠMe ht a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" An and ĠP ate l ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ag ar ĠP anch al ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" P ank aj ĠSh arma ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dar sh ak Ġj ani ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ank et ĠCh au han ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dh ru v ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ag ar ĠP anch al ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" P ank aj ĠSh arma ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dar sh ak Ġj ani ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ank et ĠCh au han ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dh ru v ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Kr upal ĠMe ht a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" A ag am ĠMe ht a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" An and ĠP ate l ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ag ar ĠP anch al ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" P ank aj ĠSh arma ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dar sh ak Ġj ani ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ank et ĠCh au han ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dh ru v ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ag ar ĠP anch al ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" P ank aj ĠSh arma ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dar sh ak Ġj ani ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" S ank et ĠCh au han ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( Category . create Dummy (" Dh ru v ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtemp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcategories : ĠList < Category > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Category >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Category . create Dummy (" Android ĠDeveloper ", Ġ" 1 ", Ġ" 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Category . create Dummy (" Java ĠDeveloper ", Ġ" 4 ", Ġ" 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Category . create Dummy (" Python ĠDeveloper ", Ġ" 1 ", Ġ" 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Category . create Dummy (" Php ĠDeveloper ", Ġ" 3 ", Ġ" 4 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Category . create Dummy (" ROR ĠDeveloper ", Ġ" 2 ", Ġ" 5 ")) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠLog . d (" MainActivity Log ", Ġ" true "); ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . is Nested Scrolling Enabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġadapter Example () ĊĠĠĠĠĠĠĠ Ġspinner Example () ĊĠĠĠĠĠĠĠ Ġautocomplete () ĊĠĠĠĠĠĠĠ Ġtest () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġautocomplete () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġobject Ġ: ĠEasy Array Adapter < Category , ĠIn flater Category Name Binding >( this @ MainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . in flater _ category _ name , Ġobject Ġ: ĠEasy Adapter . On Filter < Category > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Filter Result ( filter edList : Ġjava . util . ArrayList < Category > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Filter Apply ( filter : ĠAny ?, Ġmodel : ĠCategory ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( filter Ġ!= Ġnull ) Ġmodel . parentId . equals (" 1 ") Ġelse Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( binding : ĠIn flater Category Name Binding , Ġmodel : ĠCategory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Name . text Ġ= Ġmodel . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . addAll ( categories , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġbinding . aut complete . setItem Selection Callback Ġ{ Ġposition : ĠInt , Ġview : ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . aut complete . setText ( adapter . data [ position ]. name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . aut complete . setAdapter ( adapter ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadapter Example () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠCategory Adapter ( true ) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġadapter . addAll ( names , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĊĊĠĠĠĠĠĠĠ Ġ// Filter ĊĠĠĠĠĠĠĠ Ġbinding . search View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . perform Filter ( new Text , Ġfilter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Load ĠMore ĊĠĠĠĠĠĠĠ Ġadapter . set Load More Res ( R . layout . layout _ progress ) ĊĠĠĠĠĠĠĠ Ġ/* adapter . setOn Load More Listener ( binding . re cyclerView ) Ġ{ Ġtrue Ġ}*/ ĊĊĠĠĠĠĠĠĠ Ġ// Item ĠView ĠEvent Ġcallback ĊĠĠĠĠĠĠĠ Ġadapter . set RecyclerView Item Check Change Ġ{ Ġview , Ġis Check , Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġis Check . toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Swipe ĠAction ĊĠĠĠĠĠĠĠ Ġadapter . enable Swipe Action ( binding . re cyclerView ) ĊĊĠĠĠĠĠĠĠ Ġ// Ob serve ĠData Ġchange Ġ( so Ġyou Ġcan Ġshow Ġno Ġdata Ġview Ġif Ġthere Ġis Ġno Ġdata Ġto Ġdisplay ) ĊĠĠĠĠĠĠĠ Ġadapter . add On Data Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Toast . makeText ( this @ MainActivity , Ġ" No ĠData ĠFound ", ĠToast . LENGTH _ SHORT ). show () */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġspinner Example () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Spinner ĠConfiguration ĊĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . set Popup Background ( Context Compat . get Drawable ( this , ĠR . drawable . rect _ background )) ĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . set Popup Type ( Easy Spinner . POP UP _ TYPE _ DROP _ DOWN ) ĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . set Popup Width ( 8 0 0 ) ĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . set Animation ( R . style . Pop window _ Anim _ Down ) ĊĊĠĠĠĠĠĠĠ Ġ// Adapter ĠConfiguration ĊĠĠĠĠĠĠĠ Ġspinner Adapter Ġ= ĠCategory Adapter ( false ) ĊĠĠĠĠĠĠĠ Ġspinner Adapter . addAll ( categories , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġspinner Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġspinner Adapter . set RecyclerView Item Click Ġ{ Ġview , Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . setText ( model . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . setAdapter ( spinner Adapter ) ĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . enable Auto Complete Mode Ġ{ Ġeasy Spinner , Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Adapter . perform Filter ( text , Ġspinner Filter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . setOn DropDown Visibility Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġif ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sp RecyclerView . setText ("") */ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfilter Ġ= Ġobject Ġ: ĠEasy Adapter . On Filter < Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Filter Apply ( filter : ĠAny ?, Ġmodel : ĠCategory ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmodel . name . toLowerCase (). contains ( filter . toString (). toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Filter Result ( filter edList : ĠArrayList < Category > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . clear ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . addAll ( filter edList , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġspinner Filter Ġ= Ġobject Ġ: ĠEasy Adapter . On Filter < Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Filter Apply ( filter : ĠAny ?, Ġmodel : ĠCategory ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmodel . name . toLowerCase (). contains ( filter . toString (). toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Filter Result ( filter edList : ĠArrayList < Category > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Adapter . clear ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Adapter . addAll ( filter edList , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Intent . ACTION _ PACKAGE _ AD DED ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( Intent . ACTION _ PACKAGE _ INSTALL ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addData Scheme (" package ") ĊĠĠĠĠĠĠĠ ĠLocal Broadcast Manager . getInstance ( this ). register Receiver ( object Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" App ĠInstalled ", Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġintent Filter ) ĊĊĠĠĠ Ġ} Ċ } ĊĊ