package Ġcom . og ne v . library . bar coder e ader ; Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Fragment Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . annotation . NonNull Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroid . view . Surface View Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġcom . google . android . gms . vision . Camera Source Ċ import Ġcom . google . android . gms . vision . Detector Ċ import Ġcom . google . android . gms . vision . barcode . Barcode Ċ import Ġcom . google . android . gms . vision . barcode . Barcode Detector Ċ import Ġkotlinx . android . synt hetic . main . camera _ view . view . line Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . Exception Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . view . animation . Translate Animation Ċ import Ġandroid . widget . ImageView ĊĊ Ċ /** Ċ Ġ* ĠQ r Bar Code Builder ĠSingleton . Ċ Ġ*/ Ċ class ĠQ r Bar Code Builder Ċ Ċ private Ġconstructor ( builder : ĠBuilder ) Ġ{ ĊĠ Ġprivate Ġval ĠPER MISSION S _ REQUEST _ CAMERA _ ACCESS : ĠInt Ġ= Ġ 1 0 1 ĊĠ Ġprivate Ġval ĠLOG TAG Ġ= Ġthis @ Qr Bar Code Builder . toString () ĊĠ Ġprivate Ġvar Ġcamera Source : ĠCamera Source ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġbarcode Detector : ĠBar code Detector ? Ġ= Ġnull ĊĊĠ Ġprivate Ġval Ġwidth : ĠInt ĊĠ Ġprivate Ġval Ġheight : ĠInt ĊĠ Ġprivate Ġval Ġfacing : ĠInt ĊĠ Ġprivate Ġval Ġqr Bar Code Data Listener : ĠQ r Bar Code Listener ? ĊĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠ Ġprivate Ġvar Ġsurface View : ĠQ r Surface View ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġauto Focus Enabled : ĠBoolean Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġactivity Support : ĠActivity Compat ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġfragment : ĠFragment ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġfragment Support : Ġandroid . support . v 4 . app . Fragment ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIs Ġcamera Ġrunning Ġboolean . ĊĊĠĠ Ġ* Ġ@ return Ġthe Ġboolean ĊĠĠ Ġ*/ ĊĠ Ġvar Ġis Camera Running Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġset ĊĊĠ Ġprivate Ġvar Ġsurface Created Ġ= Ġfalse ĊĊĠ Ġfun Ġinit And Start ( surface View : ĠQ r Surface View ) Ġ{ ĊĊĠĠĠ Ġsurface View . view Tree Observer ĊĠĠĠĠĠĠĠ Ġ. add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove On Global Layout Listener ( surface View , Ġthis ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġsurface Holder Callback Ġ= Ġobject Ġ: ĠSurface Holder . Callback Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsurface Created ( surface Holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠ Ġ// we Ġcan Ġstart Ġbarcode Ġafter Ġafter Ġcreating ĊĠĠĠĠĠ Ġsurface Created Ġ= Ġtrue ĊĠĠĠĠĠ Ġstart Camera View ( context , Ġcamera Source , Ġsurface View !!. findViewById ( R . id . surface _ view )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Changed ( surface Holder : ĠSurface Holder , Ġi : ĠInt , Ġi 1 : ĠInt , Ġi 2 : ĠInt ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Destroyed ( surface Holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠ Ġsurface Created Ġ= Ġfalse ĊĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠ Ġsurface Holder . remove Callback ( this ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġthis . auto Focus Enabled Ġ= Ġbuilder . aut of ocus Enabled ĊĠĠĠ Ġthis . width Ġ= Ġbuilder . width ĊĠĠĠ Ġthis . height Ġ= Ġbuilder . height ĊĠĠĠ Ġthis . facing Ġ= Ġbuilder . facing ĊĠĠĠ Ġthis . qr Bar Code Data Listener Ġ= Ġbuilder . qr Bar Code Data Listener ĊĠĠĠ Ġthis . context Ġ= Ġbuilder . context ĊĠĠĠ Ġthis . surface View Ġ= Ġbuilder . surface View ĊĠĠĠ Ġ// for Ġbetter Ġperformance Ġwe Ġshould Ġuse Ġone Ġdetector Ġfor Ġall ĠReader , Ġif Ġbuilder Ġnot Ġspecify Ġit ĊĠĠĠ Ġif Ġ( builder . barcode Detector Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġthis . barcode Detector Ġ Ġ= ĠBar code Detector . Builder ( context . application Context ). set Barcode Formats ( ĊĠĠĠĠĠĠĠĠĠ ĠBar code . QR _ CODE ). build () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġthis . barcode Detector Ġ= Ġbuilder . barcode Detector ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġ/** ĊĠĠ Ġ* ĠInit . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠ Ġif Ġ(! has Aut of ocus ( context )) Ġ{ ĊĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġ" Do Ġnot Ġhave Ġautofocus Ġfeature , Ġdisabling Ġautofocus Ġfeature Ġin Ġthe Ġlibrary !") ĊĠĠĠĠĠ Ġauto Focus Enabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! has Camera Hardware ( context )) Ġ{ ĊĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġ" Does Ġnot Ġhave Ġcamera Ġhardware !") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! check Camera Permission ( context )) Ġ{ ĊĠĠĠĠĠ Ġif ( context Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġcontext Ġas ĠActivity ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( activity !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ CAMERA _ ACCESS ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif ( context Ġis ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Ġ= Ġcontext Ġas ĠFragment ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( fragment !!. activity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ CAMERA _ ACCESS ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif ( context Ġis Ġandroid . support . v 4 . app . Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Support Ġ= Ġcontext Ġas Ġandroid . support . v 4 . app . Fragment ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( fragment Support !!. activity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ CAMERA _ ACCESS ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġ" Do Ġnot Ġhave Ġcamera Ġpermission !") ĊĊĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( barcode Detector !!. is Operation al ) Ġ{ ĊĠĠĠĠĠ Ġbarcode Detector !!. set Processor ( object Ġ: ĠDetector . Processor < Barcode > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠHand led Ġvia Ġpublic Ġmethod ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreceive Det e ctions ( detection s : ĠDetector . Det e ctions < Barcode >) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbar codes Ġ= Ġdetection s . detected Items ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( bar codes . size () Ġ!= Ġ 0 Ġ&& Ġqr Bar Code Data Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqr Bar Code Data Listener !!. on Detected ( bar codes . value At ( 0 ). display Value ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ Ġcamera Source Ġ= ĠCamera Source . Builder ( context , Ġbarcode Detector !! ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setAuto Focus Enabled ( auto Focus Enabled ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Facing ( facing ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Requested Preview Size ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġ" Barcode Ġrecognition Ġlibs Ġare Ġnot Ġdownloaded Ġand Ġare Ġnot Ġoperational ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĊĠ Ġ/** ĊĠĠ Ġ* ĠStart Ġscanning Ġqr Ġcodes . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstart () Ġ{ ĊĠĠĠ Ġif Ġ( surface View Ġ!= Ġnull Ġ&& Ġsurface Holder Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ// if Ġsurface Ġalready Ġcreated , Ġwe Ġcan Ġstart Ġcamera ĊĠĠĠĠĠ Ġif Ġ( surface Created ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Camera View ( context , Ġcamera Source , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface View !!. findViewById < Surface View >( R . id . surface _ view )) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// start Camera View Ġwill Ġbe Ġinvoke Ġin Ġvoid Ġsurface Created ĊĠĠĠĠĠĠĠ Ġsurface View !!. findViewById < Surface View >( R . id . surface _ view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. holder . add Callback ( surface Holder Callback ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġcamera : ĠCamera ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġflash mode Ġ= Ġfalse ĊĠ Ġpublic Ġfun Ġswitch On Off Flash () Ġ{ ĊĠĠĠ Ġif Ġ( camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= Ġcamera !!. parameters ĊĠĠĠĠĠĠĠ Ġparam . flash Mode Ġ= Ġif Ġ(! flash mode ) ĠCamera . Parameters . FLASH _ MODE _ TOR CH Ġelse ĠCamera . Parameters . FLASH _ MODE _ OFF ĊĠĠĠĠĠĠĠ Ġcamera !!. parameters Ġ= Ġparam ĊĠĠĠĠĠĠĠ Ġflash mode Ġ= Ġ! flash mode ĊĠĠĠĠĠĠĠ Ġif Ġ( flash mode ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Flash ĠSw itched ĠON ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Flash ĠSw itched ĠOff ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġfun Ġis Flash On (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġflash mode ; ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Camera ( camera Source : ĠCamera Source ): ĠCamera ? Ġ{ ĊĠĠĠ Ġval Ġdeclared Fields Ġ= ĠCamera Source :: class . java . declared Fields ĊĊĠĠĠ Ġfor Ġ( field Ġin Ġdeclared Fields ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( field . type Ġ== ĠCamera :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Ġ= Ġfield . get ( camera Source ) Ġas ĠCamera ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcamera ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġstart Camera View ( context : ĠContext , Ġcamera Source : ĠCamera Source ?, ĊĠĠĠĠĠ Ġsurface View : ĠSurface View ?) Ġ{ ĊĠĠĠ Ġif Ġ( is Camera Running ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Camera Ġalready Ġstarted !") ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( context , ĊĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġ" Permission Ġnot Ġgranted !") ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! is Camera Running Ġ&& Ġcamera Source Ġ!= Ġnull Ġ&& Ġsurface View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Source . start ( surface View . holder ) ĊĠĠĠĠĠĠĠ Ġcamera Ġ= Ġget Camera ( camera Source ) ĊĠĠĠĠĠĠĠ Ġis Camera Running Ġ= Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( ie : ĠIOException ) Ġ{ ĊĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġie . message ) ĊĠĠĠĠĠ Ġie . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġ// en abling Ġthe Ġflash Ġexplicitly ĊĠ Ġfun Ġenable Flash ( enable : ĠBoolean ){ ĊĠĠĠ Ġif Ġ( camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= Ġcamera !!. parameters ĊĠĠĠĠĠĠĠ Ġparam . flash Mode Ġ= Ġif Ġ( enable ) ĠCamera . Parameters . FLASH _ MODE _ TOR CH Ġelse ĠCamera . Parameters . FLASH _ MODE _ OFF ĊĠĠĠĠĠĠĠ Ġcamera !!. parameters Ġ= Ġparam ĊĠĠĠĠĠĠĠ Ġflash mode Ġ= Ġenable ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠĠĊĠ Ġ/** ĊĠĠ Ġ* ĠStop Ġcamera ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstop () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġif Ġ( is Camera Running Ġ&& Ġcamera Source Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Source !!. stop () ĊĠĠĠĠĠĠĠ Ġis Camera Running Ġ= Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( ie : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠLog . e ( LOG TAG , Ġie . message ) ĊĠĠĠĠĠ Ġie . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRelease Ġand Ġcleanup ĠQ RE ader . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġrelease And Cleanup () Ġ{ ĊĠĠĠ Ġstop () ĊĠĠĠ Ġif Ġ( camera Source Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ// release Ġcamera Ġand Ġbarcode Ġdetector ( will Ġinvoke Ġinside ) Ġresources ĊĠĠĠĠĠ Ġcamera Source !!. release () ĊĠĠĠĠĠ Ġcamera Source Ġ= Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck Camera Permission ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġpermission Ġ= ĠManifest . permission . CAMERA ĊĠĠĠ Ġval Ġres Ġ= Ġcontext . check Calling Or Self Permission ( permission ) ĊĠĠĠ Ġreturn Ġres Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhas Camera Hardware ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġcontext . package Manager . has System Feature ( PackageManager . FEATURE _ CAMERA ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhas Aut of ocus ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġcontext . package Manager . has System Feature ( PackageManager . FEATURE _ CAMERA _ AUTO FOCUS ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġtype ĠBuilder . ĊĠĠ Ġ*/ ĊĠ Ġclass ĠBuilder ĊĠ Ġ/** ĊĠĠ Ġ* ĠInstanti ates Ġa Ġnew ĠBuilder . ĊĊĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġcontext ĊĠĠ Ġ* Ġ* ĊĠĠ Ġ* Ġ@ param Ġsurface View ĊĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġsurface Ġview ĊĠĠ Ġ* Ġ* ĊĠĠ Ġ* Ġ@ param Ġqr Bar Code Data Listener ĊĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġqr Ġdata Ġlistener ĊĠĠ Ġ*/ ĊĠ Ġ( Ġval Ġcontext : ĠContext , Ġ Ġval Ġsurface View : ĠQ r Surface View , ĊĠĠĠĠĠĠ Ġval Ġqr Bar Code Data Listener : ĠQ r Bar Code Listener ) Ġ{ ĊĠĠĠĠ Ġvar Ġautofocus Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠ Ġvar Ġwidth : ĠInt Ġ= Ġ 0 ĊĠĠĠĠ Ġvar Ġheight : ĠInt Ġ= Ġ 0 ĊĠĠĠĠ Ġvar Ġfacing : ĠInt Ġ= Ġ 0 ĊĠĠĠĠ Ġvar Ġbarcode Detector : ĠBar code Detector ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġthis . aut of ocus Enabled Ġ= Ġtrue ĊĠĠĠĠĠ Ġthis . width Ġ= Ġ 8 0 0 ĊĠĠĠĠĠ Ġthis . height Ġ= Ġ 8 0 0 ĊĠĠĠĠĠ Ġthis . facing Ġ= ĠBACK _ CAM ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġautofocus Ġbuilder . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġautofocus Enabled ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġautofocus Ġenabled ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġbuilder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġenable Aut of ocus ( aut of ocus Enabled : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠ Ġthis . aut of ocus Enabled Ġ= Ġautofocus Enabled ĊĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWidth Ġbuilder . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġwidth ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġwidth ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġbuilder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwidth ( width : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠ Ġif Ġ( width Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . width Ġ= Ġwidth ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHeight Ġbuilder . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġheight ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġheight ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġbuilder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġheight ( height : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠ Ġif Ġ( height Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . height Ġ= Ġheight ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF acing Ġbuilder . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġfacing ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġfacing ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġbuilder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfacing ( facing : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠ Ġthis . facing Ġ= Ġfacing ĊĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild ĠQ RE ader ĊĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠQ RE ader ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild (): ĠQ r Bar Code Builder Ġ{ ĊĠĠĠĠĠ Ġreturn ĠQ r Bar Code Builder ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBar code Ġdetector . ĊĊĠĠĠĠ Ġ* Ġ@ param Ġbarcode Detector ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġbarcode Ġdetector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbarcode Detector ( barcode Detector : ĠBar code Detector ) Ġ{ ĊĠĠĠĠĠ Ġthis . barcode Detector Ġ= Ġbarcode Detector ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconstant ĠFR ONT _ CAM . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠFR ONT _ CAM Ġ= ĠCamera Source . CAMERA _ F ACING _ FRONT ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconstant ĠBACK _ CAM . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠBACK _ CAM Ġ= ĠCamera Source . CAMERA _ F ACING _ BACK ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . J EL LY _ BE AN ) ĊĠĠĠ Ġprivate Ġfun Ġremove On Global Layout Listener ( v : ĠView , ĊĠĠĠĠĠĠĠ Ġlistener : ĠView Tree Observer . On Global Layout Listener ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . J EL LY _ BE AN ) Ġ{ ĊĠĠĠĠĠĠĠ Ġv . view Tree Observer . remove Global On Layout Listener ( listener ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġv . view Tree Observer . remove On Global Layout Listener ( listener ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠĠ Ġinterface ĠQ r Bar Code Listener Ġ{ ĊĊĠĠĠĠ Ġ/** ĊĠĠĠĠĠ Ġ* ĠOn Ġdetected . ĊĊĠĠĠĠĠ Ġ* Ġ@ param Ġdata ĊĠĠĠĠĠ Ġ* Ġ* ĠĠĠĠ Ġthe Ġdata ĊĠĠĠĠĠ Ġ*/ ĊĠĠĠĠ Ġ// ĠCalled Ġfrom Ġnot Ġmain Ġthread . ĠBe Ġcareful ĊĠĠĠĠ Ġabstract Ġfun Ġon Detected ( data : ĠString ) ĊĠĠ Ġ} Ċ } ĊĊ