/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠCh am ich ĠApps . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġapp . ch am ich . feature . goals . ui . bottom sheet . datepicker Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . set Fragment Result Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġapp . ch am ich . feature . goals . R Ċ import Ġapp . ch am ich . feature . goals . databinding . Go als Bottom Sheet Dialog DatePicker Binding Ċ import Ġapp . ch am ich . feature . goals . ui . bottom sheet . Go als Bottom Sheet Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠDate Picker Bottom Sheet Ġ: ĊĠĠĠ ĠGo als Bottom Sheet < ViewModel , ĠGo als Bottom Sheet Dialog DatePicker Binding >() Ġ{ ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// region ĠFragment ĠOverride ĠFunctions ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id () Ġ= ĠR . layout . goals _ bottom _ sheet _ dialog _ date _ picker ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġsetup Bindings () ĊĠĠĠĠĠĠĠ Ġsetup Number Pick ers ( getDate ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewModel Class () Ġ= ĠViewModel :: class . java ĊĊĠĠĠ Ġ// endregion ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// region ĠBinding ĠFunctions ĊĊĠĠĠ Ġfun Ġon Use Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Fragment Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKEY _ RESULT _ LIST ENER , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKEY _ RESULT _ DATE Ġto ĠG regorian Calendar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Years . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Months . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Cancel Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// endregion ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// region ĠPrivate ĠFunctions ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Bindings () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . fragment Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Number Pick ers ( date : ĠLong ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Day Ġ= Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Month Ġ= Ġcalendar . get ( Calendar . MONTH ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Year Ġ= Ġcalendar . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Days OfMonth Ġ= Ġget Days In Month ( current Year , Ġcurrent Month ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġthe ĠDays ĊĠĠĠĠĠĠĠ Ġbinding . number Picker Days . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Selector Wheel Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġcurrent Day ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġcurrent Days OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġcurrent Day ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Months Picker ( current Day , Ġcurrent Month , Ġcurrent Year ) ĊĠĠĠĠĠĠĠ Ġsetup Years Picker ( current Day , Ġcurrent Month , Ġcurrent Year ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( date Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Calendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Date Calendar . time In Millis Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . value Ġ= Ġcurrent Date Calendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Months . value Ġ= Ġcurrent Date Calendar . get ( Calendar . MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Years . value Ġ= Ġcurrent Date Calendar . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Months Picker ( current Day : ĠInt , Ġcurrent Month : ĠInt , Ġcurrent Year : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . number Picker Months . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Selector Wheel Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġcurrent Month ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= ĠMAX IMUM _ MONTH S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġcurrent Month ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On ValueChanged Listener Ġ{ Ġ_, Ġ_, Ġselected Month Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Month Ġ== Ġcurrent Month Ġ&& Ġbinding . number Picker Years . value Ġ== Ġcurrent Year ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . min Value Ġ= Ġcurrent Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . max Value Ġ= Ġget Days In Month ( current Year , Ġcurrent Month ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . min Value Ġ= ĠSTART ING _ DAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . max Value Ġ= Ġget Days In Month ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Years . value , Ġselected Month ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Years Picker ( current Day : ĠInt , Ġcurrent Month : ĠInt , Ġcurrent Year : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . number Picker Years . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Selector Wheel Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġcurrent Year ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġcurrent Year Ġ+ ĠMAX IMUM _ YEAR S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġcurrent Year ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On ValueChanged Listener Ġ{ Ġ_, Ġ_, Ġselected Year Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Year Ġ== Ġcurrent Year ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Months . min Value Ġ= Ġcurrent Month ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Months . max Value Ġ= ĠMAX IMUM _ MONTH S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . min Value Ġ= Ġcurrent Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . max Value Ġ= Ġget Days In Month ( current Year , Ġcurrent Month ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Months . min Value Ġ= ĠSTART ING _ MONTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Months . max Value Ġ= ĠMAX IMUM _ MONTH S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . min Value Ġ= ĠSTART ING _ DAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Picker Days . max Value Ġ= Ġget Days In Month ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Year , Ġbinding . number Picker Months . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Days In Month ( year : ĠInt , Ġmonth : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ ĠG regorian Calendar ( year , Ġmonth , ĠSTART ING _ DAY ). get Actual Maximum ( Calendar . DAY _ OF _ MONTH ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Date () Ġ= ĊĠĠĠĠĠĠĠ Ġarguments ?. getLong ( KEY _ DATE ) Ġ?: Ġ 0 L ĊĊĠĠĠ Ġ// endregion ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX IMUM _ MONTH S Ġ= Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX IMUM _ YEAR S Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTART ING _ MONTH Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTART ING _ DAY Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ DATE Ġ= Ġ" KEY _ DATE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ RESULT _ DATE Ġ= Ġ" KEY _ RESULT _ DATE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ RESULT _ LIST ENER Ġ= Ġ" KEY _ RESULT _ LIST ENER " ĊĠĠĠ Ġ} Ċ } Ċ