package Ġcom . alam kan ak . week view . sample Ċ Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . alam kan ak . week view . Week View Ċ import Ġcom . alam kan ak . week view . sample . apic lient . Api Event Ċ import Ġcom . alam kan ak . week view . sample . data . Events Api Ċ import Ġcom . alam kan ak . week view . sample . data . Fake Events Api Ċ import Ġjava . text . SimpleDateFormat Ċ Ċ private Ġdata Ġclass ĠAsync ViewState ( ĊĠĠĠ Ġval Ġevents : ĠList < Api Event > Ġ= Ġempty List (), ĊĠĠĠ Ġval ĠisLoading : ĠBoolean Ġ= Ġfalse Ċ ) Ċ Ċ private Ġclass ĠAsync ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġevents Api : ĠEvents Api Ċ ) Ġ{ ĊĠĠĠ Ġval Ġview State Ġ= ĠMutable LiveData < Async ViewState >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġview State . value Ġ= ĠAsync ViewState ( isLoading Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfetch Events () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Events () Ġ= Ġevents Api . fetch Events Ġ{ ĊĠĠĠĠĠĠĠ Ġview State . value Ġ= ĠAsync ViewState ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( event : ĠApi Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Events Ġ= Ġview State . value ?. events Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġview State . value Ġ= ĠAsync ViewState ( events Ġ= Ġall Events . minus ( event )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAsync Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġweek ViewType Ġ= ĠTYPE _ TH REE _ DAY _ VIEW ĊĊĠĠĠ Ġprivate Ġval Ġweek View : ĠWeek View < Api Event > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠfindViewById < Week View < Api Event >>( R . id . week View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠAsync ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠAsync ViewModel ( Fake Events Api ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġval Ġprogress Dialog : ĠProgress Dialog Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Dialog ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message (" Loading Ġevents Ġ... ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ base ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . view State . observe ( this , ĠObserver Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view State . isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek View . submit ( view State . events ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġweek View . setOn Event ClickListener Ġ{ Ġdata , Ġrect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Removed Ġ${ data . name }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġweek View . setOn Event Long ClickListener Ġ{ Ġdata , Ġrect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Long Ġpressed Ġevent : Ġ${ data . name }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġweek View . setOn Empty View Long ClickListener Ġ{ Ġtime Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat . get DateTime Instance () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Empty Ġview Ġlong Ġpressed : Ġ${ sdf . format ( time . time )} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ today Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweek View . goTo Today () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ day _ view Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Day View ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ three _ day _ view Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Three Day View ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ week _ view Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Week View ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Day View ( item : ĠMenuItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( week ViewType Ġ== ĠTYPE _ DAY _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġitem . isChecked . not () ĊĠĠĠĠĠĠĠ Ġweek ViewType Ġ= ĠTYPE _ DAY _ VIEW ĊĠĠĠĠĠĠĠ Ġweek View . numberOf Visible Days Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Three Day View ( item : ĠMenuItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( week ViewType Ġ== ĠTYPE _ TH REE _ DAY _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġitem . isChecked . not () ĊĠĠĠĠĠĠĠ Ġweek ViewType Ġ= ĠTYPE _ TH REE _ DAY _ VIEW ĊĠĠĠĠĠĠĠ Ġweek View . numberOf Visible Days Ġ= Ġ 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Week View ( item : ĠMenuItem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( week ViewType Ġ== ĠTYPE _ WEEK _ VIEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġitem . isChecked . not () ĊĠĠĠĠĠĠĠ Ġweek ViewType Ġ= ĠTYPE _ WEEK _ VIEW ĊĠĠĠĠĠĠĠ Ġweek View . numberOf Visible Days Ġ= Ġ 7 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ DAY _ VIEW Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ TH REE _ DAY _ VIEW Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ WEEK _ VIEW Ġ= Ġ 3 ĊĠĠĠ Ġ} Ċ } Ċ