package Ġio . github . g math i . no vel library . activity Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . lifecycle . lifecycle Owner Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġio . github . g math i . no vel library . R Ċ import Ġio . github . g math i . no vel library . adapter . Generic Adapter Ċ import Ġio . github . g math i . no vel library . data Center Ċ import Ġio . github . g math i . no vel library . database . getAll No vel s Ċ import Ġio . github . g math i . no vel library . databinding . Activity Library Search Binding Ċ import Ġio . github . g math i . no vel library . databinding . List item Library Binding Ċ import Ġio . github . g math i . no vel library . db Helper Ċ import Ġio . github . g math i . no vel library . util . system . hide Soft Keyboard Ċ import Ġio . github . g math i . no vel library . util . system . start Chapter s Activity Ċ import Ġio . github . g math i . no vel library . util . system . start No vel Details Activity Ċ import Ġio . github . g math i . no vel library . util . system . start Reader DB Pager Activity Ċ import Ġio . github . g math i . no vel library . model . database . No vel Ċ import Ġio . github . g math i . no vel library . util .* Ċ import Ġio . github . g math i . no vel library . util . view . Simple Animation Listener Ċ import Ġio . github . g math i . no vel library . util . view . Suggestions Builder Ċ import Ġorg . cry se . widget . persistent search . Persistent Search View Ċ import Ġorg . cry se . widget . persistent search . Search Item Ċ Ċ class ĠLibrary Search Activity Ġ: ĠAppCompatActivity (), ĠGeneric Adapter . Listener < No vel > Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠGeneric Adapter < No vel > ĊĊĠĠĠ Ġprivate Ġval Ġall No vel s List : ĠList < No vel > Ġ= Ġdb Helper . getAll No vel s () ĊĊĠĠĠ Ġprivate Ġvar Ġis Date Sorted Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Title Sorted Ġ= Ġfalse ĊĠĠĠĠĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Library Search Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Library Search Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġset Search View () ĊĠĠĠĠĠĠĠ Ġset RecyclerView () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Search View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// search View . set Home Button Visibility ( View . GONE ) ĊĠĠĠĠĠĠĠ Ġbinding . search View . set Home Button Listener ( object Ġ: ĠPersistent Search View . Home Button Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Home Button Click () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Soft Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . search View . set Suggestion Builder ( Suggestions Builder ( data Center . load Library Search History ())) ĊĠĠĠĠĠĠĠ Ġbinding . search View . set Search Listener ( object Ġ: ĠPersistent Search View . Search Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search ( query : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery ?. addTo Library Search History () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Edit Opened () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search View Bg Tint . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search View Bg Tint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( Simple Animation Listener ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Edit Closed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search View Bg Tint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠSimple Animation Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search View Bg Tint . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Exit () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Cle ared () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Term Changed ( term : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch No vel s ( term ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Suggestion ( search Item : ĠSearch Item ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Edit Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Toast . makeText ( context , Ġ" on Search Edit Back Pressed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . search View . search Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search View . close Search () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠGeneric Adapter ( items Ġ= ĠArrayList ( all No vel s List ), Ġlayout Res Id Ġ= ĠR . layout . list item _ library , Ġlistener Ġ= Ġthis , Ġload More Listener Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġbinding . content RecyclerView . re cyclerView . set Defaults ( adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch No vel s ( search Term : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Term ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . items . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . add Items ( all No vel s List . filter Ġ{ Ġnovel Ġ-> Ġnovel . name . contains ( it , Ġignore Case Ġ= Ġtrue ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( item : ĠNo vel , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Chapter s Activity ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( item : ĠNo vel , ĠitemView : ĠView , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Binding Ġ= ĠList item Library Binding . bind ( item View ) ĊĠĠĠĠĠĠĠ Ġitem Binding . no vel ImageView . setImage Resource ( android . R . color . transparent ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! item . imageUrl . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( item . imageUrl ?. get G lide Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . circle Crop Transform ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( item Binding . no vel ImageView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Binding . no vel Title TextView . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠ Ġitem Binding . no vel Title TextView . isSelected Ġ= Ġdata Center . enable Scrolling Text ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Read Ġ= Ġitem . metadata [ Constants . MetaData Keys . LAST _ READ _ DATE ] Ġ?: Ġ" N / A " ĊĠĠĠĠĠĠĠ Ġval Ġlast Updated Ġ= Ġitem . metadata [ Constants . MetaData Keys . LAST _ UPDATED _ DATE ] Ġ?: Ġ" N / A " ĊĊĠĠĠĠĠĠĠ Ġitem Binding . last Opened Date . text Ġ= ĠgetString ( R . string . last _ read _ n _ updated , Ġlast Read , Ġlast Updated ) ĊĊĠĠĠĠĠĠĠ Ġitem Binding . pop Menu . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Ġ= ĠPopup Menu ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . menu Inflater . inflate ( R . menu . menu _ popup _ no vel , Ġpopup . menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . menu . find Item ( R . id . action _ no vel _ remove ). isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . menu . find Item ( R . id . action _ no vel _ assign _ no vel _ section ). isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . setOn MenuItem ClickListener Ġ{ Ġmenu Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( menuItem . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ no vel _ details Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart No vel Details Activity ( item , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Binding . read Chapter Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Reader ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Reader ( no vel : ĠNo vel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( no vel . current Chapter Url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Reader DB Pager Activity ( no vel ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġthis . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog ( this ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( R . string . no _ bookmark _ found _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ( text Ġ= ĠgetString ( R . string . no _ bookmark _ found _ dialog _ description , Ġnovel . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( R . string . ok ay ) Ġ{ Ġdialog Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . start Chapter s Activity ( no vel , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Button ( R . string . cancel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner ( this @ Library Search Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort No vel sBy Title () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter . items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġadapter . items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Title Sorted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Data ( ArrayList ( items . sorted With ( compare By Ġ{ Ġit . name Ġ} ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Data ( ArrayList ( items . sorted With ( compare By Ġ{ Ġit . name Ġ}). reversed ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Title Sorted Ġ= Ġ! is Title Sorted ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort No vel sBy Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter . items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġadapter . items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Date Sorted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Data ( ArrayList ( items . sorted With ( compare By Ġ{ Ġit . name Ġ} ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Data ( ArrayList ( items . sorted With ( compare By Ġ{ Ġit . name Ġ}). reversed ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Date Sorted Ġ= Ġ! is Date Sorted ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ