/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 . google . android . fhir . datac apt ure . views Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . InputType Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . view . Context Theme Wrapper Ċ import Ġcom . google . android . fhir . datac apt ure . R Ċ import Ġcom . google . android . fhir . datac apt ure . entry Format Ċ import Ġcom . google . android . fhir . datac apt ure . utilities . localized String Ċ import Ġcom . google . android . fhir . datac apt ure . validation . Validation Result Ċ import Ġcom . google . android . fhir . datac apt ure . validation . get Single String Validation Message Ċ import Ġcom . google . android . material . datepicker . Material DatePicker Ċ import Ġcom . google . android . material . text field . TextInput EditText Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Zone Id Ċ import Ġorg . hl 7 . fhir . r 4 . model . Date Type Ċ import Ġorg . hl 7 . fhir . r 4 . model . Questionnaire Response Ċ Ċ internal Ġobject ĠQuestion naire Item DatePicker ViewHolder Factory Ġ: ĊĠ ĠQuestion naire Item ViewHolder Factory ( R . layout . question naire _ item _ date _ picker _ view ) Ġ{ ĊĠ Ġoverride Ġfun Ġget Questionnaire Item ViewHolder Delegate () Ġ= ĊĠĠĠ Ġobject Ġ: ĠQuestion naire Item ViewHolder Delegate Ġ{ ĊĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġheader : ĠQuestion naire Item Header View ĊĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġtext Input Layout : ĠText Input Layout ĊĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġtext Input EditText : ĠText Input EditText ĊĠĠĠĠĠ Ġoverride Ġlateinit Ġvar Ġquestion naire Item View Item : ĠQuestion naire Item View Item ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġinit ( item View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheader Ġ= ĠitemView . findViewById ( R . id . header ) ĊĠĠĠĠĠĠĠ Ġtext Input Layout Ġ= ĠitemView . findViewById ( R . id . text _ input _ layout ) ĊĠĠĠĠĠĠĠ Ġtext Input EditText Ġ= ĠitemView . findViewById ( R . id . text _ input _ edit _ text ) ĊĠĠĠĠĠĠĠ Ġtext Input EditText . input Type Ġ= ĠInput Type . TYPE _ NULL ĊĠĠĠĠĠĠĠ Ġtext Input Layout . set End Icon OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġapplication Ġis Ġwrapped Ġin Ġa ĠContext Theme Wrapper Ġin ĠQuestion naire Fragment ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġagain Ġin ĠText Input EditText Ġduring Ġlayout Ġinfl ation . ĠAs Ġa Ġresult , Ġit Ġis ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġnecessary Ġto Ġaccess Ġthe Ġbase Ġcontext Ġtwice Ġto Ġretrieve Ġthe Ġapplication Ġobject ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġfrom Ġthe Ġview 's Ġcontext . ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠitemView . context . try Un wrap Context () !! ĊĠĠĠĠĠĠĠĠĠ Ġcreate Material DatePicker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Positive Button ClickListener Ġ{ Ġepoch Milli Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input EditText . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Milli ( epoch Milli ). at Zone ( ZONE _ ID _ UTC ). to LocalDate (). localized String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion naire Item View Item . single Answer OrNull Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuestion naire Response . Questionnaire Response Item Answer Component (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Date Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Milli ( epoch Milli ). at Zone ( ZONE _ ID _ UTC ). to LocalDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠDate Type ( local Date . year , Ġlocal Date . month Value Ġ- Ġ 1 , Ġlocal Date . day OfMonth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġfocus Ġso Ġthat Ġthe Ġuser Ġcan Ġref ocus Ġto Ġopen Ġthe Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Input EditText . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Answer Changed ( textInput EditText . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( context . support FragmentManager , ĠTAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ@ Suppress Lint (" New Api ") Ġ// Ġjava . time ĠAPIs Ġcan Ġbe Ġused Ġdue Ġto Ġdes ug aring ĊĠĠĠĠĠ Ġoverride Ġfun Ġbind ( question naire Item View Item : ĠQuestion naire Item View Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġheader . bind ( question naire Item View Item . question naire Item ) ĊĊĠĠĠĠĠĠĠ Ġtext Input EditText . setText ( ĊĠĠĠĠĠĠĠĠĠ Ġquestion naire Item View Item . single Answer OrNull ?. value Date Type ?. local Date ?. localized String ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġquestion naire Item View Item . question naire Item . entry Format ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtext Input Layout . helper Text Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġdisplay Validation Result ( validation Result : ĠValidation Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Input Layout . error Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( validation Result . get Single String Validation Message () Ġ== Ġ"") Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġvalidation Result . get Single String Validation Message () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġset ReadOnly ( is ReadOnly : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Input EditText . isEnabled Ġ= Ġ! is ReadOnly ĊĠĠĠĠĠĠĠ Ġtext Input Layout . isEnabled Ġ= Ġ! is ReadOnly ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġprivate Ġfun Ġcreate Material DatePicker (): ĠMaterial DatePicker < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Date Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġquestion naire Item View Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single Answer OrNull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . value Date Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . local Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . at Start OfDay ( ZONE _ ID _ UTC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to Instant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to Epoch Milli () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠMaterial DatePicker . today In Utc Milliseconds () ĊĠĠĠĠĠĠĠ Ġreturn ĠMaterial DatePicker . Builder . date Picker () ĊĠĠĠĠĠĠĠĠĠ Ġ. set Theme ( R . style . Theme Overlay _ Questionnaire _ DatePicker ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text ( R . string . select _ date ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setSelection ( selected Date ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġconst Ġval ĠTAG Ġ= Ġ" date - picker " Ċ internal Ġval ĠZ ONE _ ID _ UTC Ġ= ĠZone Id . of (" UTC ") Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġ[ AppCompatActivity ] Ġif Ġthere Ġexists Ġone Ġwrapped Ġinside Ġ[ Context Theme Wrapper ] Ġs , Ġor Ċ Ġ* Ġ` null ` Ġotherwise . Ċ Ġ* Ċ Ġ* ĠThis Ġfunction Ġis Ġinspired Ġby Ġthe Ġfunction Ġwith Ġthe Ġsame Ġname Ġin Ġ` App Comp ate Delegate Impl `. ĠSee Ċ Ġ* Ġhttps :// cs . android . com / android x / platform / frameworks / support / +/ android x - main : appcompat / appcompat / src / main / java / android x / appcompat / app / AppCompat Delegate Impl . java ; l = 1 6 1 5 Ċ Ġ* Ċ Ġ* ĠTODO : Ġfind Ġa Ġmore Ġrobust Ġway Ġto Ġdo Ġthis Ġas Ġit Ġis Ġnot Ġguaranteed Ġthat Ġthe Ġactivity Ġis Ġan Ċ Ġ* ĠAppCompatActivity . Ċ Ġ*/ Ċ internal Ġfun ĠContext . try Un wrap Context (): ĠAppCompatActivity ? Ġ{ ĊĠ Ġvar Ġcontext Ġ= Ġthis ĊĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠ Ġwhen Ġ( context ) Ġ{ ĊĠĠĠĠĠ Ġis ĠAppCompatActivity Ġ-> Ġreturn Ġcontext ĊĠĠĠĠĠ Ġis ĠContext Theme Wrapper Ġ-> Ġcontext Ġ= Ġcontext . base Context ĊĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġval ĠDate Type . local Date ĊĠ Ġget () Ġ= ĊĠĠĠ ĠLocalDate . of ( ĊĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠ Ġmonth Ġ+ Ġ 1 , ĊĠĠĠĠĠ Ġday , ĊĠĠĠ Ġ) Ċ