/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠF arb od ĠS alamat - Z ade h Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . hex an ov ate . family tree . ui . user Ċ Ċ import Ġandroid . app . DatePicker Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . design . widget . TextInput EditText Ċ import Ġandroid . widget . DatePicker Ċ import Ġcom . hex an ov ate . family tree . util . DATE _ FORMAT TER _ LONG Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġorg . th reet en . bp . Zone Offset Ċ Ċ /** Ċ Ġ* ĠA Ġhelper Ġclass Ġto Ġdisplay Ġthe Ġdate Ġon Ġa Ġ[ TextInput EditText ], Ġand Ġallowing Ġit Ġto Ġbe Ġchanged Ċ Ġ* Ġthrough Ġclick Ġthen Ġdialog . Ċ Ġ* Ċ Ġ* Ġ@ property Ġcontext ĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġfrom Ġthe Ġactivity / fragment Ċ Ġ* Ġ@ property Ġtext Input EditText Ġ Ġthe Ġ[ TextInput EditText ] Ġbeing Ġused Ġfor Ġthe Ġdate Ġpicker Ċ Ġ* Ċ Ġ* Ġ@ see ĠDate Range Selector Helper Ċ Ġ*/ Ċ class ĠDate Selector Helper User ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtext Input EditText : ĠText Input EditText Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ LocalDate ] Ġbeing Ġdisplayed . ĠThis Ġis Ġnull Ġif Ġno Ġdate Ġhas Ġbeen Ġselected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdate : ĠLocalDate ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input EditText . setText ( value ?. format ( DATE _ FORMAT TER _ LONG )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġfor Ġextra Ġactions Ġthat Ġcan Ġbe Ġinvoked Ġafter Ġthe Ġuser Ġch oo ses Ġ( or Ġchanged ) Ġa Ġdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Date Set : Ġ(( view : ĠDate Picker , Ġdate : ĠLocalDate ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġminimum Ġdate Ġavailable Ġin Ġthe Ġ[ DatePicker ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġcan Ġbe Ġnull Ġ( its Ġdefault Ġvalue ) Ġto Ġindicate Ġno Ġminimum Ġdate . ĠIt Ġmust Ġbe Ġless Ġthan Ġthe ĊĠĠĠĠ Ġ* Ġmaximum Ġdate , Ġif Ġspecified . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġmax Date ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmin Date : ĠLocalDate ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Date Bound aries ( value , Ġmax Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġmaximum Ġdate Ġavailable Ġin Ġthe Ġ[ DatePicker ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġcan Ġbe Ġnull Ġ( its Ġdefault Ġvalue ) Ġto Ġindicate Ġno Ġmaximum Ġdate . ĠIt Ġmust Ġbe Ġgreater Ġthan Ġthe ĊĠĠĠĠ Ġ* Ġminimum Ġdate , Ġif Ġspecified . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġmin Date ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmax Date : ĠLocalDate ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Date Bound aries ( min Date , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Input EditText . is Focus able In Touch Mode Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġsetup OnClickListener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup OnClickListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠN . B . Ġmonth - 1 Ġand Ġmonth + 1 Ġin Ġcode Ġbecause ĠAndroid Ġmonth Ġvalues Ġare Ġfrom Ġ 0 - 1 1 Ġ( to ĊĠĠĠĠĠĠĠ Ġ// Ġcorrespond Ġwith Ġjava . util . Calendar ) Ġbut ĠLocalDate Ġmonth Ġvalues Ġare Ġfrom Ġ 1 - 1 2 . ĊĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠDate Picker Dialog . On Date Set Listener Ġ{ Ġview , Ġyear , Ġmonth , Ġday OfMonth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Date Ġ= ĠLocalDate . of ( year , Ġmonth Ġ+ Ġ 1 , Ġday OfMonth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġnew Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Date Set ?. invoke ( view , Ġnew Date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Input EditText . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Date Ġ= Ġdate Ġ?: ĠLocalDate . now () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Picker Dialog Ġ= ĠDate Picker Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Date . year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Date . month Value Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Date . day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date ?. let Ġ{ Ġdate Picker Dialog . date Picker . min Date Ġ= Ġdate To Ms ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date ?. let Ġ{ Ġdate Picker Dialog . date Picker . max Date Ġ= Ġdate To Ms ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġa Ġdate Ġto Ġthe Ġnumber Ġof Ġmilliseconds Ġsince Ġ 0 1 / 0 1 / 1 9 7 0 . ĊĠĠĠĠ Ġ* Ġ( The ĠAndroid ĠAPI Ġrequires Ġminimum / maximum Ġdate Ġin Ġmilliseconds ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdate To Ms ( date : ĠLocalDate ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . at Start OfDay ( Zone Offset . UTC ). to Instant (). to Epoch Milli () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġthe Ġminimum Ġdate Ġis Ġbefore Ġthe Ġmaximum Ġdate , Ġthrowing Ġan Ġ[ IllegalArgumentException ] ĊĠĠĠĠ Ġ* Ġif Ġnot . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġmin Date ĊĠĠĠĠ Ġ* Ġ@ see Ġmax Date ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrequire Date Bound aries ( min : ĠLocalDate ?, Ġmax : ĠLocalDate ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( min Ġ!= Ġnull Ġ&& Ġmax Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( min . is Before ( max )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġminimum Ġdate Ġmust Ġbe Ġless Ġthan Ġthe Ġmaximum Ġdate Ġwhen Ġboth Ġare Ġspecified " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ