/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠOn a ĠSystems , ĠInc Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . smart register . fhir core . engine . ui . question naire Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Coroutine Scope Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . android . fhir . datac apt ure . validation . Validation Result Ċ import Ġcom . google . android . fhir . datac apt ure . views . Questionnaire Item ViewHolder Delegate Ċ import Ġcom . google . android . fhir . datac apt ure . views . Questionnaire Item ViewHolder Factory Ċ import Ġcom . google . android . fhir . datac apt ure . views . Questionnaire Item View Item Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġid . zel ory . compressor . Compressor . compress Ċ import Ġid . zel ory . compressor . constraint . quality Ċ import Ġid . zel ory . compressor . constraint . size Ċ import Ġid . zel ory . compressor . extension Ċ import Ġjava . io . File Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . hl 7 . fhir . r 4 . model . Attachment Ċ import Ġorg . hl 7 . fhir . r 4 . model . Questionnaire Response . Questionnaire Response Item Answer Component Ċ import Ġorg . smart register . fhir core . engine . R Ċ import Ġorg . smart register . fhir core . engine . databinding . Custom Photo Capture Layout Binding Ċ import Ġorg . smart register . fhir core . engine . util . Default Dispatcher Provider Ċ import Ġorg . smart register . fhir core . engine . util . Dispatcher Provider Ċ import Ġorg . smart register . fhir core . engine . util . extension . decode To Bitmap Ċ import Ġorg . smart register . fhir core . engine . util . extension . encode To ByteArray Ċ import Ġorg . smart register . fhir core . engine . util . extension . hide Ċ import Ġorg . smart register . fhir core . engine . util . extension . show Ċ import Ġorg . smart register . fhir core . engine . util . extension . to Uri Ċ Ċ class ĠCustom Photo Capture Factory ( ĊĠ Ġval Ġfragment : ĠFragment , ĊĠ Ġval Ġlifecycle Scope : ĠLifecycle Coroutine Scope Ġ= Ġfragment . lifecycle Scope , ĊĠ Ġval Ġdispatcher : ĠDispatcher Provider Ġ= ĠDefault Dispatcher Provider () Ċ ) Ġ: ĠQuestion naire Item ViewHolder Factory ( R . layout . custom _ photo _ capture _ layout ) Ġ{ ĊĊĠ Ġlateinit Ġvar Ġtv Prefix : ĠTextView ĊĠ Ġlateinit Ġvar Ġtv Header : ĠTextView ĊĠ Ġlateinit Ġvar Ġiv Thumbnail : ĠImageView ĊĠ Ġlateinit Ġvar Ġbtn Take Photo : ĠMaterial Button ĊĠ Ġlateinit Ġvar Ġimage File : ĠFile ĊĠ Ġvar Ġcontext : ĠContext Ġ= Ġfragment . require Context () ĊĠ Ġvar Ġcamera Launcher : ĠActivity Result Launcher < Uri > ĊĠ Ġvar Ġquestion naire Response : ĠQuestion naire Response Item Answer Component ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġcamera Launcher Ġ= Ġregister Camera Launcher () ĊĠĠĠ Ġquestion naire Response Ġ= ĠQuestion naire Response Item Answer Component () ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġregister Camera Launcher (): ĠActivity Result Launcher < Uri > Ġ{ ĊĠĠĠ Ġreturn Ġfragment . register For Activity Result ( Activity Result Contracts . Take Picture ()) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠ Ġif Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope ĊĠĠĠĠĠĠĠĠĠ Ġ. launch ( dispatcher . io ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompress ( context , Ġimage File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquality ( 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize ( 6 4 _ 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Bitmap Ġ= ĠBitmap Factory . decode File ( image File . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Thumbnail ( image Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Bytes Ġ= Ġimage Bitmap . encode To ByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Questionnaire Response ( image Bytes ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. invoke On Completion Ġ{ Ġimage File . delete () Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġload Thumbnail ( ĊĠĠĠ Ġimage Bitmap : ĠBitmap , ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġlifecycle Scope . launch ( dispatcher . main ()) Ġ{ ĊĠĠĠĠĠ Ġiv Thumbnail . apply Ġ{ ĊĠĠĠĠĠĠĠ ĠG lide . with ( fragment ). load ( image Bitmap ). into ( this ) ĊĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġbtn Take Photo . text Ġ= Ġfragment . getString ( R . string . replace _ photo ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġpopulate Questionnaire Response ( image Bytes : ĠByteArray ) Ġ{ ĊĠĠĠ Ġquestion naire Response . value Ġ= ĊĠĠĠĠĠ ĠAttachment (). apply Ġ{ ĊĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠCONTENT _ TYPE ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġimage Bytes ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġcreate Image File (): ĠFile Ġ{ ĊĠĠĠ Ġreturn ĠFile . create TempFile ( ĊĠĠĠĠĠ ĠPREFIX _ BITMAP , ĊĠĠĠĠĠ Ġ". ${ Bitmap . Compress Format . JPEG . extension () }", ĊĠĠĠĠĠ Ġcontext . get External Files Dir ( Environment . DIRECTORY _ PI CTURE S ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġlaunch Camera () Ġ{ ĊĠĠĠ Ġimage File . to Uri ( context , ĠAUTH ORITY _ FILE _ PROVIDER ). also Ġ{ Ġuri Ġ-> Ġcamera Launcher . launch ( uri ) Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Questionnaire Item ViewHolder Delegate (): ĠQuestion naire Item ViewHolder Delegate Ġ= ĊĠĠĠ Ġobject Ġ: ĠQuestion naire Item ViewHolder Delegate Ġ{ ĊĊĠĠĠĠĠ Ġoverride Ġlateinit Ġvar Ġquestion naire Item View Item : ĠQuestion naire Item View Item ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġinit ( item View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCustom Photo Capture Layout Binding . bind ( item View ). let Ġ{ Ġbinding Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġtv Prefix Ġ= Ġbinding . tv Prefix ĊĠĠĠĠĠĠĠĠĠ Ġtv Header Ġ= Ġbinding . tv Header ĊĠĠĠĠĠĠĠĠĠ Ġiv Thumbnail Ġ= Ġbinding . iv Thumbnail ĊĠĠĠĠĠĠĠĠĠ Ġbtn Take Photo Ġ= Ġbinding . btn Take Photo ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġbind ( question naire Item View Item : ĠQuestion naire Item View Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! question naire Item View Item . question naire Item . prefix . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtv Prefix . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġquestion naire Item View Item . question naire Item . prefix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtv Prefix . hide ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv Header . text Ġ= Ġquestion naire Item View Item . question naire Item . text ĊĠĠĠĠĠĠĠ Ġbtn Take Photo . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġimage File Ġ= Ġcreate Image File () ĊĠĠĠĠĠĠĠĠĠ Ġlaunch Camera () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġquestion naire Item View Item . single Answer OrNull ?. value Attachment ?. data ?. decode To Bitmap () ĊĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġimage Bitmap Ġ-> Ġload Thumbnail ( image Bitmap ) Ġ} ĊĠĠĠĠĠĠĠ Ġset ReadOnly ( question naire Item View Item . question naire Item . readOnly ) ĊĠĠĠĠĠĠĠ Ġquestion naire Item View Item . single Answer OrNull Ġ= Ġquestion naire Response ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġdisplay Validation Result ( validation Result : ĠValidation Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCustom Ġvalidation Ġmessage ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// ĠTODO Ġ-> ĠShould Ġuse Ġthe Ġoverridden Ġset ReadOnly () ĊĠĠĠĠĠ Ġ// Ġafter Ġupgrading ĠData ĠCapture Ġlibrary Ġto ĠBeta ĊĊĠĠĠĠĠ Ġfun Ġset ReadOnly ( is ReadOnly : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġiv Thumbnail . isEnabled Ġ= Ġ! is ReadOnly ĊĠĠĠĠĠĠĠ Ġbtn Take Photo . isEnabled Ġ= Ġ! is ReadOnly ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠAUTH ORITY _ FILE _ PROVIDER Ġ= Ġ" org . smart register . fhir core . file provider " ĊĠĠĠ Ġconst Ġval ĠCONTENT _ TYPE Ġ= Ġ" image / jpg " ĊĠĠĠ Ġprivate Ġconst Ġval ĠPREFIX _ BITMAP Ġ= Ġ" BITMAP _" ĊĠ Ġ} Ċ } Ċ