package Ġinfo . ben jamin h ill . its ful lo fst ars . camera 2 ĊĊ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . hardware . camera 2 .* Ċ import Ġandroid . media . Image Reader Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Holder Ċ import Ġinfo . ben jamin h ill . its ful lo fst ars . EZ Permission Activity Ċ import Ġinfo . ben jamin h ill . its ful lo fst ars . R Ċ import Ġkotlinx . android . synt hetic . main . activity _ camera .* Ċ import Ġkotlinx . coroutines . experimental . Comp letable Deferred Ċ import Ġkotlinx . coroutines . experimental . Deferred Ċ import Ġkotlinx . coroutines . experimental . channels . Send Channel Ċ import Ġkotlinx . coroutines . experimental . launch Ċ import Ġkotlinx . coroutines . experimental . run Blocking Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġkotlin . coroutines . experimental . suspend Coroutine Ċ Ċ class ĠSimple Camera Activity Ġ: ĠE Z Permission Activity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmanager : ĠCamera Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmode : ĠCamera Mode ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage Reader : ĠImage Reader ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Click Saver : ĠSend Channel < Cam Actor Message > ĊĊĠĠĠ Ġprivate Ġval Ġbackground Handler : ĠHandler Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Creating : Ġbackground Handler ") ĊĠĠĠĠĠĠĠ Ġval Ġbackground Thread Ġ= ĠHandler Thread (" Camera Background ") ĊĠĠĠĠĠĠĠ Ġbackground Thread . start () ĊĠĠĠĠĠĠĠ ĠHandler ( background Thread . lo oper ) ĊĠĠĠ Ġ} () ĊĊĠĠĠ Ġprivate Ġval Ġcamera Device : ĠCamera Device Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Creating : Ġcamera Device ") ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġa Camera Open ( mode . camera Id ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcamera Capture Session : ĠCamera Capture Session Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Creating : Ġcamera Capture Session ") ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġa Camera Capture Session () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsurface Holder Callback Ġ= Ġobject Ġ: ĠSurface Holder . Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Changed ( holder : ĠSurface Holder , Ġformat : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" surface Changed Ġw :$ width , h :$ height ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" camera Surface View Ġw :${ camera Surface View . width }, Ġh :${ camera Surface View . height }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" holder . surface Frame Ġw :${ holder . surface Frame . width ()}, Ġh :${ holder . surface Frame . height () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Destroyed ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . remove Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Surface Holder . Callback Ġremoved , Ġmust Ġbe Ġre attached Ġthrough Ġon Resume ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsurface Created ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Surface Holder . Callback Ġsurface Created ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Size Ġ= Ġmode . size At Least ( camera Surface View . width Ġ* Ġcamera Surface View . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Found Ġpreview Ġsize Ġ$ preview Size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . set Fixed Size ( preview Size . width , Ġpreview Size . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Simple Camera Activity . onCreate ") ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" kotlin x . coroutines . debug ", Ġ"") Ġ// ĠC argo Ġcult ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ camera ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSystem Ġservices Ġnot Ġavailable Ġto ĠActiv ities Ġbefore ĠonCreate () ĊĠĠĠĠĠĠĠ Ġmanager Ġ= Ġget System Service ( Context . CAMERA _ SERVICE ) Ġas ĠCamera Manager ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠCamera Mode . get Best Camera ( manager ) ĊĠĠĠĠĠĠĠ Ġimage Reader Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Creating : Ġimage Reader ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Reader Ġ= ĠImage Reader . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode . size Max . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode . size Max . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode . image Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCAM _ CAP ACITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Reader . setOn Image Available Listener ({ Ġimage Available Image Reader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" setOn Image Available Listener Ġabout Ġto Ġadd Ġimage Ġdata Ġto Ġactor ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Click Saver . send ( Cam Actor Image ( image Available Image Reader . acquire Latest Image ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġbackground Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Reader ĊĠĠĠĠĠĠĠ Ġ} () ĊĊĠĠĠĠĠĠĠ Ġcamera Click Saver Ġ= ĠCamera Click Saver . build ( mode ) ĊĊĠĠĠĠĠĠĠ Ġcamera Surface View . holder . add Callback ( surface Holder Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġis Demo Run Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġrun Demo Only Once () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Demo Run . get AndSet ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" run Demo Only Once ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclicks Ġ= Ġmutable Set Of < Deferred < String >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicks . add ( click ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" CLICK ED ĠA ĠB UNCH ĠOF ĠTIM ES ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" WAIT ING ĠFOR ĠFIRST Ġ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicks . take ( 2 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġit . await ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" SA VED ĠFIRST Ġ 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclicks . add ( click ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" SA V ING ĠTHE ĠREST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" THROW AW AY ĠC LIC K ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclicks . add ( click ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe Ġjust Ġstarted ĠOR Ġcame Ġback Ġfrom Ġbeing Ġbump ed Ġto Ġthe Ġbackground ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Simple Camera Activity . on Resume ") ĊĠĠĠĠĠĠĠ Ġ// Ġ@ see ĠE Z Permission Activity Ġso Ġwe Ġdon 't Ġhave Ġto Ġworry ĊĠĠĠĠĠĠĠ Ġrun After All Permissions Granted Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġbetter Ġcallback Ġhttps :// github . com / google samples / android - Camera 2 Basic / blob / master / kotlin App / Application / src / main / java / com / example / android / camera 2 basic / Camera 2 Basic Fragment . kt # L 2 2 9 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Permissions Ġgranted , Ġready Ġto Ġtake Ġa Ġshot Ġin Ġcamera ĠMode : Ġ$ mode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Demo Only Once () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Simple Camera Activity . on Destroy ") ĊĠĠĠĠĠĠĠ Ġcamera Device . close () ĊĠĠĠĠĠĠĠ Ġif Ġ(! camera Click Saver . is Closed For Send ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Click Saver . close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" camera Click Saver Ġclosed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ return Ġdeferred Ġpath Ġto Ġsaved Ġimage Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġclick (): ĠComp letable Deferred < String > Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Simple Camera Activity . click () ") ĊĠĠĠĠĠĠĠ Ġval Ġsave Location Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġnext Click Ġ= ĠCam Actor Click ( save Location ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! camera Click Saver . offer ( next Click )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Unable Ġto Ġclick Ġcamera .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcapture RequestBuilder Ġ= Ġcamera Device . create Capture Request ( Camera Device . TEMPLATE _ ST ILL _ CAPTURE ) ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . add Target ( image Reader . surface ) ĊĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . CONTROL _ MODE , ĠCapture Request . CONTROL _ MODE _ AUTO ) ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . CONTROL _ AF _ MODE , ĠCapture Request . CONTROL _ AF _ MODE _ OFF ) ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . LEN S _ FOCUS _ DISTANCE , Ġ 0 . 0 f ) Ġ// Ġinfinity ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . JPEG _ QUAL ITY , Ġ 9 9 . to Byte ()) Ġ// Ġbecause Ġ 1 0 0 Ġis Ġsil ly ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . CONTROL _ MODE , ĠCapture Request . CONTROL _ MODE _ OFF ) ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . CONTROL _ AE _ MODE , ĠCapture Request . CONTROL _ AE _ MODE _ OFF ) ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . SENSOR _ S ENS IT IVITY , Ġ 4 0 0 ) Ġ// Ġshould Ġat Ġleast Ġget Ġan Ġimage ĊĠĠĠĠĠĠĠ Ġcapture RequestBuilder . set ( Capture Request . SENSOR _ EX POS URE _ TIME , Ġ 1 0 0 ) Ġ// Ġms ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcapture Request Ġ= Ġcapture RequestBuilder . build () ĊĠĠĠĠĠĠĠ Ġcamera Capture Session . capture ( capture Request , Ġobject Ġ: ĠCamera Capture Session . Capture Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Capture Completed ( session : ĠCamera Capture Session , Ġrequest : ĠCapture Request , Ġt cr : ĠTotal Capture Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! camera Click Saver . offer ( Cam Actor Capture Result ( t cr ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġoffer ĠCam Actor Capture Result Ġto Ġcamera Click Saver ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġbackground Handler ) ĊĠĠĠĠĠĠĠ Ġ// ĠAfter Ġthis , Ġh ops Ġto Ġimage Reader . setOn Image Available Listener ĊĠĠĠĠĠĠĠ Ġreturn Ġsave Location ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBlock ing Ġcamera Ġopen Ġand Ġsetup ĊĠĠĠĠ Ġ* ĠTODO : ĠWait Ġuntil Ġit Ġstabil izes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġa Camera Open ( camera Id : ĠString ): ĠCamera Device Ġ= Ġsuspend Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Simple Camera Activity . a Camera Open ") ĊĠĠĠĠĠĠĠ Ġmanager . open Camera ( camera Id , Ġobject Ġ: ĠCamera Device . State Callback () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Opened ( camera Device : ĠCamera Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( camera Device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Error Ġwhen Ġopening Ġcamera ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume With Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected ( camera Device : ĠCamera Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Device . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Error Ġwhen Ġclosing Ġdisconnected Ġcamera ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume With Exception ( Exception (" Camera Ġon Disconnected Ġ$ camera Device ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( camera Device : ĠCamera Device , Ġerror : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Device . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Error Ġwhen Ġclosing Ġerror Ġcamera ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume With Exception ( Exception (" Camera ĠonError Ġ$ camera Device Ġ$ error ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}, Ġbackground Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠBlock ing Ġsession Ġcreator Ġsp ins Ġup Ġthe Ġrepe ating Ġpreview Ġrequest Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġa Camera Capture Session (): ĠCamera Capture Session Ġ= Ġsuspend Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Simple Camera Activity . a Camera Capture Session ") ĊĠĠĠĠĠĠĠ Ġcamera Device . create Capture Session ( listOf ( image Reader . surface , Ġcamera Surface View . holder . surface ), Ġobject Ġ: ĠCamera Capture Session . State Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configure Failed ( camera Capture Session : ĠCamera Capture Session ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume With Exception ( IllegalArgumentException (" Unable Ġto Ġconfigure Ġcamera Capture Session ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Configured ( camera Capture Session : ĠCamera Capture Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġand Ġrun Ġa Ġrepe ating Ġrequest Ġfor Ġpreview Ġfoot age ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Builder Ġ= Ġcamera Device . create Capture Request ( Camera Device . TEMPLATE _ PRE VIEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Builder . add Target ( camera Surface View . holder . surface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Request Ġ= Ġrequest Builder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Capture Session . set Repe ating Request ( preview Request , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( camera Capture Session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}, Ġbackground Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCAM _ CAP ACITY Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" if os " ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ