package Ġcom . example . tri pod Ċ Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . example . tri pod . services . Axis Service Ċ import Ġio . foto ap par at . F oto ap par at Ċ import Ġio . foto ap par at . configuration . Camera Configuration Ċ import Ġio . foto ap par at . configuration . Update Configuration Ċ import Ġio . foto ap par at . log . log cat Ċ import Ġio . foto ap par at . parameter . Flash Ċ import Ġio . foto ap par at . parameter . Zoom Ċ import Ġio . foto ap par at . result . transformer . scaled Ċ import Ġio . foto ap par at . selector .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . io . File Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaxis Service : ĠAxis Service ĊĊĠĠĠ Ġprivate Ġval Ġpermissions Delegate Ġ= ĠPermissions Delegate ( this ) ĊĊĠĠĠ Ġprivate Ġvar Ġpermissions Granted : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġactive Camera : ĠCamera Ġ= ĠCamera . Back ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfoto ap par at : ĠF oto ap par at ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Zoom : ĠZoom . Variable Zoom ĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ POR TRA IT ; ĊĊĠĠĠĠĠĠĠ Ġaxis Service Ġ= ĠAxis Service ( this ) ĊĊĊĠĠĠĠĠĠĠ Ġpermissions Granted Ġ= Ġpermissions Delegate . has Camera Permission () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Delegate . request Camera Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfoto ap par at Ġ= ĠF oto ap par at ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġcamera View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus View Ġ= Ġfocus View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Ġ= Ġlog cat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Ġ= Ġactive Camera . lens Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Configuration Ġ= Ġactive Camera . configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Error Callback Ġ= Ġ{ ĠLog . e ( LOG GING _ TAG , Ġ" Camera Ġerror : Ġ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcapture ĠonClick Ġtake Picture () ĊĠĠĠĠĠĠĠ Ġswitch Camera ĠonClick Ġchange Camera () ĊĠĠĠĠĠĠĠ Ġtorch Switch Ġon CheckedChanged Ġtoggle Flash () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġtake Picture (): Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphoto Result Ġ= Ġfoto ap par at ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. auto Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Picture () ĊĊĠĠĠĠĠĠĠ Ġphoto Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. save ToFile ( File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget External Files Dir (" photos "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" photo . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġphoto Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Bitmap ( scaled ( scale Factor Ġ= Ġ 0 . 2 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. when Available Ġ{ Ġphoto Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG GING _ TAG , Ġ" New Ġphoto Ġcaptured . ĠBitmap Ġlength : Ġ${ it . bitmap . byte Count }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= ĠfindViewById < ImageView >( R . id . result ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Bitmap ( it . bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . rotation Ġ= Ġ(- it . rotation Degrees ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠLog . e ( LOG GING _ TAG , Ġ" Couldn 't Ġcapture Ġphoto .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Camera (): Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġactive Camera Ġ= Ġwhen Ġ( active Camera ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Front Ġ-> ĠCamera . Back ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . Back Ġ-> ĠCamera . Front ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfoto ap par at . switch To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Ġ= Ġactive Camera . lens Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Configuration Ġ= Ġactive Camera . configuration ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġadjust Views Visibility () ĊĊĠĠĠĠĠĠĠ Ġtorch Switch . isChecked Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠLog . i ( LOG GING _ TAG , Ġ" New Ġcamera Ġposition : Ġ${ if Ġ( active Camera Ġis ĠCamera . Back ) Ġ" back " Ġelse Ġ" front "} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Flash (): Ġ( Compound Button , ĠBoolean ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠ Ġfoto ap par at . update Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Mode Ġ= Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtorch (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠLog . i ( LOG GING _ TAG , Ġ" Flash Ġis Ġnow Ġ${ if Ġ( isChecked ) Ġ" on " Ġelse Ġ" off "} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfoto ap par at . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Views Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfoto ap par at . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġthis . axis Service . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġthis . axis Service . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Delegate . result Granted ( request Code , Ġpermissions , Ġgrant Results )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfoto ap par at . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Views Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust Views Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġfoto ap par at . get Capabilities () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. when Available Ġ{ Ġcapabilities Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . zoom Ġas ? ĠZoom . Variable Zoom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġzoom Ġ-> Ġsetup Zoom ( zoom ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ Ġzoom Seek Bar . visibility Ġ= ĠView . GONE Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtorch Switch . visibility Ġ= Ġif Ġ( it . flash Modes . contains ( Flash . Torch )) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠLog . e ( LOG GING _ TAG , Ġ" Couldn 't Ġobtain Ġcapabilities .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġswitch Camera . visibility Ġ= Ġif Ġ( foto ap par at . is Available ( front ())) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Zoom ( zoom : ĠZoom . Variable Zoom ) Ġ{ ĊĠĠĠĠĠĠĠ Ġzoom Seek Bar . max Ġ= Ġzoom . max Zoom ĊĠĠĠĠĠĠĠ Ġcamera Zoom Ġ= Ġzoom ĊĠĠĠĠĠĠĠ Ġzoom Seek Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġzoom Seek Bar Ġon Progress Changed Ġ{ Ġupdate Zoom ( zoom Seek Bar . progress ) Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Zoom ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Zoom ( progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfoto ap par at . set Zoom ( progress . toFloat () Ġ/ Ġzoom Seek Bar . max ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġcamera Zoom . zoom Rat ios [ progress ] ĊĠĠĠĠĠĠĠ Ġval Ġrounded Value Ġ= Ġ(( value . toFloat ()) Ġ/ Ġ 1 0 ). round ToInt (). toFloat () Ġ/ Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġzoom L vl . text Ġ= ĠString . format ("% . 1 f ĠÃĹ ", Ġrounded Value ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠLOG GING _ TAG Ġ= Ġ" tri pod Ġtag " Ċ Ċ private Ġsealed Ġclass ĠCamera ( ĊĠĠĠĠĠĠĠ Ġval Ġlens Position : ĠLens Position Selector , ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration : ĠCamera Configuration Ċ ) Ġ{ ĊĊĠĠĠ Ġobject ĠBack Ġ: ĠCamera ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Ġ= Ġback (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Ġ= ĠCamera Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Resolution Ġ= Ġfirst Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwide Ratio ( highest Resolution ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstandard Ratio ( highest Resolution ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview F ps Range Ġ= Ġhighest F ps (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Mode Ġ= Ġoff (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Mode Ġ= Ġfirst Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuous Focus Picture (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Processor Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( rotation Ġ= Ġ 9 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġobject ĠFront Ġ: ĠCamera ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Ġ= Ġfront (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Ġ= ĠCamera Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Resolution Ġ= Ġfirst Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwide Ratio ( highest Resolution ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstandard Ratio ( highest Resolution ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview F ps Range Ġ= Ġhighest F ps (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Mode Ġ= Ġoff (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Mode Ġ= Ġfirst Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊ Ċ } Ċ