package Ġcom . bos w el ja . ep hemer is . sample . coll ap sing Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . bos w el ja . ep hemer is . core . data . Calendar Month Page Source Ċ import Ġcom . bos w el ja . ep hemer is . core . data . Calendar Page Source Ċ import Ġcom . bos w el ja . ep hemer is . core . data . Calendar Week Page Source Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . Sharing Started Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . state In Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . datetime . DayOfWeek Ċ import Ġkotlinx . datetime . LocalDate Ċ import Ġkotlinx . datetime . to Java LocalDate Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . format . Format Style Ċ Ċ class ĠCol lap sing Calendar ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdate Formatter Ġ= ĠDateTime Formatter . of Localized Date ( Format Style . MEDIUM ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ calendar Expanded Ġ= ĠMutable State Flow ( true ) ĊĠĠĠ Ġprivate Ġval Ġ_ header Text Ġ= ĠMutable State Flow ("") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFlow Ġwhether Ġthe Ġcalendar Ġshould Ġbe Ġexpanded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcalendar Expanded : ĠState Flow < Boolean > Ġ= Ġ_ calendar Expanded ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFlow Ġthe Ġtext Ġto Ġbe Ġdisplayed Ġin Ġthe Ġheader . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġheader Text : ĠState Flow < String > Ġ= Ġ_ header Text ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFlow s Ġthe Ġcalendar 's Ġcurrent Ġpage Ġsource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcalendar Page Source : ĠState Flow < Calendar Page Source > Ġ= Ġcalendar Expanded ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġexpanded Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expanded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Month Page Source ( DayOfWeek . S UND AY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Week Page Source ( DayOfWeek . S UND AY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. state In ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSh aring Started . E ager ly , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Month Page Source ( DayOfWeek . S UND AY ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToggle Ġthe Ġvalue Ġof Ġ[ calendar Expanded ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Calendar Expanded () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ calendar Expanded . emit (! _ calendar Expanded . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Page Changed ( display ed DateRange : ĠClosed Range < LocalDate >) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Text Ġ= Ġ"${ display ed DateRange . start . to Java LocalDate (). format ( date Formatter )} Ġ- Ġ${ display ed DateRange . end Inclusive . to Java LocalDate (). format ( date Formatter )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ header Text . emit ( header Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ