package Ġcom . play one . mobile . ui . play one Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Visible ForTesting Ċ import Ġandroid . support . v 4 . widget . Circular Progress Drawable Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġcom . like . Like Button Ċ import Ġcom . like . On Like Listener Ċ import Ġcom . play one . mobile . ext . if True Ċ import Ġcom . play one . mobile . ext . otherwise Ċ import Ġcom . play one . mobile . presentation . model . Play one View Ċ import Ġcom . play one . mobile . ui . Base Inject ing Fragment Ċ import Ġcom . play one . mobile . ui . Build Config Ċ import Ġcom . play one . mobile . ui . Navigator Ċ import Ġcom . play one . mobile . ui . R Ċ import Ġcom . play one . mobile . ui . injection . module . G lide App Ċ import Ġcom . play one . mobile . ui . mapper . Play one Mapper Ċ import Ġcom . play one . mobile . ui . model . Play one Detail ViewModel Ċ import Ġcom . play one . mobile . ui . model . Play one Part icip ator Item ViewModel Ċ import Ġcom . play one . mobile . ui . navigate To Uri Ċ import Ġcom . play one . mobile . ui . view . recycler . Display able Item Ċ import Ġkotlinx . android . synt hetic . main . fragment _ play one _ detail . date TextView Ċ import Ġkotlinx . android . synt hetic . main . fragment _ play one _ detail . favorite Button Ċ import Ġkotlinx . android . synt hetic . main . fragment _ play one _ detail . iv _ team _ map Ċ import Ġkotlinx . android . synt hetic . main . fragment _ play one _ detail . progress Bar Ċ import Ġkotlinx . android . synt hetic . main . fragment _ play one _ detail . rv _ part icipation Ċ import Ġkotlinx . android . synt hetic . main . fragment _ play one _ detail . textView 2 Ċ import Ġkotlinx . android . synt hetic . main . item _ play one _ constraint . team Cover Thumb Ċ import Ġkotlinx . android . synt hetic . main . item _ play one _ constraint . tv _ limit Ċ import Ġkotlinx . android . synt hetic . main . item _ play one _ constraint . tv _ title Ċ import Ġjava . util . Random Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPlay one Detail Fragment Ġ: ĠBase Inject ing Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPARAMETER _ PLAY ONE _ ITEM Ġ= Ġ" PARAMETER _ PLAY ONE _ ITEM " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( play one : ĠPlay one View ) Ġ= ĠPlay one Detail Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( PARAMETER _ PLAY ONE _ ITEM Ġto Ġplay one ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġplay one Adapter : ĠPlay one Adapter ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġmapper : ĠPlay one Mapper ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġnavigator : ĠNavigator ĊĊĠĠĠ Ġprivate Ġvar ĠviewModel : ĠPlay one Detail ViewModel ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġplay one Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġarguments ?. get Serializable ( PARAMETER _ PLAY ONE _ ITEM ) Ġas ĠPlay one View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġg lide Request Ġby Ġlazy Ġ{ ĠG lide App . with ( this ) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstatic Map Uri : ĠString ĊĊĠĠĠ Ġprivate Ġval Ġobserver Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠObserver < Play one View > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġplay one View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Views ( play one View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id () Ġ= ĠR . layout . fragment _ play one _ detail ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// Ġget ĠViewModel Ġfrom Ġactivity ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Recycler () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel ?. load ( play one ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġfavorite Button . is Lik ed Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewModel () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Providers . of ( it ). get ( Play one Detail ViewModel :: class . java ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . observe Play one Detail ( this , Ġobserver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . observe Is Progress ing ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . if True Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv _ team _ map . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġotherwise Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv _ team _ map . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle :: add Observer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Views ( play one View : ĠPlay one View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtv _ limit . text Ġ= Ġplay one View . limit . toString () ĊĠĠĠĠĠĠĠ Ġtv _ title . text Ġ= Ġplay one View . name ĊĠĠĠĠĠĠĠ Ġdate TextView . text Ġ= Ġplay one View . date . toString () ĊĊĠĠĠĠĠĠĠ ĠG lide App . with ( team Cover Thumb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( play one View . cover Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . team _ pic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . team _ pic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( team Cover Thumb ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġfor Ġdemo ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġmake Random Text () ĊĠĠĠĠĠĠĠ ĠtextView 2 . text Ġ= Ġtext ĊĊĠĠĠĠĠĠĠ Ġval Ġzoom Ġ= ĠgetString ( R . string . map _ zoom ). toInt () ĊĠĠĠĠĠĠĠ Ġstatic Map Uri Ġ= ĠgetString ( R . string . static _ map , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzoom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . map _ width ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . map _ height ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . map _ mark _ color ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay one View . longitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay one View . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . GOOGLE _ MAP _ API _ KEY ) ĊĊĠĠĠĠĠĠĠ Ġg lide Request . load ( static Map Uri ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Compat Activity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcircular Progress Drawable Ġ= ĠCircular Progress Drawable ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircular Progress Drawable . stroke Width Ġ= Ġ 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircular Progress Drawable . center Radius Ġ= Ġ 3 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircular Progress Drawable . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( circular Progress Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Crop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinto ( iv _ team _ map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġiv _ team _ map . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg mm Intent Uri Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( getString ( R . string . map _ uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay one View . longitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay one View . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzoom )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . navigate To Uri < Play one Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Play one Detail Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg mm Intent Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . google . android . apps . maps ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfavorite Button . is Lik ed Ġ= Ġplay one View . is F avor ited ĊĠĠĠĠĠĠĠ Ġfavorite Button . setOn Like Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlik ed Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel ?. set Favorite ( it . is Lik ed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġun Lik ed Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel ?. set Favorite ( it . is Lik ed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġhere Ġis Ġfor Ġdemo Ġshould Ġfix ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmake Random Display able ItemList () ĊĊĠĠĠĠĠĠĠ Ġplay one Adapter . update ( list ) ĊĠĠĠĠĠĠĠ Ġplay one Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Favorite Icon () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġprivate Ġfun Ġmake Random Text () Ġ= Ġ" æĪĳ ãĢ ħ ãģ¯ ç¦ı å² ¡ ãĥĲ ãĤ¹ ãĤ± ãģ® åĲĮ å¥½ ä¼ļ ãģ§ãģĻ ãĢĤ åĽ½ ç± į ãĢģ çĶ· å¥³ ãģ¯ åķı ãģĦ ãģ¾ãģĽãĤĵ ãĢĤ ãĥĲ ãĤ¹ ãĤ± ãģĮ å¥½ ãģį ãģª ãĤī åĪĿ å¿ĥ èĢħ ãģ§ ãĤĤ å¤§ æŃ ĵ è¿İ ãģ§ãģĻ ãĢĤ " ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġprivate Ġfun Ġmake Random Display able ItemList (): ĊĠĠĠĠĠĠĠ ĠList < Display able Item < Play one Part icip ator Item ViewModel >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRandom () ĊĠĠĠĠĠĠĠ Ġr . set Seed ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġval Ġrandom Joined Number Ġ= Ġr . nextInt () Ġ% Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Display able Item < Play one Part icip ator Item ViewModel >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. random Joined Number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠDisplay able Item . to Display able Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay one Part icip ator Item ViewModel (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay one Part icip ator Item ViewModel . DISPLAY _ TYPE _ P ARTIC IP ATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Recycler () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrv _ part icipation . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġplay one Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠOn Like Listener Builder Ġ{ ĊĠĠĠ Ġvar Ġlik ed : Ġ( Like Button ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġvar Ġun Lik ed : Ġ( Like Button ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġfun Ġbuild () Ġ= Ġobject : ĠOn Like Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlik ed ( var 1 : ĠLike Button ) Ġ= Ġthis @ On Like Listener Builder . lik ed ( var 1 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġun Lik ed ( var 1 : ĠLike Button ) Ġ= Ġthis @ On Like Listener Builder . un Lik ed ( var 1 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠLike Button . setOn Like Listener ( builder : ĠOn Like Listener Builder . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠ Ġthis . setOn Like Listener ( On Like Listener Builder (). apply ( builder ). build ())