package Ġio . github . d roid ka igi . conf sched 2 0 1 8 . presentation . favorite Ċ Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . transition . Transition Inflater Ċ import Ġandroid . support . transition . Transition Manager Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . support . v 7 . widget . Simple Item Animator Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . x wr ay . group ie . Group Adapter Ċ import Ġcom . x wr ay . group ie . ViewHolder Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . R Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . databinding . Fragment Favorite Sessions Binding Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . di . Injectable Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . model . Session Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . presentation . Navigation Controller Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . presentation . Result Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . presentation . sessions . item . Favorite Sessions Section Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . presentation . sessions . item . Speech Session Item Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . Progress Time Latch Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . Session Alarm Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . ext . add On Scroll Listener Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . ext . is G one Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . ext . observe Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . ext . set Linear Divider Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . ext . setText If Changed Ċ import Ġio . github . d roid ka igi . conf sched 2 0 1 8 . util . ext . setVisible Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠF avorite Sessions Fragment Ġ: ĠFragment (), ĠInjectable Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Favorite Sessions Binding ĊĊĠĠĠ Ġprivate Ġval Ġsessions Section Ġ= ĠF avorite Sessions Section () ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġnavigation Controller : ĠNavigation Controller ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġsession Alarm : ĠSession Alarm ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĠĠĠ Ġprivate Ġval Ġsessions ViewModel : ĠF avorite Sessions ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Favorite Sessions ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġon Favorite ClickListener Ġ= Ġ{ Ġsession : ĠSession . Speech Session Ġ-> ĊĠĠĠĠĠĠĠ Ġsessions ViewModel . on Favorite Click ( session ) ĊĠĠĠĠĠĠĠ Ġsession Alarm . toggle Register ( session ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Favorite Sessions Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġval Ġprogress Time Latch Ġ= ĠProgress Time Latch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress . visibility Ġ= Ġif Ġ( it ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprogress Time Latch . loading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsessions ViewModel . sessions . observe ( this , Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Time Latch . loading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsessions Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsessions Section . update Sessions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsessions , Ġon Favorite ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . my session Inactive Group . setVisible ( sessions . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . sessions Recycler . setVisible ( sessions . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( result . e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Time Latch . loading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Adapter Ġ= ĠGroup Adapter < ViewHolder >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( sessions Section ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On ItemClickListener ({ Ġitem , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Item Ġ= Ġitem Ġas ? ĠSpeech Session Item Ġ?: Ġreturn @ setOn ItemClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . navigate To Session Detail Activity ( session Item . session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . sessions Recycler . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġgroup Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( item Animator Ġas ĠSimple Item Animator ). supports Change Animations Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Scroll Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Scroll StateChanged Ġ= Ġ{ Ġ_: ĠRecyclerView ?, ĠnewState : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . sessions Recycler . is G one ()) Ġreturn @ add On Scroll Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Day Header Visibility ( newState Ġ!= ĠRecyclerView . SCROLL _ STATE _ IDLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sc rolled Ġ= Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= Ġlayout Manager Ġas ĠLinearLayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Position Ġ= Ġlinear LayoutManager . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Number Ġ= Ġsessions Section . getDate Number OrNull ( first Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Number Ġ?: Ġreturn @ add On Scroll Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Title Ġ= ĠgetString ( R . string . session _ day _ title , Ġday Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . day Header . setText If Changed ( day Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Linear Divider ( R . drawable . shape _ divider _ vertical _ 1 2 dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġas ĠLinearLayoutManager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Day Header Visibility ( visible Day Header : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= ĠTransition Inflater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate Transition ( R . transition . date _ header _ visibility ) ĊĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( binding . sessions Constraint Layout , Ġtransition ) ĊĠĠĠĠĠĠĠ Ġbinding . day Header . setVisible ( visible Day Header ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠF avorite Sessions Fragment Ġ= ĠF avorite Sessions Fragment () ĊĠĠĠ Ġ} Ċ } Ċ