@ file : Suppress (" DE PREC ATION ") Ċ Ċ package Ġio . foto ap par at . hardware Ċ Ċ import Ġandroid . hardware . Camera Ċ import Ġio . foto ap par at . character istic . get Character istics Ċ import Ġio . foto ap par at . concurrent . Camera Executor Ċ import Ġio . foto ap par at . configuration . Camera Configuration Ċ import Ġio . foto ap par at . configuration . Configuration Ċ import Ġio . foto ap par at . exception . camera . Unsupported Lens Exception Ċ import Ġio . foto ap par at . hardware . display . Display Ċ import Ġio . foto ap par at . hardware . orientation . Orientation Ċ import Ġio . foto ap par at . log . Logger Ċ import Ġio . foto ap par at . parameter . Scale Type Ċ import Ġio . foto ap par at . parameter . camera . Camera Parameters Ċ import Ġio . foto ap par at . parameter . camera . provide . get Camera Parameters Ċ import Ġio . foto ap par at . selector . Lens Position Selector Ċ import Ġio . foto ap par at . util . Frame Processor Ċ import Ġio . foto ap par at . view . Camera Renderer Ċ import Ġio . foto ap par at . view . F ocal Point Selector Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ Ċ /** Ċ Ġ* ĠPhone . Ċ Ġ*/ Ċ internal Ġopen Ġclass ĠDevice ( ĊĠĠĠĠĠĠĠ Ġinternal Ġopen Ġval Ġlogger : ĠLogger , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdisplay : ĠDisplay , ĊĠĠĠĠĠĠĠ Ġinternal Ġopen Ġval Ġscale Type : ĠScale Type , ĊĠĠĠĠĠĠĠ Ġinternal Ġopen Ġval Ġcamera Renderer : ĠCamera Renderer , ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġfocus Point Selector : ĠF ocal Point Selector ?, ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġexecutor : ĠCamera Executor , ĊĠĠĠĠĠĠĠ ĠnumberOf Cam eras : ĠInt Ġ= ĠCamera . getNumberOf Cam eras (), ĊĠĠĠĠĠĠĠ Ġinitial Configuration : ĠCamera Configuration , Ġinitial Lens Position Selector : ĠLens Position Selector Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcameras Ġ= Ġ( 0 Ġuntil ĠnumberOf Cam eras ). map Ġ{ Ġcamera Id Ġ-> ĊĠĠĠĠĠĠĠ ĠCamera Device ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Ġ= Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristics Ġ= Ġget Character istics ( camera Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlens Position Selector : ĠLens Position Selector Ġ= Ġinitial Lens Position Selector ĊĠĠĠ Ġprivate Ġvar Ġselected Camera Device Ġ= ĠComp letable Deferred < Camera Device >() ĊĠĠĠ Ġprivate Ġvar Ġsaved Configuration Ġ= ĠCamera Configuration . default () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Lens Position Selector ( initial Lens Position Selector ) ĊĠĠĠĠĠĠĠ Ġsaved Configuration Ġ= Ġinitial Configuration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġa Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcan Select Camera ( lens Position Selector : ĠLens Position Selector ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Camera Device Ġ= Ġselect Camera ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Cam eras Ġ= Ġcameras , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Selector Ġ= Ġlens Position Selector ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġselected Camera Device Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSelect s Ġa Ġcamera . ĠWill Ġdo Ġnothing Ġif Ġcamera Ġcannot Ġbe Ġselected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġselect Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . record Method () ĊĊĠĠĠĠĠĠĠ Ġselect Camera ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Cam eras Ġ= Ġcameras , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Selector Ġ= Ġlens Position Selector ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let ( selected Camera Device :: complete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġselected Camera Device . complete Exception ally ( Unsupported Lens Exception ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthe Ġselected Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġclear Selected Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Camera Device Ġ= ĠComp letable Deferred () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠW aits Ġand Ġreturns Ġthe Ġselected Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġawait Selected Camera (): ĠCamera Device Ġ= Ġselected Camera Device . await () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġselected Ġcamera . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException ĠIf Ġno Ġcamera Ġhas Ġbeen Ġyet Ġselected . ĊĠĠĠĠ Ġ* Ġ@ throws ĠUnsupported Lens Exception ĠIf Ġno Ġcamera Ġcould Ġget Ġselected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Selected Camera (): ĠCamera Device Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Camera Device . get Completed () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Camera Ġhas Ġnot Ġstarted !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġa Ġcamera Ġhas Ġbeen Ġselected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġhas Selected Camera () Ġ= Ġselected Camera Device . is Completed ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠOrientation Ġof Ġthe Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Screen Orientation (): ĠOrientation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdisplay . get Orientation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġdesired Ġfrom Ġthe Ġuser Ġcamera Ġlens Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġupdate Lens Position Selector ( new Lens Position : ĠLens Position Selector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . record Method () ĊĊĠĠĠĠĠĠĠ Ġlens Position Selector Ġ= Ġnew Lens Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġdesired Ġfrom Ġthe Ġuser Ġselectors . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġupdate Configuration ( new Configuration : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . record Method () ĊĊĠĠĠĠĠĠĠ Ġsaved Configuration Ġ= Ġupdate Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved Configuration Ġ= Ġsaved Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Configuration Ġ= Ġnew Configuration ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġdesired Ġfrom Ġthe Ġuser Ġselectors . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Configuration (): ĠCamera Configuration Ġ= Ġsaved Configuration ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġselected Ġ[ Camera Parameters ] Ġfor Ġthe Ġgiven Ġ[ Camera Device ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġget Camera Parameters ( camera Device : ĠCamera Device ): ĠCamera Parameters Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Camera Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Configuration Ġ= Ġsaved Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities Ġ= Ġcamera Device . get Capabilities () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġframe Ġprocessor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Frame Processor (): ĠFrame Processor ? Ġ= Ġsaved Configuration . frame Processor ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġdesired Ġfrom Ġthe Ġuser Ġcamera Ġlens Ġposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġget Lens Position Selector (): ĠLens Position Selector Ġ= Ġlens Position Selector Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠUpdates Ġthe Ġdevice 's Ġconfiguration . Ċ Ġ*/ Ċ internal Ġfun Ġupdate Configuration ( ĊĠĠĠĠĠĠĠ Ġsaved Configuration : ĠCamera Configuration , ĊĠĠĠĠĠĠĠ Ġnew Configuration : ĠConfiguration Ċ ) Ġ= ĠCamera Configuration ( ĊĠĠĠĠĠĠĠ Ġflash Mode Ġ= Ġnew Configuration . flash Mode Ġ?: Ġsaved Configuration . flash Mode , ĊĠĠĠĠĠĠĠ Ġfocus Mode Ġ= Ġnew Configuration . focus Mode Ġ?: Ġsaved Configuration . focus Mode , ĊĠĠĠĠĠĠĠ Ġexposure Comp ensation Ġ= Ġnew Configuration . ex posure Comp ensation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsaved Configuration . ex posure Comp ensation , ĊĠĠĠĠĠĠĠ Ġframe Processor Ġ= Ġnew Configuration . frame Processor Ġ?: Ġsaved Configuration . frame Processor , ĊĠĠĠĠĠĠĠ Ġpreview F ps Range Ġ= Ġnew Configuration . preview F ps Range Ġ?: Ġsaved Configuration . preview F ps Range , ĊĠĠĠĠĠĠĠ Ġsensor Sensitivity Ġ= Ġnew Configuration . sensor Sensitivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsaved Configuration . sensor Sensitivity , ĊĠĠĠĠĠĠĠ Ġpicture Resolution Ġ= Ġnew Configuration . picture Resolution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsaved Configuration . picture Resolution , ĊĠĠĠĠĠĠĠ Ġpreview Resolution Ġ= Ġnew Configuration . preview Resolution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsaved Configuration . preview Resolution , ĊĠĠĠĠĠĠĠ Ġscene Mode Ġ= Ġnew Configuration . scene Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsaved Configuration . scene Mode Ċ ) Ċ Ċ /** Ċ Ġ* ĠSelect s Ġa Ġcamera Ġfrom Ġthe Ġset Ġof Ġavailable Ġones . Ċ Ġ*/ Ċ internal Ġfun Ġselect Camera ( ĊĠĠĠĠĠĠĠ Ġavailable Cam eras : ĠList < Camera Device >, ĊĠĠĠĠĠĠĠ Ġlens Position Selector : ĠLens Position Selector Ċ ): ĠCamera Device ? Ġ{ ĊĊĠĠĠ Ġval Ġlens Positions Ġ= Ġavailable Cam eras . map Ġ{ Ġit . character istics . lens Position Ġ}. toSet () ĊĠĠĠ Ġval Ġdesired Position Ġ= Ġlens Position Selector ( lens Positions ) ĊĊĠĠĠ Ġreturn Ġavailable Cam eras . find Ġ{ Ġit . character istics . lens Position Ġ== Ġdesired Position Ġ} Ċ } Ċ