package Ġcom . g alk o . best flix . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . ui . AppBar Configuration Ċ import Ġandroidx . navigation . ui . setup With Nav Controller Ċ import Ġcom . g alk o . best flix . R Ċ import Ġcom . g alk o . best flix . model . Movie Details Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . g alk o . best flix . network . Movies Repository Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . bottom _ sheet .* ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMov ies ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġfind Nav Controller ( R . id . nav _ host _ fragment ) ĊĠĠĠĠĠĠĠ Ġtoolbar . setup With Nav Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Ġ= ĠApp Bar Configuration ( nav Controller . graph )) ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view , Ġ" Replace Ġwith Ġyour Ġown Ġaction ", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe Selected Movie ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Bottom Sheet ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Behavior : ĠBottom Sheet Behavior < *> Ġ= ĠBottom Sheet Behavior . from ( bottom _ sheet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet Behavior . state Ġ= ĠBottom Sheet Behavior . STATE _ HIDDEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Behavior : ĠBottom Sheet Behavior < *> Ġ= ĠBottom Sheet Behavior . from ( bottom _ sheet ) ĊĠĠĠĠĠĠĠ Ġbottom Sheet Behavior . add Bottom Sheet Callback ( object Ġ: ĠBottom Sheet Behavior . Bottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( bottom Sheet : ĠView , Ġslide Offset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim med _ background . alpha Ġ= Ġslide Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠBottom Sheet Behavior . STATE _ COLL AP SED ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . select Movie ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Bottom Sheet ( movie : ĠMovie Details ){ ĊĠĠĠĠĠĠĠ ĠPic asso . get (). load ( Movies Repository . POST ER _ PREFIX Ġ+ Ġmovie . poster Post fix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( bottom _ sheet _ poster _ image ) ĊĠĠĠĠĠĠĠ Ġbottom _ sheet _ title . text Ġ= Ġmovie . title ĊĠĠĠĠĠĠĠ Ġbottom _ sheet _ genre . text Ġ= Ġmovie . get Genre Names () ĊĠĠĠĠĠĠĠ Ġif Ġ( movie . tag line . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom _ sheet _ tag line . text Ġ= Ġ"\"" Ġ+ Ġmovie . tag line Ġ+ Ġ"\"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom _ sheet _ tag line . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom _ sheet _ tag line . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbottom _ sheet _ plot . text Ġ= Ġmovie . overview ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Behavior : ĠBottom Sheet Behavior < *> Ġ= ĠBottom Sheet Behavior . from ( bottom _ sheet ) ĊĠĠĠĠĠĠĠ Ġbottom Sheet Behavior . state Ġ= ĠBottom Sheet Behavior . STATE _ EXP AN DED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Behavior : ĠBottom Sheet Behavior < *> Ġ= ĠBottom Sheet Behavior . from ( bottom _ sheet ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bottom Sheet Behavior . state Ġ== ĠBottom Sheet Behavior . STATE _ EXP AN DED ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . select Movie ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }