package Ġcom . ke e ppi eces . android . ui . detail Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . app . Activity Options Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . material . datepicker . Material DatePicker Ċ import Ġcom . ke e ppi eces . android . R Ċ import Ġcom . ke e ppi eces . android . ui . monthly . Custom Mode Ċ import Ġcom . ke e ppi eces . android . ui . monthly . Day Mode Ċ import Ġcom . ke e ppi eces . android . ui . monthly . Month Mode Ċ import Ġcom . ke e ppi eces . line _ chart . DataPoint Ċ import Ġkotlinx . android . synt hetic . main . activity _ detail .* Ċ import Ġkotlinx . android . synt hetic . main . include _ detail _ date bar .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . chrono . Iso Ch ron ology Ċ Ċ const Ġval ĠDaily Detail Ġ= Ġ 0 Ċ const Ġval ĠMonth ly Detail Ġ= Ġ 1 ĊĊ Ċ class ĠDetail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠstartDate : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠendDate : ĠString ĊĠĠĠ Ġprivate Ġvar Ġmode Ġ= ĠMonth Mode ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ detail ) ĊĠĠĠĠĠĠĠ Ġinit Date () ĊĠĠĠĠĠĠĠ Ġdetail Line Chart . set Curve BorderColor ( color Int ) ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup Fragment () ĊĠĠĠĠĠĠĠ Ġdetail Left Arrow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Date (- time Span ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdetail Right Arrow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Date ( time Span ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdetail Date Text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMaterial DatePicker . Builder . date Range Picker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpicker Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker . show ( support FragmentManager , Ġpicker . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker . add On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Span Ġ= Ġ(( it . second !! Ġ- Ġit . first !! ) Ġ/ Ġ( 1 0 0 0 Ġ* Ġ 3 6 0 0 Ġ* Ġ 2 4 )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Span Ġ= Ġif Ġ( time Span Ġ== Ġ 0 ) Ġ 1 Ġelse Ġtime Span ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġformat . format ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart LocalDate Ġ= ĠLocalDate . parse ( startDate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= Ġformat . format ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend LocalDate Ġ= ĠLocalDate . parse ( endDate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġinit Date () Ġ{ ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġstart LocalDate . toString () ĊĠĠĠĠĠĠĠ ĠendDate Ġ= Ġend LocalDate . toString () ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġwhen Ġ( time Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠDay Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMonth Mode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġupdate Date ( span : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠMonth Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Span Ġ= Ġif Ġ( span Ġ> Ġ 0 ) Ġ 1 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart LocalDate Ġ= Ġstart LocalDate . plus Months ( month Span . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend LocalDate Ġ= Ġstart LocalDate . plus Months ( 1 ). plus Days (- 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart LocalDate Ġ= Ġstart LocalDate . plus Days ( span . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend LocalDate Ġ= Ġend LocalDate . plus Days ( span . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġstart LocalDate . toString () ĊĠĠĠĠĠĠĠ ĠendDate Ġ= Ġend LocalDate . toString () ĊĠĠĠĠĠĠĠ ĠLog . d (" Detail ĠDate ĠUpdate ", Ġ"$ startDate Ġ~ Ġ$ endDate ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġprivate Ġfun Ġupdate Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġend LocalDate . year ĊĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġend LocalDate . month Value ĊĠĠĠĠĠĠĠ Ġval Ġlast Day Ġ= Ġend LocalDate . day OfMonth ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġif Ġ( start LocalDate . day OfMonth Ġ== Ġ 1 Ġ&& Ġstart LocalDate . month Value Ġ== Ġmonth Ġ&& Ġlast Day Ġ>= Ġ 2 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( last Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 1 Ġ-> ĠMonth Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 0 Ġ-> Ġwhen Ġ( month ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠMonth Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> ĠMonth Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 Ġ-> ĠMonth Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 Ġ-> ĠMonth Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCustom Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 9 Ġ-> Ġif Ġ( month Ġ== Ġ 2 ) ĠMonth Mode Ġelse ĠCustom Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 8 Ġ-> Ġif Ġ( month Ġ== Ġ 2 Ġ&& ĠI so Ch ron ology . INSTANCE . is Le ap Year ( year . to Long ())) ĠMonth Mode Ġelse ĠCustom Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCustom Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( time Span Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDay Mode ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Mode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠDetail Fragment ( startDate , ĠendDate , Ġtime Span ) ĊĠĠĠĠĠĠĠ Ġreplace Fragment ( fragment ) ĊĠĠĠĠĠĠĠ Ġsetup Date bar () ĊĠĠĠĠĠĠĠ Ġ// Ġdetail Line Chart . addData Points ( getRandom Points ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreplace Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġtransition . replace ( R . id . detail Fragment , Ġfragment ) ĊĠĠĠĠĠĠĠ Ġtransition . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Date bar () Ġ{ ĊĠĠĠĠĠĠĠ Ġdetail Date Text . text Ġ= Ġif Ġ( time Span Ġ== Ġ 1 ) ĠstartDate Ġelse Ġ"$ startDate Ġ~ Ġ$ endDate " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( detail Toolbar Ġas ĠToolbar ?) ĊĠĠĠĠĠĠĠ Ġval Ġaction Bar Ġ= Ġsupport ActionBar ĊĠĠĠĠĠĠĠ Ġaction Bar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġaction Bar ?. title Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ detail , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ COLOR Ġ= Ġ" key - color " ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcolor Int Ġ= ĠR . color . dark _ green ĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) Ġprivate Ġvar Ġstart LocalDate Ġ= ĠLocalDate . now () ĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) Ġprivate Ġvar Ġend LocalDate Ġ= ĠLocalDate . now () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdetail Type : ĠInt Ġ= ĠMonth ly Detail ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtime Span : ĠInt Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠĠĠĠĠ Ġfun Ġstart ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate 1 : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate 2 : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Color Res Ġcolor : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan : ĠInt ?= null ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠDetail Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( KEY _ COLOR , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Int Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart LocalDate Ġ= ĠLocalDate . parse ( date 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend LocalDate Ġ= ĠLocalDate . parse ( date 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetail Type Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span Ġ!= Ġnull ) Ġtime Span Ġ= Ġspan ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Options Compat . make Scene Transition Animation ( context Ġas ĠAppCompatActivity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= Ġcontext . window . exit Transition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . window . exit Transition Ġ= Ġtransition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent , Ġoptions . to Bundle ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠgetRandom Points (): ĠMutable List < DataPoint > Ġ{ ĊĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < DataPoint >() ĊĠĠĠ Ġval Ġrange Ġ= Ġ( 0 .. 1 0 ) ĊĊĠĠĠ Ġ( 1 .. 1 5 ). forEach Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġlist . add ( DataPoint ( range . random ()* 1 0 0 f )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġlist Ċ }