package Ġcom . project . schedule app ui . menu . home Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Spinner Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . m ich als vec . sing ler ow calendar . calendar . Calendar Changes Observer Ċ import Ġcom . m ich als vec . sing ler ow calendar . calendar . Calendar View Manager Ċ import Ġcom . m ich als vec . sing ler ow calendar . calendar . Single Row Calendar Adapter Ċ import Ġcom . m ich als vec . sing ler ow calendar . selection . Calendar Selection Manager Ċ import Ġcom . m ich als vec . sing ler ow calendar . utils . Date Utils Ċ import Ġcom . project . schedule app ui . R Ċ import Ġkotlinx . android . synt hetic . main . calendar _ item . view .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ home .* Ċ import Ġjava . util .* Ċ Ċ class ĠHome Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Month Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ home , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetData () ĊĠĠĠĠĠĠĠ Ġset Date () ĊĠĠĠĠĠĠĠ Ġset Spinner ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Home Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome ( tag Ġ= Ġ" Developer ", Ġschedule Ġ= Ġ" Database ĠWork shop Ġ- ĠHow Ġto Ġuse ĠSQLite ĠDatabase Ġin Ġandroid ", Ġtime Ġ= Ġ" 0 8 . 0 0 Ġ- Ġ 0 9 . 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome ( tag Ġ= Ġ" Designer ", Ġschedule Ġ= Ġ" UI ĠWork shop Ġ- ĠUsing Ġgrid view Ġto Ġmake Ġmore Ġbeautiful Ġdesign ", Ġtime Ġ= Ġ" 0 9 . 0 0 Ġ- Ġ 1 0 . 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome ( tag Ġ= Ġ" Mark eting ", Ġschedule Ġ= Ġ" FB ĠA ds Ġ- ĠStrategy Ġmarketing Ġfor Ġsell ing Ġmore Ġproducts ", Ġtime Ġ= Ġ" 1 2 . 0 0 Ġ- Ġ 1 2 . 3 0 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhome Adapter Ġ= ĠHome Adapter ( list Home ) ĊĊĠĠĠĠĠĠĠ Ġre cycler view _ home . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġhome Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġcurrent Ġdate Ġto Ġcalendar Ġand Ġcurrent Ġmonth Ġto Ġcurrent Month Ġvariable ĊĠĠĠĠĠĠĠ Ġcalendar . time Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġcurrent Month Ġ= Ġcalendar [ Calendar . MONTH ] ĊĊĠĠĠĠĠĠĠ Ġ// Ġcalendar Ġview Ġmanager Ġis Ġresponsible Ġfor Ġour Ġdisplaying Ġlogic ĊĠĠĠĠĠĠĠ Ġval Ġmy Calendar View Manager Ġ= Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar View Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Calendar View ResourceId ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġdate Ġto Ġcalendar Ġaccording Ġto Ġposition Ġwhere Ġwe Ġare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . time Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġitem Ġis Ġselected Ġwe Ġreturn Ġthis Ġlayout Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġthis Ġexample . Ġmon day , Ġw ed nesday Ġand Ġf riday Ġwill Ġhave Ġspecial Ġitem Ġviews Ġand Ġother Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwill Ġbe Ġusing Ġbasic Ġitem Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isSelected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . selected _ calendar _ item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhere Ġwe Ġreturn Ġitems Ġwhich Ġare Ġnot Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . calendar _ item ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġif Ġwe Ġdon 't Ġwant Ġto Ġdo Ġit Ġthis Ġway , Ġwe Ġcan Ġsimply Ġchange Ġcolor Ġof Ġbackground ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġbind DataTo Calendar View Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind DataTo Calendar View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder : ĠSingle Row Calendar Adapter . Calendar ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate : ĠDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġusing Ġthis Ġmethod Ġwe Ġcan Ġbind Ġdata Ġto Ġcalendar Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgood Ġpractice Ġis Ġif Ġall Ġviews Ġin Ġlayout Ġhave Ġsame ĠIDs Ġin Ġall Ġitem Ġviews ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . tv _ date _ calendar _ item . text Ġ= ĠDate Utils . get Day Number ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . tv _ day _ calendar _ item . text Ġ= ĠDate Utils . get Day 3 Letters Name ( date ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġusing Ġcalendar Ġchanges Ġobserver Ġwe Ġcan Ġtrack Ġchanges Ġin Ġcalendar ĊĠĠĠĠĠĠĠ Ġval Ġmy Calendar Changes Observer Ġ= Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Changes Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġyou Ġcan Ġoverride Ġmore Ġmethods , Ġin Ġthis Ġexample Ġwe Ġneed Ġonly Ġthis Ġone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwhen Selection Changed ( isSelected : ĠBoolean , Ġposition : ĠInt , Ġdate : ĠDate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Date . text Ġ= Ġ"${ Date Utils . getMonth Name ( date )} Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . when Selection Changed ( isSelected , Ġposition , Ġdate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġselection Ġmanager Ġis Ġresponsible Ġfor Ġmanaging Ġselection ĊĠĠĠĠĠĠĠ Ġval Ġmy Selection Manager Ġ= Ġobject Ġ: ĠCalendar Selection Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcan Be ItemSelected ( position : ĠInt , Ġdate : ĠDate ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġdate Ġto Ġcalendar Ġaccording Ġto Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . time Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġthis Ġexample Ġs unday Ġand Ġs aturday Ġcan 't Ġbe Ġselected , Ġothers Ġcan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( cal [ Calendar . DAY _ OF _ WEEK ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar . S ATUR DAY Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar . S UND AY Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġhere Ġwe Ġinit Ġour Ġcalendar , Ġalso Ġyou Ġcan Ġset Ġmore Ġproperties Ġif Ġyou Ġhaven 't Ġspecified Ġin ĠXML Ġlayout ĊĠĠĠĠĠĠĠ Ġval Ġsingle Row Calendar Ġ= Ġmain _ single _ row _ calendar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar View Manager Ġ= Ġmy Calendar View Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Changes Observer Ġ= Ġmy Calendar Changes Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Selection Manager Ġ= Ġmy Selection Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Dates ( get Future Dates Of Current Month ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn Right . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Row Calendar . set Dates ( get Dates Of Next Month ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn Left . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Row Calendar . set Dates ( get Dates Of Previous Month ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Spinner ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspinner : ĠSp inner Ġ= Ġview . findViewById ( R . id . task _ spinner ) ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġan ĠArray Adapter Ġusing Ġthe Ġstring Ġarray Ġand Ġa Ġdefault Ġspinner Ġlayout ĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArray Adapter . createFrom Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . array . task _ array , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ spinner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġadapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSpecify Ġthe Ġlayout Ġto Ġuse Ġwhen Ġthe Ġlist Ġof Ġchoices Ġappears ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set DropDown View Resource ( R . layout . item _ spinner ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApply Ġthe Ġadapter Ġto Ġthe Ġspinner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Dates Of Next Month (): ĠList < Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Month ++ Ġ// Ġ+ Ġbecause Ġwe Ġwant Ġnext Ġmonth ĊĠĠĠĠĠĠĠ Ġif Ġ( current Month Ġ== Ġ 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġwill Ġswitch Ġto Ġj an uary Ġof Ġnext Ġyear , Ġwhen Ġwe Ġreach Ġlast Ġmonth Ġof Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . YEAR , Ġcalendar [ Calendar . YEAR ] Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month Ġ= Ġ 0 Ġ// Ġ 0 Ġ== Ġj an uary ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Dates ( mutable ListOf ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Dates Of Previous Month (): ĠList < Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Month -- Ġ// Ġ- Ġbecause Ġwe Ġwant Ġprevious Ġmonth ĊĠĠĠĠĠĠĠ Ġif Ġ( current Month Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġwill Ġswitch Ġto Ġde cember Ġof Ġprevious Ġyear , Ġwhen Ġwe Ġreach Ġfirst Ġmonth Ġof Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . YEAR , Ġcalendar [ Calendar . YEAR ] Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month Ġ= Ġ 1 1 Ġ// Ġ 1 1 Ġ== Ġde cember ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Dates ( mutable ListOf ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Future Dates Of Current Month (): ĠList < Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġall Ġnext Ġdates Ġof Ġcurrent Ġmonth ĊĠĠĠĠĠĠĠ Ġcurrent Month Ġ= Ġcalendar [ Calendar . MONTH ] ĊĠĠĠĠĠĠĠ Ġreturn Ġget Dates ( mutable ListOf ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Dates ( list : ĠMutable List < Date >): ĠList < Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġload Ġdates Ġof Ġwhole Ġmonth ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . MONTH , Ġcurrent Month ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . DAY _ OF _ MONTH , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġlist . add ( calendar . time ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Month Ġ== Ġcalendar [ Calendar . MONTH ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DATE , Ġ+ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( calendar [ Calendar . MONTH ] Ġ== Ġcurrent Month ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( calendar . time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DATE , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} Ċ }