/** Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠD z mit ry ĠL ak is au Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġby . dz mit ry _ l ak is au . month _ year _ picker _ dialog Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . with Styled Attributes Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ internal Ġclass ĠMonth Year Picker View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġdef Style Res : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġrv Months : ĠRecyclerView ĊĠĠĠ Ġprivate Ġvar Ġrv Years : ĠRecyclerView ĊĊĠĠĠ Ġvar Ġmonths Adapter : ĠMonth s Adapter ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġyears Adapter : ĠYear s Adapter ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġtv Selected Month : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġtv Selected Year : ĠTextView ĊĊĠĠĠ Ġprivate Ġvar Ġmode Ġ= ĠMonth Year Picker Dialog . Mode . MONTH _ AND _ YEAR ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmonth Format : ĠSimpleDateFormat ĊĊĠĠĠ Ġvar Ġon Month Selected : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Year Selected : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . view _ month _ year _ picker , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġmonth BackgroundColor Selected Ġby ĠDeleg ates . notNull < Int >() ĊĠĠĠĠĠĠĠ Ġcontext . with Styled Attributes ( attrs , ĠR . style able . Month Year Picker Dialog , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth BackgroundColor Selected Ġ= Ġget Color ( R . style able . Month Year Picker Dialog _ month BackgroundColor Selected , Ġandroid . R . attr . color Accent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrv Months Ġ= ĠfindViewById ( R . id . rv _ months ) ĊĠĠĠĠĠĠĠ Ġrv Years Ġ= ĠfindViewById ( R . id . rv _ years ) ĊĠĠĠĠĠĠĠ Ġtv Selected Month Ġ= ĠfindViewById ( R . id . tv _ selected _ month ) ĊĠĠĠĠĠĠĠ Ġtv Selected Year Ġ= ĠfindViewById ( R . id . tv _ selected _ year ) ĊĊĠĠĠĠĠĠĠ Ġtv Selected Month . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtv Selected Year . isSelected Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġmonths Adapter Ġ= ĠMonth s Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . text Ġ= Ġget Month Name ( it , Ġmonth Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ!= ĠMonth Year Picker Dialog . Mode . MONTH _ ONLY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Months . visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Years . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Month Selected ?. invoke ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrv Months . addItem Decoration ( Months Adapter . SelectedItem Decoration ( month BackgroundColor Selected )) ĊĠĠĠĠĠĠĠ Ġrv Months . adapter Ġ= Ġmonths Adapter ĊĊĠĠĠĠĠĠĠ Ġyears Adapter Ġ= ĠYear s Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonths Adapter . setSelected Year ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Year Selected ?. invoke ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrv Years . adapter Ġ= Ġyears Adapter ĊĊĠĠĠĠĠĠĠ Ġtv Selected Month . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! rv Months . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Years . visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Months . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv Selected Year . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! rv Years . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Months . visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Years . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Annual Mode ( enable Annual Mode : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . is Annual Mode Ġ= Ġenable Annual Mode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Month ( max Month : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . max Month Ġ= Ġmax Month ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Year ( max Year : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . max Year Ġ= Ġmax Year ĊĠĠĠĠĠĠĠ Ġyears Adapter . max Year Ġ= Ġmax Year ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Min Month ( min Month : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . min Month Ġ= Ġmin Month ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Min Year ( min Year : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . min Year Ġ= Ġmin Year ĊĠĠĠĠĠĠĠ Ġyears Adapter . min Year Ġ= Ġmin Year ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Mode ( mode : ĠMonth Year Picker Dialog . Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mode Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth Year Picker Dialog . Mode . MONTH _ ONLY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonths Adapter . is Annual Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth Year Picker Dialog . Mode . YEAR _ ONLY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Month . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected Year . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Months . visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Years . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMonth Year Picker Dialog . Mode . MONTH _ AND _ YEAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Month Format ( format : ĠSimpleDateFormat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonth Format Ġ= Ġformat ĊĠĠĠĠĠĠĠ Ġmonths Adapter . month Format Ġ= Ġformat ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Month ( selected Month : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . selected Month Ġ= Ġselected Month ĊĠĠĠĠĠĠĠ Ġtv Selected Month . text Ġ= Ġget Month Name ( selected Month , Ġmonth Format ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetSelected Year ( year : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmonths Adapter . setSelected Year ( year ) ĊĠĠĠĠĠĠĠ Ġyears Adapter . setSelected Year ( year ) ĊĠĠĠĠĠĠĠ Ġrv Years . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Years . scrollTo Position ( years Adapter . getPosition For Year ( year )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv Selected Year . text Ġ= Ġyear . toString () ĊĠĠĠ Ġ} Ċ }