package Ġcom . x wallet . ui . web Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . camera . core . Camera Selector Ċ import Ġandroidx . camera . core . Camera X Config Ċ import Ġandroidx . camera . core . Image Capture Ċ import Ġandroidx . camera . core . Image Capture Exception Ċ import Ġandroidx . camera . lifecycle . Process Camera Provider Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . x wallet . R Ċ import Ġcom . x wallet . ui . Base Controller Ċ import Ġcom . google . common . util . concurrent . List enable Future Ċ import Ġkotlinx . android . synt hetic . main . controller _ camera .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . as Executor Ċ import Ġjava . io . File Ċ import Ġjava . util . UUID Ċ Ċ class ĠCamera Controller ( ĊĠĠĠ Ġargs : ĠBundle ? Ġ= Ġnull Ċ ) Ġ: ĠBaseController ( args ) Ġ{ ĊĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Camera Success ( file : ĠFile ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Camera Closed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠDispatch ers . Main . as Executor () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Provider Future : ĠList enable Future < Process Camera Provider > ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id Ġ= ĠR . layout . controller _ camera ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( view ) ĊĠĠĠĠĠĠĠ Ġcamera Provider Future Ġ= ĠProcess Camera Provider . getInstance ( application Context !! ) ĊĠĠĠĠĠĠĠ Ġcamera View . camera Lens Facing Ġ= ĠCamera Selector . LEN S _ F ACING _ BACK ĊĠĠĠĠĠĠĠ Ġcamera View . bind To Lifecycle ( activity Ġas ĠLifecycle Owner ) ĊĠĠĠĠĠĠĠ Ġbutton Sh utter . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Picture () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton Sh utter . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġcamera Provider Future . addListener ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Provider Future . get (). unbind All () ĊĠĠĠĠĠĠĠ Ġ}, Ġexecutor ) ĊĠĠĠĠĠĠĠ Ġsuper . on Detach ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Back (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Listener < Listener >() ?. on Camera Closed () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . handle Back () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtake Picture () Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout S cri m . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠprogressBar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbutton Sh utter . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile . create TempFile ( UUID . randomUUID (). toString (), Ġ". jpg ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠImage Capture . OutputFile Options . Builder ( file ). build () ĊĠĠĠĠĠĠĠ Ġcamera View . take Picture ( options , Ġexecutor , Ġobject Ġ: ĠImage Capture . On Image Saved Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Image Saved ( outputFile Results : ĠImage Capture . OutputFile Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Attached ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Listener < Listener >() ?. on Camera Success ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . pop Controller ( this @ Camera Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( exception : ĠImage Capture Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Attached ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Listener < Listener >() ?. on Camera Closed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . pop Controller ( this @ Camera Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }