package Ġcom . ak ex orc ist . example . cam er ax . ui Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . camera . core . Image Capture Ċ import Ġandroidx . camera . core . Image Capture Exception Ċ import Ġandroidx . camera . view . video . On Video Saved Callback Ċ import Ġandroidx . camera . view . video . OutputFile Results Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . ak ex orc ist . example . cam er ax . R Ċ import Ġcom . ak ex orc ist . example . cam er ax . databinding . Activity Camera View Binding Ċ import Ġcom . ak ex orc ist . example . cam er ax . helper . Short en Multiple Permission Listener Ċ import Ġcom . kar umi . dex ter . Dex ter Ċ import Ġcom . kar umi . dex ter . Multiple Permissions Report Ċ import Ġjava . io . File Ċ Ċ class ĠCamera View Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Camera View Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Camera View Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠĠĠĠĠ Ġrequest Runtime Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Runtime Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠDex ter . with Context ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Permissions ( Manifest . permission . CAMERA , ĠManifest . permission . RECORD _ AUDIO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Listener ( multiple Permissions Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . button Toggle Camera . setOnClickListener Ġ{ Ġon Toggle Camera Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Capture Image . setOnClickListener Ġ{ Ġon Capture Image Click () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Record Video . setOnClickListener Ġ{ Ġon Record Video Click () Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠCurrently , Ġthere 's Ġno Ġzoom Ġand Ġcamera Ġbound Ġlistener Ġsupported Ġfor ĠCamera View Ċ // ĠĠĠĠĠĠĠĠ Ġseek Bar Zoom . setOn Seek Bar ChangeListener ( seek Bar ChangeListener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġbind Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . camera View . bind To Lifecycle ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . camera View . is Pin ch To Zoom Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠCurrently , Ġthere 's Ġno Ġzoom Ġand Ġcamera Ġbound Ġlistener Ġsupported Ġfor ĠCamera View Ċ // ĠĠĠĠĠĠĠĠ Ġseek Bar Zoom . max Ġ= Ġ(( camera View . max Zoom Ratio Ġ- Ġcamera View . min Zoom Ratio ) Ġ* Ġ 1 0 ). toInt () Ċ // ĠĠĠĠĠĠĠĠ Ġseek Bar Zoom . progress Ġ= Ġ( camera View . zoom Ratio Ġ* Ġ 1 0 ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Toggle Camera Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . camera View . toggle Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Capture Image Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( files Dir . absolute File , Ġ" temp . jpg ") ĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Options Ġ= ĠImage Capture . OutputFile Options . Builder ( file ). build () ĊĠĠĠĠĠĠĠ Ġbinding . camera View . take Picture ( outputFile Options , ĠContext Compat . get Main Executor ( this ), Ġimage Saved Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Unsafe Experimental Usage Error ") ĊĠĠĠ Ġprivate Ġfun Ġon Record Video Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . camera View . is Recording ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . camera View . stop Recording () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Video Recording () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Video Recording () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( files Dir . absolute File , Ġ" temp . mp 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . camera View . start Recording ( file , ĠContext Compat . get Main Executor ( this ), Ġvideo Saved Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Permission Grant () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Permission Denied () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Result Message ( getString ( R . string . permission _ den ied )) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmultiple Permissions Listener Ġ= Ġobject Ġ: ĠShort en Multiple Permission Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permissions Checked ( report : ĠMultiple Permissions Report ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( report . are All Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Grant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Denied () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġimage Saved Callback Ġ= Ġobject Ġ: ĠImage Capture . On Image Saved Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Image Saved ( outputFile Results : ĠImage Capture . OutputFile Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Result Message ( getString ( R . string . image _ capture _ success )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( exception : ĠImage Capture Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Result Message ( getString ( R . string . image _ capture _ error , Ġexception . message , Ġexception . image Capture Error )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Unsafe Experimental Usage Error ") ĊĠĠĠ Ġprivate Ġval Ġvideo Saved Callback Ġ= Ġobject Ġ: ĠOn Video Saved Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Video Saved ( outputFile Results : ĠOutput File Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Result Message ( getString ( R . string . video _ record _ success )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( video Capture Error : ĠInt , Ġmessage : ĠString , Ġcause : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Result Message ( getString ( R . string . video _ record _ error , Ġmessage , Ġvideo Capture Error )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCurrently , Ġthere 's Ġno Ġzoom Ġand Ġcamera Ġbound Ġlistener Ġsupported Ġfor ĠCamera View Ċ // ĠĠĠ Ġprivate Ġval Ġseek Bar ChangeListener Ġ= Ġobject Ġ: ĠShort en Seek Bar ChangeListener () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcamera View . zoom Ratio Ġ= Ġprogress Ġ/ Ġ 1 0 f Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Video Recording () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . button Toggle Camera . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . button Capture Image . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . button Record Video . setText ( R . string . stop _ record _ video ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Stop Video Recording () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . button Toggle Camera . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . button Capture Image . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . button Record Video . setText ( R . string . start _ record _ video ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Result Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ } Ċ