package Ġcom . ary a . my mov ied b . movie Ċ Ċ import Ġandroid . app . Activity Options Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . ary a . my mov ied b . Build Config . API _ KEY Ċ import Ġcom . ary a . my mov ied b . model . Genre Ċ import Ġcom . ary a . my mov ied b . R Ċ import Ġcom . ary a . my mov ied b . adapter . Movie Adapter Ċ import Ġcom . ary a . my mov ied b . api . DataSource Ċ import Ġcom . ary a . my mov ied b . api . Network Provider Ċ import Ġcom . ary a . my mov ied b . model . Movie Response Ċ import Ġcom . ary a . my mov ied b . model . Movie Result Ċ import Ġcom . ary a . my mov ied b . view model . Movie ViewModel Ċ import Ġcom . tap ad oo . aler ter . A ler ter Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ movie .* Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . Ċ Ġ*/ Ċ class ĠMovie Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġview Search : ĠSearch View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmovie Adapter : ĠMovie Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMovie ViewModel ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġall Gen res Ġ= ĠlistOf < Genre >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ movie , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , ĠViewModel Provider . New Instance Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Movie ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠgetAll Movies () ĊĠĠĠĠĠĠĠ ĠgetAll Gen res () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Movies () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . set Movie () ĊĠĠĠĠĠĠĠ Ġshow Loading ( true ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . getError (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA ler ter . create ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" connection Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText (" make Ġsure Ġyou Ġare Ġconnected Ġto Ġthe Ġinternet ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set BackgroundColor Res ( R . color . light Green ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( R . drawable . ic _ wifi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Infinite Duration ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Button (" Refresh ", ĠR . style . Alert Button , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshim mer Frame Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetAll Movies () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA ler ter . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Movie (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġmovie Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie Result . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshim mer Frame Layout ?. stop Sh im mer Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Adapter ( movie Result . to Mutable List ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Movie Detail ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ movie . adapter Ġ= Ġmovie Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Gen res () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . set Genre () ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Genre (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġgenre Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( genre . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Gen res Ġ= Ġgenre ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshim mer Frame Layout ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ movie ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshim mer Frame Layout ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ movie ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Movie Detail ( movie Result : ĠMovie Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠMovie Detail Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Movie Result :: class . java . simple Name , Ġmovie Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠActivity Options . make Custom Animation ( context , ĠR . anim . enter _ from _ right , ĠR . anim . exit _ to _ left ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent , Ġoptions . to Bundle ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġshim mer Frame Layout . start Sh im mer Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġshim mer Frame Layout . stop Sh im mer Animation () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . search _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġval Ġmenu Item Ġ= Ġmenu . find Item ( R . id . search _ menu ) ĊĠĠĠĠĠĠĠ Ġview Search Ġ= Ġmenu Item . action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġview Search . query Hint Ġ= Ġ" Search Ġmovies ..." ĊĠĠĠĠĠĠĠ Ġset View Search () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset View Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Search . setOn Query Text Listener ( object : ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Movie ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Search . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ movie . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ search _ movie . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. bottom Navigation View ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch Movie ( title : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrv _ movie . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġrv _ search _ movie . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġpb _ search _ movie . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġactivity ?. bottom Navigation View ?. visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= ĠNetwork Provider . provides Http Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( DataSource :: class . java ) ĊĠĠĠĠĠĠĠ ĠdataSource . search Movie ( API _ KEY , Ġtitle ). enqueue ( object : ĠCallback < Movie Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Movie Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" No Ġresult Ġfor Ġquery ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Movie Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Movie Response > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb _ search _ movie . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Result Ġ= Ġresponse . body ()?. result ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ search _ movie . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Adapter Ġ= ĠMovie Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Result !!. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġmovie Result Ġ-> Ġshow Movie Detail ( movie Result ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ search _ movie ?. adapter Ġ= Ġmovie Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ