package Ġcom . chip cer io . m oo vy . features . master _ list Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġcom . chip cer io . m oo vy . R Ċ import Ġcom . chip cer io . m oo vy . common . Constants . HAS _ TM DB _ CONFIG Ċ import Ġcom . chip cer io . m oo vy . features . details . Details Activity Ċ import Ġcom . chip cer io . m oo vy . features . master _ list . DatePicker Fragment . On Date Pick ed Listener Ċ import Ġcom . chip cer io . m oo vy . features . master _ list . Movie Adapter . OnLoad More Movies Listener Ċ import Ġcom . chip cer io . m oo vy . features . master _ list . Movie Adapter . On Movie Selected Listener Ċ import Ġdagger . android . support . D agger AppCompatActivity Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMainActivity Ġ: ĠD agger AppCompatActivity (), ĊĠĠĠ ĠOn Movie Selected Listener , ĠOn Load More Movies Listener , ĠOn Date Pick ed Listener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠPop ular Movies ViewModel ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpref : ĠSharedPreferences ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠMovie Adapter ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġprivate Ġval Ġfiltered Date Stream Ġ= ĠBehavior Subject . create < String >() ĊĊĠĠĠ Ġprivate Ġval Ġpage Number Stream Ġ= ĠPublish Subject . create < Int >() ĊĊĠĠĠ Ġprivate Ġval Ġconfig Stream Ġ= ĠBehavior Subject . create < Boolean >() ĊĊĠĠĠ Ġprivate Ġvar Ġpage Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġsetup Movie List () ĊĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Number Stream . observe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. concat Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Pop ular Movies ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ("${ it . title }, Ġ${ it . release Date }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pop ular Movie Items ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĠTim ber . e ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġt mdb Ġconfiguration ĊĠĠĠĠĠĠĠ Ġval Ġhas Config Ġ= Ġpref . getBoolean ( HAS _ TM DB _ CONFIG , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load T mdb Config () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Stream . onNext ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Number Stream . onNext ( page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġbind Filtered Date () Ġ// Ġwhat Ġif Ġlist Ġis Ġempty ? ĊĠĠĠĠĠĠĠ Ġbind Config Stream () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Pop ular Movie Items ( items : ĠMutable List < Display able Movie >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . add ( items . indexOf ( it ), Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Movie Selected ( display able Movie : ĠDisplay able Movie ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠDetails Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Details Activity . EX TR AS _ MOV IE , Ġdisplay able Movie ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload More Movies () Ġ{ ĊĠĠĠĠĠĠĠ Ġpage Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġpage Number Stream . onNext ( page ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . menu _ filter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Picker Ġ= ĠDate Picker Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . show ( support FragmentManager , Ġ" date _ picker ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker . setOn Date Pick ed Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Date Pick ed ( date : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfiltered Date Stream . onNext ( date ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Config Stream () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Stream . observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġpage Number Stream . onNext ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Filtered Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Date Stream . observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . filter By Date ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Movie List () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠGrid LayoutManager ( this , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMovie Adapter ( mutable ListOf ()) ĊĠĠĠĠĠĠĠ Ġadapter . setOn Movie Selected Listener ( this ) ĊĠĠĠĠĠĠĠ Ġadapter . setOn Load More Movies Listener ( this ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} Ċ }