package Ġcom . example . medi qr Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . media . Tone Generator Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Holder Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ 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 . activity _ scan .* Ċ Ċ class ĠScan Activity Ġ: ĠAppCompatActivity (), ĠSurface Holder . Callback , ĠDetector . Processor < Barcode > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ cam Ġ= Ġ 2 0 1 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbarcode Detector : ĠBar code Detector ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Source : ĠCamera Source ĊĠĠĠ Ġprivate Ġvar Ġis Detected Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ scan ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( Activity Compat . check Self Permission ( this , ĠManifest . permission . CAMERA )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ GRAN TED Ġ-> Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . barcode Detector Ġ= ĠBar code Detector . Builder ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Barcode Formats ( Barcode . QR _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . camera Source Ġ= ĠCamera Source . Builder ( this , Ġbarcode Detector ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Auto Focus Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Facing ( Camera Source . CAMERA _ F ACING _ BACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Requested Preview Size ( 1 9 2 0 , Ġ 1 0 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Requested F ps ( 1 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( barcode Detector . is Operation al ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbarcode Detector . set Processor ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera _ surface . holder . add Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Manifest . permission . CAMERA ), Ġ_ cam ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cam Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" app x ", Ġgrant Results [ 0 ]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( grant Results . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠScan Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Changed ( holder : ĠSurface Holder ?, Ġformat : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Destroyed ( holder : ĠSurface Holder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Source . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġoverride Ġfun Ġsurface Created ( holder : ĠSurface Holder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Source . start ( camera _ surface . holder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreceive Det e ctions ( p 0 : ĠDetector . Det e ctions < Barcode > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġp 0 ?. detected Items ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size () Ġ> Ġ 0 Ġ&& Ġ! is Detected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is Detected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠViewer Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . parse (" medi qr :// view /${ it . value At ( 0 ). raw Value }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT one Generator ( Audio Manager . STREAM _ M US IC , Ġ 1 0 0 ). start Tone ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT one Generator . T ONE _ CD MA _ PIP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Resources Ġbusy ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} Ċ } Ċ