package Ġcom . music player . a ow . ui . main . search Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . view . MenuItem Compat Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . Search View Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . View Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Syntax Exception Ċ import Ġcom . music player . a ow . R Ċ import Ġcom . music player . a ow . deleg ates . soft code . Soft Code Adapter Ċ import Ġcom . music player . a ow . deleg ates . soft code . adapters . placeholder . Place Holder Search Data Ċ import Ġcom . music player . a ow . ui . base . Base Activity Ċ import Ġcom . music player . a ow . ui . main . search . adapter . Search Adapter Ċ import Ġcom . read yst ates o ftware . system b art int . System Bar Tint Manager Ċ import Ġkotlinx . android . synt hetic . main . activity _ search .* Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . onComplete Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . widget . Toast Ċ import Ġcom . music player . a ow . ui . main . MainActivity Ċ import Ġandroid . app . Search Manager Ċ import Ġandroid . content . Intent Ċ import Ġcom . music player . a ow . ui . main . search . adapter . My Suggestion Provider Ċ import Ġandroid . provider . Search Recent Suggestions Ċ import Ġandroid . media . Media Codec . Metrics Constants . MODE ĊĊĊĊĊĊĊĊ Ċ class ĠSearch Activity Ġ: ĠBase Activity (), ĠSearch View . On Query Text Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlast Se ar ches : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsearch View : ĠSearch View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhost _ address : ĠString ? Ġ= Ġ" http :// mus ix play lb - 1 3 7 3 5 9 7 4 2 1 . eu - west - 2 . el b . amazonaws . com / play " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ search ) ĊĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation Icon ( R . drawable . ic _ arrow _ back _ black ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġback Ġbutton Ġpressed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġsearch _ recyclerview . layout Manager Ġ= Ġ ĠLinearLayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayoutManager . VERTICAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġintent , Ġverify Ġthe Ġaction Ġand Ġget Ġthe Ġquery Ċ // ĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ SEARCH Ġ== Ġintent . action ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġintent . getString Extra ( Search Manager . QUERY ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcall Playlist ( query ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandle Intent ( intent ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġhandle Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ SEARCH Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġintent . getString Extra ( Search Manager . QUERY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// save Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggestions Ġ= ĠSearch Recent Suggestions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Suggestion Provider . AUTH ORITY , ĠMy Suggestion Provider . MODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuggestions . save Recent Query ( query , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Playlist ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// clear Ġquery Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggestions Ġ= ĠSearch Recent Suggestions ( this , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Suggestion Provider . AUTH ORITY , ĠHello Suggestion Provider . MODE ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsuggestions . clear History () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Main Section Data ( section : ĠArrayList < Search > ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( section . size Ġ<= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ msg . text Ġ= Ġ" Not Ġfound , Ġplease Ġtry Ġagain ..." ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ recyclerview . adapter Ġ= ĠSearch Adapter ( application Context , Ġsection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetTitle ( title : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Display Show Home Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Display Show Title Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . search _ menu , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Item Ġ= Ġmenu . find Item ( R . id . action _ search ) ĊĠĠĠĠĠĠĠ Ġsearch View Ġ= ĠMenuItem Compat . getAction View ( search Item ) Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View ?. setOn Query Text Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHere Ġis Ġwhere Ġwe Ġare Ġgoing Ġto Ġimplement Ġthe Ġfilter Ġlogic ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġcall Playlist ( query ) ĊĠĠĠĠĠĠĠ Ġsearch _ msg . text Ġ= Ġ" Searching ..." ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcall Playlist ( query : ĠString ){ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"${ host _ address }/ search /${ query }" ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= ĠSoft Code Adapter (). get Json String ( application Context , Ġurl Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONObject ( call Response ). get JSONArray (" result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Playlist ( json Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ msg . text Ġ= Ġ" Search Ġerror , Ġplease Ġtry Ġagain ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ msg . text Ġ= Ġ" Search Ġerror , Ġplease Ġtry Ġagain ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcall Playlist ( json Array : ĠJSONArray ){ ĊĠĠĠĠĠĠĠ Ġval Ġsection _ Ġ= ĠArrayList < Search >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( json Array . length (). minus ( 1 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġjson Array . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Section Ġ= ĠSearch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Section . type Ġ= Ġitem . getString (" type ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Item Ġ= Ġitem . get JSONArray (" items ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. ( member Item ?. length () !!. minus ( 1 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġmember Item . getJSONObject ( x ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaceholder Ġ= Ġgson . fromJson ( members , ĠPlace Holder Search Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaylist Section . item . add ( placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( playlist Section . item . size Ġ> Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection _. add ( playlist Section ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠJSON Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( this . java Class . name , Ġe . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠJson Syntax Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( this . java Class . name , Ġe . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcreate Main Section Data ( section _) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSearch Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtype : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġitem : ĠArrayList < Place Holder Search Data > Ġ= ĠArrayList () ĊĠĠĠ Ġ} Ċ } ĊĊ