package Ġcom . v ish al roy . test app . Dialog s Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . media . Audio Attributes Ċ import Ġandroid . media . Sound Pool Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . util . Rational Ċ import Ġandroid . util . Size Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . camera . core .* Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . v ish al roy . test app . Helpers . Constants Ċ import Ġcom . v ish al roy . test app . Helpers . Utils Ċ import Ġcom . v ish al roy . test app . R Ċ import Ġid . zel ory . compressor . Compressor Ċ import Ġkotlinx . android . synt hetic . main . dialog _ camera .* Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . File Ċ Ċ class ĠCamera Dialog Ġ( var Ġactivity : ĠActivity ){ ĊĊĠĠĠ Ġprivate Ġvar Ġdialog Ġ: ĠDialog Ġ= ĠDialog ( activity ) ĊĠĠĠ Ġprivate Ġvar Ġon Image Capt ured : ĠOn Image Capt ured ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsound Pool Ġ: ĠSound Pool ĊĠĠĠ Ġprivate Ġvar Ġsh utter Sound Ġ: ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Initializing Ġdialog ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( R . layout . dialog _ camera ) ĊĠĠĠĠĠĠĠ Ġdialog . window !!. setLayout ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġdialog . window !!. setBackground Drawable ( Color Drawable ( Color . TRANSP ARENT )) ĊĠĠĠĠĠĠĠ Ġdialog . set Canceled On Touch Outside ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// Initializing Ġsound Pool ĊĠĠĠĠĠĠĠ Ġinit Sound Pool () ĊĊĠĠĠĠĠĠĠ Ġdialog . texture . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Camera () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠEvery Ġtime Ġthe Ġprovided Ġtexture Ġview Ġchanges , Ġre compute Ġlayout ĊĠĠĠĠĠĠĠ Ġdialog . texture . add On Layout ChangeListener Ġ{ Ġ_, Ġ_, Ġ_, Ġ_, Ġ_, Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Transform () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Just Ġfor Ġfun Ġ;) ĊĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils (). sn ackBar ( dialog . root _ view , Ġactivity . getString ( R . string . say _ che ese )) ĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Sound Pool (){ ĊĠĠĠĠĠĠĠ Ġ// Config uring Ġattributes ĊĠĠĠĠĠĠĠ Ġval Ġaudio Attributes Ġ= ĠAudio Attributes . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Usage ( Audio Attributes . USAGE _ AS SIST ANCE _ SON IFICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ContentType ( Audio Attributes . CONTENT _ TYPE _ SON IFICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Initializing ĊĠĠĠĠĠĠĠ Ġsound Pool Ġ= ĠSound Pool . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMax Streams ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Audio Attributes ( audio Attributes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Loading Ġsh utter Ġsound Ġto Ġsound Pool ĊĠĠĠĠĠĠĠ Ġsh utter Sound Ġ= Ġsound Pool . load ( activity , ĠR . raw . camera _ sh utter , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics (). also Ġ{ Ġdialog . texture . display . get Real Metrics ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscreen Size Ġ= ĠSize ( metrics . width Pixels , Ġmetrics . height Pixels ) ĊĠĠĠĠĠĠĠ Ġval Ġscreen AspectRatio Ġ= ĠRational ( metrics . width Pixels , Ġmetrics . height Pixels ) ĊĊĠĠĠĠĠĠĠ Ġ// Setting Ġup Ġthe Ġpreview Ġconfiguration ĊĠĠĠĠĠĠĠ Ġval Ġpreview Config Ġ= ĠPreview Config . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Resolution ( screen Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target AspectRatio ( screen AspectRatio ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( activity . window Manager . default Display . rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( dialog . texture . display . rotation ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġpreview Ġ= ĠPreview ( preview Config ) ĊĠĠĠĠĠĠĠ Ġpreview . setOn Preview Output Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . texture . surface Texture Ġ= Ġit . surface Texture ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Transform () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Setting Ġup Ġconfiguration Ġfor Ġfinal Ġimage Ġoutput ĊĠĠĠĠĠĠĠ Ġval Ġimage Capture Config Ġ= ĠImage Capture Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Lens Facing ( Camera X . Lens Facing . FRONT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Target AspectRatio ( screen AspectRatio ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Rotation ( dialog . texture . display . rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Capture Mode ( Image Capture . Capture Mode . MAX _ QUAL ITY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Capture Ġ= ĠImage Capture ( image Capture Config ) ĊĊĠĠĠĠĠĠĠ Ġ// Initializing Ġsh utter Ġbutton ĊĠĠĠĠĠĠĠ Ġdialog . click . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// This Ġwould Ġavoid Ġdialog Ġfrom Ġdis missing Ġwhile Ġprocessing Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Cancel able ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Creating Ġthe Ġimage Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( activity . get External Files Dir ( Constants . I MAGES _ FOLDER ), Ġ"${ System . currentTimeMillis ()}. jpg ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Capture . take Picture ( file , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠImage Capture . On Image Saved Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠImage Capture . UseCase Error , Ġmessage : ĠString , Ġexc : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// M aking Ġdialog Ġcancell able Ġif Ġthe Ġimage Ġdoesn 't Ġgets Ġcaptured ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Cancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils (). sn ackBar ( dialog . root _ view , Ġactivity . getString ( R . string . capture _ failed )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Image Saved ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Playing Ġsh utter Ġsound Ġfor Ġfeedback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Pool . play ( sh utter Sound , Ġ 1 F , Ġ 1 F , 0 , 0 , Ġ 1 F ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Sending Ġthe Ġimage Ġfor Ġcompression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompress And Send Callback ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCamera X . bind To Lifecycle ( activity Ġas ĠLifecycle Owner , Ġpreview , Ġimage Capture ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Transform () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġval Ġcenter X Ġ= Ġdialog . texture . width Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġcenter Y Ġ= Ġdialog . texture . height Ġ/ Ġ 2 f ĊĊĠĠĠĠĠĠĠ Ġval Ġrotation Degrees Ġ= Ġwhen Ġ( dialog . texture . 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 ) ĊĠĠĠĠĠĠĠ Ġdialog . texture . set Transform ( matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompress And Send Callback ( file Ġ: ĠFile ){ ĊĠĠĠĠĠĠĠ Ġval Ġloader Dialog Ġ= ĠLoader Dialog ( activity ) ĊĠĠĠĠĠĠĠ Ġloader Dialog . show () ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ets Ġcompress Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompress or ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Quality ( 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Compress Format ( Bitmap . Compress Format . PNG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compress ToFile ( file ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Stopping Ġthe Ġcamera Ġby Ġun binding Ġfrom Ġits Ġlifecycle ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera X . unbind All () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Dis missing Ġloader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader Dialog . dismiss () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Sending Ġcallback Ġwith Ġcompressed Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Image Capt ured ?. on Capt ured ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Image Capt ured Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Capt ured ( file Ġ: ĠFile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Image Capt ured Listener ( on Image Capt ured : ĠOn Image Capt ured ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Image Capt ured Ġ= Ġon Image Capt ured ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dialog . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dialog . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ