package Ġcom . fall gam let . calendar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . view pager . widget . Pager Adapter Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġjava . util .* Ċ import Ġkotlin . math . abs Ċ Ċ open Ġclass ĠCalendar ViewPager Ġ: ĠView Pager Ġ{ ĊĊĠĠĠ Ġvar Ġtoday : ĠYear Month Day Ġ= ĠCalendar . getInstance (). to Year Month Day () ĊĠĠĠ Ġvar Ġconfig Ġ= ĠMonth View Config () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġconstructor ( context : ĠContext ): Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?): Ġsuper ( context , Ġattrs ) Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Attrs ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Attrs ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġtoday Ġ= Ġcalendar . to Year Month Day () ĊĠĠĠĠĠĠĠ Ġvar Ġconfig Ġ= ĠMonth View Config Helper . default Config ( calendar , Ġresources ) ĊĠĠĠĠĠĠĠ Ġattrs ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( this , ĠR . style able . Calendar ViewPager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig . apply Attributes ( typed Array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . config Ġ= Ġconfig ĊĊĠĠĠĠĠĠĠ Ġthis . adapter Ġ= ĠCalendar Pager Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Prev ClickListener Ġ= Ġ{ ĠsetCurrent Item Prev () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ClickListener Ġ= Ġ{ ĠsetCurrent Item Next () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠsetCurrent Item ( today . to Year Month (), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMonth View Config . apply Attributes ( typed Array : ĠTyped Array ): ĠMonth View Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek First Day Ġ= Ġtyped Array . getInt ( R . style able . Calendar ViewPager _ android _ first DayOfWeek , Ġweek First Day ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Text Is Visible Ġ= Ġtyped Array . getBoolean ( R . style able . Calendar ViewPager _ cc _ month Text Is Visible , Ġmonth Text Is Visible ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Button Is Visible Ġ= Ġtyped Array . getBoolean ( R . style able . Calendar ViewPager _ cc _ month Button Is Visible , Ġmonth Button Is Visible ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth TextAppearance Ġ= Ġtyped Array . getResource Id ( R . style able . Calendar ViewPager _ cc _ month TextAppearance , Ġandroid . R . style . TextAppearance _ Material _ Title ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek Day TextAppearance Ġ= Ġtyped Array . getResource Id ( R . style able . Calendar ViewPager _ cc _ week Day TextAppearance , Ġandroid . R . style . TextAppearance _ Material _ Body 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Day TextAppearance Ġ= Ġtyped Array . getResource Id ( R . style able . Calendar ViewPager _ cc _ month Day TextAppearance , Ġandroid . R . style . TextAppearance _ Material _ Body 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Day Other TextAppearance Ġ= Ġtyped Array . getResource Id ( R . style able . Calendar ViewPager _ cc _ month Day Other TextAppearance , Ġandroid . R . style . TextAppearance _ Material _ Body 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Text Tint Ġ= Ġtyped Array . getColor State List ( R . style able . Calendar ViewPager _ cc _ month Text Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtyped Array . getColor ( R . style able . Calendar ViewPager _ cc _ month Text Tint , Ġmonth Text Tint . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠColor State List . valueOf ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Tint List Ġ= Ġtyped Array . getColor State List ( R . style able . Calendar ViewPager _ cc _ month Button Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtyped Array . getColor ( R . style able . Calendar ViewPager _ cc _ month Button Tint , Ġbutton Tint List . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠColor State List . valueOf ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek Header Divider Tint Ġ= Ġtyped Array . getColor State List ( R . style able . Calendar ViewPager _ cc _ week Header Divider Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtyped Array . getColor ( R . style able . Calendar ViewPager _ cc _ week Header Divider Tint , Ġweek Header Divider Tint . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠColor State List . valueOf ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek Day Text Tint Ġ= Ġtyped Array . getColor State List ( R . style able . Calendar ViewPager _ cc _ week Day Text Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtyped Array . getColor ( R . style able . Calendar ViewPager _ cc _ week Day Text Tint , Ġweek Day Text Tint . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠColor State List . valueOf ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Day Text Tint Ġ= Ġtyped Array . getColor State List ( R . style able . Calendar ViewPager _ cc _ month Day Text Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtyped Array . getColor ( R . style able . Calendar ViewPager _ cc _ month Day Text Tint , Ġmonth Day Text Tint . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠColor State List . valueOf ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Day Other Text Tint Ġ= Ġtyped Array . getColor State List ( R . style able . Calendar ViewPager _ cc _ month Day Other Text Tint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtyped Array . getColor ( R . style able . Calendar ViewPager _ cc _ month Day Other Text Tint , Ġmonth Day Other Text Tint . default Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠColor State List . valueOf ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweek Header Divider Height Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Calendar ViewPager _ cc _ week Header Height , Ġweek Header Divider Height ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Button Size Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Calendar ViewPager _ cc _ month Button Size , Ġmonth Button Size ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Button Padding Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Calendar ViewPager _ cc _ month Button Padding , Ġmonth Button Padding ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Button Margin Ġ= Ġtyped Array . get Dimension Pixel Size ( R . style able . Calendar ViewPager _ cc _ month Button Margin , Ġmonth Button Margin ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Button Prev Icon Res Id Ġ= Ġtyped Array . getResource Id ( R . style able . Calendar ViewPager _ cc _ month Button Prev Icon , ĠR . drawable . ic _ month _ button _ prev _ 2 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Button Next Icon Res Id Ġ= Ġtyped Array . getResource Id ( R . style able . Calendar ViewPager _ cc _ month Button Next Icon , ĠR . drawable . ic _ month _ button _ next _ 2 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetCurrent Item Prev () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprev Item Ġ= Ġcurrent Item Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( prev Item Ġ>= Ġ 0 ) ĠsetCurrent Item ( prev Item , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetCurrent Item Next () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġadapter ?. count Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġnext Item Ġ= Ġcurrent Item Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( next Item Ġ< Ġcount ) ĠsetCurrent Item ( next Item , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Item ( month : ĠYear Month ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġcalendar Pager Adapter ?. getPosition For Month ( month ) Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsmooth Scroll Ġ= Ġabs ( position Ġ- Ġcurrent Item ) Ġ< Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Item ( position , Ġsmooth Scroll ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Item ( month : ĠYear Month , Ġsmooth Scroll : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġcalendar Pager Adapter ?. getPosition For Month ( month ) Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġ- 1 ) ĠsetCurrent Item ( position , Ġsmooth Scroll ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Config ( config : ĠMonth View Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . config Ġ= Ġconfig ĊĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. set Config ( config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Adapter ( adapter : ĠP ager Adapter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setAdapter ( adapter ) ĊĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. page Wrapper Creator Ġ= Ġpage Wrapper Creator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġpage Wrapper Creator : Ġ(( parent : ĠViewGroup , Ġmonth : ĠYear Month ) Ġ-> ĠWrapper ViewHolder )? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. page Wrapper Creator Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Range ( min Month : ĠYear Month , Ġmax Month : ĠYear Month ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġit . getMonth ( currentItem ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Range ( min Month , Ġmax Month ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Item ( month , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On ChangeListener ( listener : Ġ(( month View : ĠMonth View ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. on ChangeListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Day ClickListener ( listener : Ġ(( day : ĠYear Month Day , Ġholder : ĠDay ViewHolder ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. on Day ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcalendar Pager Adapter : ĠCalendar Pager Adapter ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . adapter Ġas ? ĠCalendar Pager Adapter ĊĊĠĠĠ Ġfun Ġnotify Calendar Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Pager Adapter ?. notify Calendar Changed () ĊĠĠĠ Ġ} Ċ } Ċ