package Ġcom . gt i ag oma ia . cam er ax Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics .* Ċ import Ġandroid . media . Image Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . camera . core .* Ċ import Ġandroidx . camera . lifecycle . Process Camera Provider Ċ import Ġandroidx . camera . view . Preview View Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . widget . ImageView Compat Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util . concurrent . Executors Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠLifecycle Owner Ġ{ ĊĊĊĊĠĠĠ Ġ// ĠThis Ġis Ġan Ġarbitrary Ġnumber Ġwe Ġare Ġusing Ġto Ġkeep Ġtrack Ġof Ġthe Ġpermission ĊĠĠĠ Ġ// Ġrequest . ĠWhere Ġan Ġapp Ġhas Ġmultiple Ġcontext Ġfor Ġrequesting Ġpermission , ĊĠĠĠ Ġ// Ġthis Ġcan Ġhelp Ġdifferent iate Ġthe Ġdifferent Ġcontexts . ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ CODE _ PERMISSION S Ġ= Ġ 1 0 ĊĠĠĠ Ġ// ĠThis Ġis Ġan Ġarray Ġof Ġall Ġthe Ġpermission Ġspecified Ġin Ġthe Ġmanifest . ĊĠĠĠ Ġprivate Ġval ĠREQUIRED _ PERMISSION S Ġ= ĠarrayOf ( Manifest . permission . CAMERA ) ĊĊĊĊ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreview View : ĠPreview View ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠimageView : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Provider : Process Camera Provider ĊĠĠĠ Ġprivate Ġvar Ġimage Capture : ĠImage Capture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠĠ Ġpreview View Ġ= ĠfindViewById ( R . id . view _ finder ) ĊĠĠĠĠĠĠĠ ĠimageView Ġ= ĠfindViewById ( R . id . image view ) ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠRequest Ġcamera Ġpermissions ĊĠĠĠĠĠĠĠ Ġif Ġ( all Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview View . post Ġ{ Ġstart Camera () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠREQUIRED _ PERMISSION S , ĠREQUEST _ CODE _ PERMISSION S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . btn _ capture _ image ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Capture ?. take Picture ( executor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠImage Capture . On Image Capt ured Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Unsafe Experimental Usage Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Capture Success ( image : ĠImage Proxy ) Ġ{ ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotated Bitmap Ġ= Ġbitmap Helper . rotate Image ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Helper . image To Bitmap ( image Ġ= Ġimage . image !! ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . image Info . rotation Degrees . toFloat () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠimageView . setImage Bitmap ( image . image !!. to Bitmap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( executor . is Terminated Ġ|| Ġexecutor . is Terminated ) Ġreturn @ run On Ui Thread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . image ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Bitmap ()?. let Ġ{ Ġbitmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Provider . unbind All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" capture Ġsuccess ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Capture Success ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( exception : ĠImage Capture Exception ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" image Ġsave Ġfailed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onError ( exception ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" cam er ax Ġon create Ġsuccess ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcamera Provider Future Ġ= ĠProcess Camera Provider . getInstance ( this ) ĊĊĊĠĠĠĠĠĠĠ Ġcamera Provider Future . addListener ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCamera Ġprovider Ġis Ġnow Ġguaranteed Ġto Ġbe Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Provider Ġ= Ġcamera Provider Future . get () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe Ġpreview Ġuse Ġcase Ġto Ġdisplay Ġcamera Ġpreview . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Ġ= ĠPreview . Builder (). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe Ġcapture Ġuse Ġcase Ġto Ġallow Ġusers Ġto Ġtake Ġphotos . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Capture Ġ= ĠImage Capture . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Capture Mode ( Image Capture . CAPTURE _ MODE _ MIN IM IZE _ LAT ENCY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChoose Ġthe Ġcamera Ġby Ġrequiring Ġa Ġlens Ġfacing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Selector Ġ= ĠCamera Selector . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. require Lens Facing ( Camera Selector . LEN S _ F ACING _ BACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAttach Ġuse Ġcases Ġto Ġthe Ġcamera Ġwith Ġthe Ġsame Ġlifecycle Ġowner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Ġ= Ġcamera Provider . bind To Lifecycle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġas ĠLifecycle Owner , Ġcamera Selector , Ġpreview , Ġimage Capture ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġthe Ġpreview Ġuse Ġcase Ġto Ġthe Ġpreview View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview . set Surface Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpreview View . create Surface Provider ( camera . camera Info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview View . create Surface Provider ( camera . camera Info )) ĊĊĠĠĠĠĠĠĠ Ġ}, ĠContext Compat . get Main Executor ( this )) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠImage . to Bitmap (): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġbitmap : Bitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġplanes [ 0 ]. buffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . rewind () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( buffer . capacity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠIllegalStateException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e ) ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġplanes [ 0 ]. buffer Ċ // ĠĠĠĠĠĠĠ Ġbuffer . rewind () Ċ // ĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( buffer . capacity ()) Ċ // ĠĠĠĠĠĠĠ Ġbuffer . get ( bytes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠImage . to Bitmap Using Y UV (): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġy Buffer Ġ= Ġplanes [ 0 ]. buffer Ġ// ĠY ĊĠĠĠĠĠĠĠ Ġval Ġu Buffer Ġ= Ġplanes [ 1 ]. buffer Ġ// ĠU ĊĠĠĠĠĠĠĠ Ġval Ġv Buffer Ġ= Ġplanes [ 2 ]. buffer Ġ// ĠV ĊĊĠĠĠĠĠĠĠ Ġval Ġy Size Ġ= Ġy Buffer . remaining () ĊĠĠĠĠĠĠĠ Ġval Ġu Size Ġ= Ġu Buffer . remaining () ĊĠĠĠĠĠĠĠ Ġval Ġv Size Ġ= Ġv Buffer . remaining () ĊĊĠĠĠĠĠĠĠ Ġval Ġnv 2 1 Ġ= ĠByteArray ( y Size Ġ+ Ġu Size Ġ+ Ġv Size ) ĊĊĠĠĠĠĠĠĠ Ġ// U Ġand ĠV Ġare Ġsw apped ĊĠĠĠĠĠĠĠ Ġy Buffer . get ( nv 2 1 , Ġ 0 , Ġy Size ) ĊĠĠĠĠĠĠĠ Ġv Buffer . get ( nv 2 1 , Ġy Size , Ġv Size ) ĊĠĠĠĠĠĠĠ Ġu Buffer . get ( nv 2 1 , Ġy Size Ġ+ Ġv Size , Ġu Size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġy uv Image Ġ= ĠY uv Image ( nv 2 1 , ĠImage Format . NV 2 1 , Ġthis . width , Ġthis . height , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġy uv Image . compress To J peg ( Rect ( 0 , Ġ 0 , Ġy uv Image . width , Ġy uv Image . height ), Ġ 5 0 , Ġout ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Bytes Ġ= Ġout . toByteArray () ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( image Bytes , Ġ 0 , Ġimage Bytes . size ) ĊĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġstart Camera () Ġ{ Ċ // Ċ // Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠBuild Ġthe Ġview finder Ġuse Ġcase Ċ // ĠĠĠĠĠĠĠ Ġval Ġpreview Ġ= ĠPreview . Builder () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTarget Resolution ( Size ( 6 4 0 , Ġ 4 8 0 )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠEvery Ġtime Ġthe Ġview finder Ġis Ġupdated , Ġre compute Ġlayout Ċ // ĠĠĠĠĠĠĠ Ġpreview . setOn Preview Output Update Listener Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġupdate Ġthe ĠSurface Texture , Ġwe Ġhave Ġto Ġremove Ġit Ġand Ġre - add Ġit Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview Finder . parent Ġas ĠViewGroup Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġparent . remove View ( view Finder ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġparent . addView ( view Finder , Ġ 0 ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġview Finder . surface Texture Ġ= Ġit . surface Texture Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Transform () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠBind Ġuse Ġcases Ġto Ġlifecycle Ċ // ĠĠĠĠĠĠĠ Ġ// ĠIf ĠAndroid ĠStudio Ġcompl ains Ġabout Ġ" this " Ġbeing Ġnot Ġa ĠLifecycle Owner Ċ // ĠĠĠĠĠĠĠ Ġ// Ġtry Ġre building Ġthe Ġproject Ġor Ġupdating Ġthe Ġapp compat Ġdependency Ġto Ċ // ĠĠĠĠĠĠĠ Ġ// Ġversion Ġ 1 . 1 . 0 Ġor Ġhigher . Ċ // ĠĠĠĠĠĠĠ ĠCamera X . bind To Lifecycle ( this , Ġpreview ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġupdate Transform () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe Ġcenter Ġof Ġthe Ġview Ġfinder Ċ // ĠĠĠĠĠĠĠ Ġval Ġcenter X Ġ= Ġview Finder . width Ġ/ Ġ 2 f Ċ // ĠĠĠĠĠĠĠ Ġval Ġcenter Y Ġ= Ġview Finder . height Ġ/ Ġ 2 f Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠCorrect Ġpreview Ġoutput Ġto Ġaccount Ġfor Ġdisplay Ġrotation Ċ // ĠĠĠĠĠĠĠ Ġval Ġrotation Degrees Ġ= Ġwhen ( view Finder . display . rotation ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 0 Ġ-> Ġ 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 9 0 Ġ-> Ġ 9 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 1 8 0 Ġ-> Ġ 1 8 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 2 7 0 Ġ-> Ġ 2 7 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġmatrix . post Rotate (- rotation Degrees . toFloat (), Ġcenter X , Ġcenter Y ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠFinally , Ġapply Ġtransformations Ġto Ġour ĠTexture View Ċ // ĠĠĠĠĠĠĠ Ġview Finder . set Transform ( matrix ) Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProcess Ġresult Ġfrom Ġpermission Ġrequest Ġdialog Ġbox , Ġhas Ġthe Ġrequest ĊĠĠĠĠ Ġ* Ġbeen Ġgranted ? ĠIf Ġyes , Ġstart ĠCamera . ĠOtherwise Ġdisplay Ġa Ġtoast ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ PERMISSION S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( all Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview View . post Ġ{ Ġstart Camera () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Permissions Ġnot Ġgranted Ġby Ġthe Ġuser .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġall Ġpermission Ġspecified Ġin Ġthe Ġmanifest Ġhave Ġbeen Ġgranted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġall Permissions Granted () Ġ= ĠREQUIRED _ PERMISSION S . all Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context , Ġit ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ} Ċ } Ċ