package Ġme . sk on b . open h 2 6 4 cam er av iew Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . content . File Provider Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . util . Log Ċ import Ġandroid . view .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ camera _ record .* Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ class ĠCamera Record Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Camera Record " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcamera : ĠCamera ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmp 4 Recorder Ġ= ĠMP 4 Recorder () ĊĠĠĠ Ġvar Ġflash Mode Ġ= ĠCamera . Parameters . FLASH _ MODE _ OFF ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ Ġcamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . lock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcamera . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . supported Flash Modes ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . contains ( flash Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . flash Mode Ġ= Ġflash Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . parameters Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġpreview Started Ġ= Ġfalse ĊĠĠĠ Ġvar Ġdisplay Orientation : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġcamera ID Ġ= Ġget Back Camera ID () ĊĠĠĠ Ġvar Ġsurface Texture : ĠSurface Texture ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsurface Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġsurface Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġpreview Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġpreview Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġvideo Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġvideo Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġprogress Dialog Helper Ġ= ĠProgress Dialog Helper () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ stop Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Helper . show Progress Dialog ( this @ Camera Record Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Helper . update Progress Dialog Message ( this @ Camera Record Activity , Ġ" åĭķ çĶ» ãĤĴ çĶŁæĪĲ ä¸Ń ãģ§ãģĻ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . stop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Helper . hide Progress Dialog ( this @ Camera Record Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog Helper (). showMessageDialog With Message ( this @ Camera Record Activity , Ġ" åĭķ çĶ» ãĤĴ çĶŁæĪĲ ãģĹãģ¾ãģĹãģŁ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" çĶŁæĪĲ å®Į äºĨ ", Ġ" åĨį çĶŁ ", Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠFile Provider . get Uri For File ( this @ Camera Record Activity , Ġ"${ application Context . packageName }. provider ", Ġmp 4 Recorder . outputFile )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ camera _ orientation Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Helper . show Progress Dialog ( this @ Camera Record Activity ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Helper . update Progress Dialog Message ( this @ Camera Record Activity , Ġ" ãĤ« ãĥ¡ ãĥ© ãģ® åĲĳ ãģį ãĤĴ å¤ī ãģĪ ãģ¦ãģĦãģ¾ãģĻ ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . stop Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo FileList . add ( mp 4 Recorder . outputFile !! ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . ensure Output Files () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Preview () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Camera () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera ID Ġ== Ġget Back Camera ID ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ID Ġ= Ġget Front Camera ID () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ID Ġ= Ġget Back Camera ID () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( camera ID ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera ID Ġ== Ġget Back Camera ID ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ID Ġ= Ġget Front Camera ID () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ID Ġ= Ġget Back Camera ID () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( camera ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ camera _ record ) ĊĠĠĠĠĠĠĠ Ġmp 4 Recorder . max Duration Ġ= Ġ 1 0 Ġ* Ġ 1 0 0 0 L ; ĊĠĠĠĠĠĠĠ Ġtexture View ?. setOn Touch Listener Ġ{ Ġview , Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( motion Event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL , ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . CAMERA ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠContext Compat . check Self Permission ( this , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠContext Compat . check Self Permission ( this , ĠManifest . permission . READ _ EXTERNAL _ STORAGE ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠContext Compat . check Self Permission ( this , ĠManifest . permission . RECORD _ AUDIO ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( camera ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( this , ĠManifest . permission . CAMERA )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog Helper (). showMessageDialog With Message ( this , Ġ" ãĤ« ãĥ¡ ãĥ© ãģ« ãĤ¢ãĤ¯ãĤ»ãĤ¹ ãģĹãģ¾ãģĻ ", Ġ" ãĤ« ãĥ¡ ãĥ© ãģ® ä½¿çĶ¨ è¨± åı¯ ", Ġ" ãģ¯ ãģĦ ", Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . CAMERA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . RECORD _ AUDIO ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . CAMERA , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĠManifest . permission . RECORD _ AUDIO ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( camera ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtexture View . surface Texture Listener Ġ= Ġobject Ġ: ĠTexture View . Surface Texture Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Destroyed ( surface Texture : ĠSurface Texture ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera Record Activity . surface Texture Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Available ( surface Texture : ĠSurface Texture ?, Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera Record Activity . surface Texture Ġ= Ġsurface Texture ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Size Changed ( surface Texture : ĠSurface Texture ?, Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Display Orientation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Preview Transform ( texture View !!. width , Ġtexture View !!. height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Surface Texture Updated ( surface Texture : ĠSurface Texture ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Camera Record Activity . surface Texture Ġ= Ġsurface Texture ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġopen Camera ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdetermine Video Size ( id )?. let Ġ{ Ġsize Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Width Ġ= Ġsize . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Height Ġ= Ġsize . height ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" video Ġsize : Ġ($ video Width , Ġ$ video Height )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcamera Ġ= Ġget Camera ( id ) ĊĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparameters Ġ= Ġit . parameters ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( metrics ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Opt imal Size ( parameters . supported Preview Sizes , Ġ 1 2 8 0 , Ġ 7 2 0 )?. let Ġ{ Ġpreview Size Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Width Ġ= Ġpreview Size . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Height Ġ= Ġpreview Size . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( window Manager . default Display . rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. set Display Orientation ( 9 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 2 7 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. set Display Orientation ( 1 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . set Preview Size ( preview Width , Ġpreview Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" preview Ġsize : Ġ($ preview Width , Ġ$ preview Height )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameters . supported Focus Modes . contains ( Camera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . focus Mode Ġ= ĠCamera . Parameters . FOCUS _ MODE _ CONT IN UO US _ VIDEO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . supported Flash Modes ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . contains ( flash Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . flash Mode Ġ= Ġflash Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Enabled Speed s ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . parameters Ġ= Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Display Orientation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Texture ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Preview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdetermine Display Orientation () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera ID ?. let Ġ{ Ġcamera ID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Info Ġ= ĠCamera . Camera Info () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( camera ID , Ġcamera Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClock wise Ġrotation Ġneeded Ġto Ġalign Ġthe Ġwindow Ġdisplay Ġto Ġthe Ġnatural Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġwindow Manager . default Display . rotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdegrees Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 9 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees Ġ= Ġ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 1 8 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees Ġ= Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface . ROT ATION _ 2 7 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees Ġ= Ġ 2 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdisplay Orientation : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCamera Info . Orientation Ġis Ġthe Ġangle Ġrelative Ġto Ġthe Ġnatural Ġposition Ġof Ġthe Ġdevice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġclock wise Ġrotation Ġ( angle Ġthat Ġis Ġrotated Ġclock wise Ġfrom Ġthe Ġnatural Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Info . facing Ġ=== ĠCamera . Camera Info . CAMERA _ F ACING _ FRONT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOrientation Ġis Ġangle Ġof Ġrotation Ġwhen Ġfacing Ġthe Ġcamera Ġfor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġcamera Ġimage Ġto Ġmatch Ġthe Ġnatural Ġorientation Ġof Ġthe Ġdevice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Orientation Ġ= Ġ( camera Info . orientation Ġ+ Ġdegrees ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Orientation Ġ= Ġ( 3 6 0 Ġ- Ġdisplay Orientation ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Orientation Ġ= Ġ( camera Info . orientation Ġ- Ġdegrees Ġ+ Ġ 3 6 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. set Display Orientation ( display Orientation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display Orientation Ġ= Ġdisplay Orientation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Camera ( camera ID : ĠInt ): ĠCamera ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCamera . open ( camera ID ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Can 't Ġopen Ġcamera Ġwith Ġid Ġ" Ġ+ Ġcamera ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Opt imal Size ( sizes : ĠList < Camera . Size > ?, Ġw : ĠInt , Ġh : ĠInt , Ġmax W : ĠInt Ġ= ĠInt . MAX _ VALUE , Ġmax H : ĠInt Ġ= ĠInt . MAX _ VALUE ): ĠCamera . Size ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAS PECT _ TO LER ANCE Ġ= Ġ 0 . 1 5 ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ratio Ġ= Ġw . toDouble () Ġ/ Ġh ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( sizes Ġ== Ġnull ) Ġreturn Ġnull ĊĊĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" supp lied Ġsizes : Ġ${ sizes . map Ġ{ Ġsize Ġ-> Ġ" (${ size . width }, Ġ${ size . height })" Ġ}. join ToString (", Ġ" )} ") ĊĠĠĠĠĠĠĠ Ġvar Ġoptimal Size : ĠCamera . Size ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin Diff Ġ= Ġjava . lang . Double . MAX _ VALUE ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Height Ġ= Ġh ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġsize ĊĠĠĠĠĠĠĠ Ġfor Ġ( size Ġin Ġsizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġsize . width . toDouble () Ġ/ Ġsize . height . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( ratio Ġ- Ġtarget Ratio ) Ġ> ĠAS PECT _ TO LER ANCE ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( size . height Ġ- Ġtarget Height ) Ġ< Ġmin Diff Ġ&& Ġsize . height Ġ<= Ġmax H Ġ&& Ġsize . width Ġ<= Ġmax W ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimal Size Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Diff Ġ= ĠMath . abs ( size . height Ġ- Ġtarget Height ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( optimal Size Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Diff Ġ= Ġjava . lang . Double . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( size Ġin Ġsizes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( size . height Ġ- Ġtarget Height ) Ġ< Ġmin Diff Ġ&& Ġsize . height Ġ<= Ġmax H Ġ&& Ġsize . width Ġ<= Ġmax W ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptimal Size Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Diff Ġ= ĠMath . abs ( size . height Ġ- Ġtarget Height ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoptimal Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Front Camera ID (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġpackage Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( pm . has System Feature ( PackageManager . FEATURE _ CAMERA _ FRONT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCamera . Camera Info . CAMERA _ F ACING _ FRONT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Back Camera ID () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Back Camera ID (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCamera . Camera Info . CAMERA _ F ACING _ BACK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcamera Info : ĠCamera . Camera Info ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġencoded Data : ĠByteArray Ġ= Ġbyte ArrayOf () ĊĠĠĠ Ġfun Ġstart Preview () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! preview Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ Ġcamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Texture ?. let Ġ{ Ġsurface Texture Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . set Preview Texture ( surface Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . set Camera ( camera , Ġcamera ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmp 4 Recorder . prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . start Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Preview Transform ( surface Width , Ġsurface Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġreload Camera () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġstop Recording () Ċ // ĠĠĠĠĠĠĠ Ġrelease Media Recorder () ĊĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠĠĠĠĠ Ġopen Camera ( camera ID !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetermine Video Size ( id : ĠInt ): ĠCamera . Size ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvideo Sizes : ĠMutable List < Camera . Size > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġget Camera ( id )?. let Ġ{ Ġcamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġcamera . parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . supported Video Sizes ?. let Ġ{ Ġsizes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Sizes . addAll ( sizes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġvideo Sizes . addAll ( params . supported Preview Sizes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Opt imal Size ( video Sizes , Ġ 7 2 0 , Ġ 1 2 8 0 , Ġ 1 2 8 0 , Ġ 7 2 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Preview () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( preview Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ Ġcamera Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . stop Preview () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . set Preview Callback ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpreview Started Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġrelease Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Preview () ĊĠĠĠĠĠĠĠ Ġcamera ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcamera Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Preview Transform ( view Width : ĠInt , Ġview Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġwindow Manager . default Display . rotation ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġpreview Width ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġpreview Height ĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Scale Ġ= Ġview Width . toFloat () Ġ/ Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġvertical Scale Ġ= Ġview Height . toFloat () Ġ/ Ġheight ĊĠĠĠĠĠĠĠ Ġif Ġ( horizontal Scale Ġ> Ġvertical Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale ( 1 f , Ġhorizontal Scale Ġ/ Ġvertical Scale , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled Height Ġ= Ġview Height Ġ* Ġhorizontal Scale Ġ/ Ġvertical Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Translate ( 0 f , Ġ-( scaled Height Ġ- Ġview Height ) Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Scale ( vertical Scale Ġ/ Ġhorizontal Scale , Ġ 1 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled Width Ġ= Ġview Width Ġ* Ġvertical Scale Ġ/ Ġhorizontal Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Translate (- ( scaled Width Ġ- Ġview Width ) Ġ/ Ġ 2 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" display Rotation : Ġ$ rotation ") ĊĠĠĠĠĠĠĠ Ġif Ġ( Surface . ROT ATION _ 1 8 0 Ġ== Ġrotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( 1 8 0 f , Ġview Width Ġ/ Ġ 2 f , Ġview Height Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Surface . ROT ATION _ 9 0 Ġ== Ġrotation Ġ|| ĠSurface . ROT ATION _ 2 7 0 Ġ== Ġrotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . post Rotate (( 9 0 Ġ* Ġ( rotation Ġ- Ġ 2 )). toFloat (), Ġview Width Ġ/ Ġ 2 f , Ġview Height Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtexture View ?. set Transform ( matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgranted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġgrant Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgranted Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gr anted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( get Back Camera ID ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġcamera ID ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtexture View ?. keep Screen On Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠĠĠĠĠ Ġtexture View ?. keep Screen On Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġmp 4 Recorder . release () ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ