/* Ċ Ġ* ĠCopyright Ġ 2 0 1 1 ĠDaniel ĠE rat Ġ< dan @ er at . org > Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġorg . er at . n up Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Auto Complete TextView Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . widget . do After TextChanged Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġorg . er at . n up . N up Activity . Companion . service Ċ import Ġorg . er at . n up . N up Service . Song Database Update Listener Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSON Tok ener Ċ Ċ /** ĠDisplays Ġa Ġform Ġfor Ġsearching Ġfor Ġsongs . Ġ*/ Ċ class ĠSearch Form Activity Ġ: ĠAppCompatActivity (), ĠSong Database Update Listener Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġartist Edit : ĠAuto Complete TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalbum Edit : ĠAuto Complete TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtitle Edit : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshuffle Checkbox : ĠCheckBox ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsubstring Checkbox : ĠCheckBox ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcached Checkbox : ĠCheckBox ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmin Rating Spinner : ĠAuto Complete TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkeywords Edit : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtags Edit : ĠAuto Complete TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠorderBy Last Play ed Checkbox : ĠCheckBox ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmax Play s Edit : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfirst Play ed Spinner : ĠAuto Complete TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlast Play ed Spinner : ĠAuto Complete TextView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġartist Edit Adapter : ĠArray Adapter < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalbum Edit Adapter : ĠArray Adapter < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtags Edit Adapter : ĠArray Adapter < String > ĊĊĠĠĠ Ġprivate Ġvar Ġtags Ġ= ĠlistOf < String >() Ġ// Ġserver - supp lied Ġtags ĊĠĠĠ Ġprivate Ġvar Ġtags Prefix Ġ= Ġ"" Ġ// Ġcurrent Ġalready - typed Ġtext Ġfor Ġtag Ġautocomplete Ġsuggestions ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Activity Ġcreated ") ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġkeyboard Ġis Ġshown , Ġpan Ġthe Ġwindow Ġinstead Ġof Ġres izing Ġit . ĠOtherwise , Ġthe Ġbuttons ĊĠĠĠĠĠĠĠ Ġ// Ġat Ġthe Ġbottom Ġget Ġpushed Ġup Ġand Ġcan Ġob sc ure Ġthe Ġfocused Ġtext Ġfield . ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠFind Ġa Ġway Ġto Ġkeep Ġthe Ġbuttons Ġon screen Ġwhile Ġalso Ġnot Ġob sc uring Ġthe Ġtext Ġfield . ĊĠĠĠĠĠĠĠ Ġget Window (). set Soft Input Mode ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . SOFT _ INPUT _ STATE _ VISIBLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . SOFT _ INPUT _ ADJ UST _ PAN ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠsetTitle ( R . string . search ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . search ) ĊĊĠĠĠĠĠĠĠ Ġartist Edit Ġ= ĠfindViewById < Auto Complete TextView >( R . id . artist _ edit _ text ) ĊĠĠĠĠĠĠĠ Ġartist Edit Adapter Ġ= Ġcreate Autocomplete Adapter ( artist Edit ) ĊĊĠĠĠĠĠĠĠ Ġtitle Edit Ġ= ĠfindViewById < EditText >( R . id . title _ edit _ text ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġartist Ġis Ġchanged , Ġupdate Ġthe Ġalbum Ġfield 's Ġsuggestions . ĊĠĠĠĠĠĠĠ Ġalbum Edit Ġ= ĠfindViewById < Auto Complete TextView >( R . id . album _ edit _ text ) ĊĠĠĠĠĠĠĠ Ġalbum Edit Adapter Ġ= Ġcreate Autocomplete Adapter ( album Edit ) ĊĠĠĠĠĠĠĠ Ġartist Edit . do After TextChanged Ġ{ Ġ_ Ġ-> Ġupdate Album Suggestions () Ġ} ĊĊĠĠĠĠĠĠĠ Ġmin Rating Spinner Ġ= Ġconfigure Spinner ( R . id . min _ rating _ spinner , ĠR . array . min _ ratings ) ĊĠĠĠĠĠĠĠ Ġshuffle Checkbox Ġ= ĠfindViewById < CheckBox >( R . id . shuffle _ checkbox ) ĊĠĠĠĠĠĠĠ Ġsubstring Checkbox Ġ= ĠfindViewById < CheckBox >( R . id . substring _ checkbox ) ĊĠĠĠĠĠĠĠ Ġcached Checkbox Ġ= ĠfindViewById < CheckBox >( R . id . cached _ checkbox ) ĊĠĠĠĠĠĠĠ Ġkeywords Edit Ġ= ĠfindViewById < EditText >( R . id . keywords _ edit _ text ) ĊĊĠĠĠĠĠĠĠ Ġtags Edit Ġ= ĠfindViewById < Auto Complete TextView >( R . id . tags _ edit _ text ) ĊĠĠĠĠĠĠĠ Ġtags Edit Adapter Ġ= Ġcreate Autocomplete Adapter ( tags Edit ) ĊĠĠĠĠĠĠĠ Ġtags Edit . do After TextChanged Ġ{ Ġ_ Ġ-> Ġupdate Tags Suggestions () Ġ} ĊĊĠĠĠĠĠĠĠ ĠorderBy Last Play ed Checkbox Ġ= ĠfindViewById < CheckBox >( R . id . order _ by _ last _ play ed _ checkbox ) ĊĠĠĠĠĠĠĠ ĠorderBy Last Play ed Checkbox . setOn Checked ChangeListener Ġ{ Ġ_, Ġ_ Ġ-> Ġupdate Controls Enabled () Ġ} ĊĊĠĠĠĠĠĠĠ Ġmax Play s Edit Ġ= ĠfindViewById < EditText >( R . id . max _ play s _ edit _ text ) ĊĠĠĠĠĠĠĠ Ġfirst Play ed Spinner Ġ= Ġconfigure Spinner ( R . id . first _ play ed _ spinner , ĠR . array . play ed _ times ) ĊĠĠĠĠĠĠĠ Ġlast Play ed Spinner Ġ= Ġconfigure Spinner ( R . id . last _ play ed _ spinner , ĠR . array . play ed _ times ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( service . network Helper . is Network Available ) Ġfetch Tags () ĊĊĠĠĠĠĠĠĠ Ġservice . add Song Database Update Listener ( this ) ĊĠĠĠĠĠĠĠ Ġon Song Database Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Activity Ġdestroyed ") ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġservice . remove Song Database Update Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ= Ġcreate Common Options Menu ( menu ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġhandle Common Options ItemSelected ( item ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRESULT S _ REQUEST _ CODE Ġ&& ĠresultCode Ġ== ĠRESULT _ OK ) Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreate Ġan Ġ[ Array Adapter ] Ġfor Ġ[ view ]. Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Autocomplete Adapter ( view : ĠAuto Complete TextView ): ĠArray Adapter < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠArray Adapter < String >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Search Form Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ dropdown _ item _ 1 line ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . setAdapter ( adapter ) ĊĠĠĠĠĠĠĠ Ġreturn Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠConfigure ĠAuto Complete TextView Ġ[ view Id ] Ġto Ġuse Ġstring Ġarray Ġ[ values Id ]. Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġconfigure Spinner ( view Id : ĠInt , Ġvalues Id : ĠInt ): ĠAuto Complete TextView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspinner Ġ= ĠfindViewById < Auto Complete TextView >( view Id ) ĊĠĠĠĠĠĠĠ Ġspinner . setAdapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Search Form Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ spinner _ dropdown _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Resources (). getString Array ( values Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġspinner ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThrow n Ġif Ġan Ġerror Ġis Ġencountered Ġwhile Ġfetching Ġtags . Ġ*/ ĊĠĠĠ Ġclass ĠFetch Tags Exception ( reason : ĠString ) Ġ: ĠException ( reason ) ĊĊĠĠĠ Ġ/** ĠAs ynchronously Ġfetch Ġtags Ġfrom Ġthe Ġserver Ġand Ġupdate Ġ[ tags ]. Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfetch Tags () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . scope . async ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġasync ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( response , Ġerror ) Ġ= Ġservice . downloader . download String ("/ tags ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ?: Ġthrow ĠFetch Tags Exception ( error !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJSONArray ( JSON Tok ener ( response )). iterator < String >(). as Sequence (). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFetch Tags Exception (" Couldn 't Ġparse Ġtags : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Tags Suggestions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFetch Tags Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Search Form Activity , Ġe . message !! , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠUpdate Ġthe Ġautocomplete Ġsuggestions Ġshown Ġfor Ġthe Ġalbum Ġfield . Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Album Suggestions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartist Ġ= Ġartist Edit . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġval Ġalbum s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( artist . isEmpty ()) Ġservice . song Db . albums Sorted Alphabet ically ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġservice . song Db . album sBy Artist ( artist ) ĊĊĠĠĠĠĠĠĠ Ġalbum Edit Adapter . clear () ĊĠĠĠĠĠĠĠ Ġalbum Edit Adapter . addAll ( albums . map Ġ{ Ġit . key . album Ġ}. to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġalbum Edit Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠUpdate Ġthe Ġautocomplete Ġsuggestions Ġshown Ġfor Ġthe Ġtags Ġfield . Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Tags Suggestions () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCh op Ġoff Ġthe Ġlast Ġword Ġ( if Ġany ), Ġas Ġlong Ġas Ġit Ġdoesn 't Ġhave Ġtrailing Ġspace . ĊĠĠĠĠĠĠĠ Ġval Ġpre Ġ= Ġtags Edit . text . toString (). replace ("( ^ | \\ s )\\ S +$ ". to Regex (), Ġ"$ 1 ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠB ail Ġout Ġif Ġwe 're Ġalready Ġshowing Ġthe Ġcorrect Ġsuggestions . ĊĠĠĠĠĠĠĠ Ġif Ġ( pre Ġ== Ġtags Prefix Ġ&& Ġtags Edit Adapter . getCount () Ġ> Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġall Ġthe Ġtags Ġthat Ġhave Ġbeen Ġused Ġalready . ĊĠĠĠĠĠĠĠ Ġval Ġseen Ġ= Ġpre . trim (). split ("\\ s +". to Regex ()). map Ġ{ Ġit . remove Prefix ("- ") Ġ}. toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAppend Ġall Ġnot - yet - used Ġtags Ġin Ġboth Ġpositive Ġand Ġnegative Ġform . ĊĠĠĠĠĠĠĠ Ġtags Edit Adapter . clear () ĊĠĠĠĠĠĠĠ Ġtags . filter Ġ{ Ġ! seen . contains ( it ) Ġ}. forEach Ġ{ Ġtag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags Edit Adapter . add ("$ pre $ tag Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags Edit Adapter . add ("$ pre -$ tag Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtags Edit Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġtags Prefix Ġ= Ġpre ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Search Button Clicked (@ Suppress (" UNUSED _ PARAMETER ") Ġview : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠSearch Results Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ AR TI ST , Ġartist Edit . text . toString (). trim ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ TITLE , Ġtitle Edit . text . toString (). trim ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ AL BU M , Ġalbum Edit . text . toString (). trim ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ SH UFF LE , Ġshuffle Checkbox . isChecked ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ SUB STRING , Ġsubstring Checkbox . isChecked ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ C ACHED , Ġcached Checkbox . isChecked ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġa Ġhack , Ġbut ĠAndroid Ġdoesn 't Ġsupply Ġa ĠMaterial Ġspinner , Ġand Ġthe Ġonly Ġway Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġdetermine Ġthe Ġindex Ġof Ġan ĠAuto Complete TextView 's Ġselected Ġitem Ġis Ġapparently Ġby Ġlistening ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġclicks . ĊĠĠĠĠĠĠĠ Ġval Ġstars Ġ= Ġmin Rating Spinner . text . toString (). length ĊĠĠĠĠĠĠĠ Ġif Ġ( stars Ġ> Ġ 0 ) Ġintent . putExtra ( SearchResults Activity . B UNDLE _ MIN _ RAT ING , Ġ( stars Ġ- Ġ 1 ) Ġ/ Ġ 4 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ KEYWORD S , Ġkeywords Edit . text . toString (). trim ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ TAGS , Ġtags Edit . text . toString (). trim ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Results Activity . B UNDLE _ ORDER _ BY _ LAST _ PLAY ED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠorderBy Last Play ed Checkbox . isChecked ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Play s Ġ= Ġmax Play s Edit . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġif Ġ( max Play s Edit . isEnabled () Ġ&& Ġ! max Play s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ MAX _ PLAY S , Ġmax Play s . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplayed Str Ġ= Ġget Resources (). getString Array ( R . array . play ed _ times ) ĊĠĠĠĠĠĠĠ Ġval Ġplayed Sec Ġ= Ġget Resources (). getString Array ( R . array . play ed _ times _ sec ). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfirst Play ed Ġ= Ġplayed Sec [ play ed Str . indexOf ( first Play ed Spinner . text . toString ()) ] ĊĠĠĠĠĠĠĠ Ġif Ġ( first Play ed Spinner . isEnabled () Ġ&& Ġfirst Play ed Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ FIRST _ PLAY ED , Ġfirst Play ed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlast Play ed Ġ= Ġplayed Sec [ play ed Str . indexOf ( last Play ed Spinner . text . toString ()) ] ĊĠĠĠĠĠĠĠ Ġif Ġ( last Play ed Spinner . isEnabled () Ġ&& Ġlast Play ed Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( SearchResults Activity . B UNDLE _ LAST _ PLAY ED , Ġlast Play ed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠRESULT S _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Reset Button Clicked (@ Suppress (" UNUSED _ PARAMETER ") Ġview : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġartist Edit . setText ("") ĊĠĠĠĠĠĠĠ Ġalbum Edit . setText ("") ĊĠĠĠĠĠĠĠ Ġtitle Edit . setText ("") ĊĠĠĠĠĠĠĠ Ġshuffle Checkbox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsubstring Checkbox . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcached Checkbox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġmin Rating Spinner . setText ("") ĊĠĠĠĠĠĠĠ Ġkeywords Edit . setText ("") ĊĠĠĠĠĠĠĠ Ġtags Edit . setText ("") ĊĠĠĠĠĠĠĠ ĠorderBy Last Play ed Checkbox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġmax Play s Edit . setText ("") ĊĠĠĠĠĠĠĠ Ġfirst Play ed Spinner . setText ("") ĊĠĠĠĠĠĠĠ Ġlast Play ed Spinner . setText ("") ĊĊĠĠĠĠĠĠĠ Ġupdate Controls Enabled () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Controls Enabled () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġ! orderBy Last Play ed Checkbox . isChecked ĊĠĠĠĠĠĠĠ Ġmax Play s Edit . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġfirst Play ed Spinner . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġlast Play ed Spinner . setEnabled ( enabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Song Database Sync Change ( state : ĠSong Database . Sync State , Ġupdated S ongs : ĠInt ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon Song Database Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġartist Edit Adapter . clear () ĊĠĠĠĠĠĠĠ Ġartist Edit Adapter . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . song Db . artists Sorted By Num S ongs . map Ġ{ Ġit . key . artist Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġartist Edit Adapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠ Ġupdate Album Suggestions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Search Form Activity " ĊĊĠĠĠĠĠĠĠ Ġ// ĠIDs Ġused Ġto Ġidentify Ġactivities Ġthat Ġwe Ġstart . ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRESULT S _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ } Ċ