@ file : Suppress (" UNUSED _ PARAMETER ") Ċ Ċ package Ġdev . ent ao . kan . qr . camera Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . WindowManager Ċ import Ġcom . google . zx ing . Result Point Ċ import Ġdev . ent ao . kan . app base . Task Ċ import Ġdev . ent ao . kan . qr . QR Config Ċ import Ġdev . ent ao . kan . qr . R Ċ Ċ /** Ċ Ġ* ĠMan ages Ġbarcode Ġscanning Ġfor Ġa ĠCapture Activity . ĠThis Ġclass Ġmay Ġbe Ġused Ġto Ġhave Ġa Ġcustom ĠActivity Ċ Ġ* Ġ( e . g . Ġwith Ġa Ġcustomized Ġlook Ġand Ġfeel , Ġor Ġa Ġdifferent Ġsuperclass ), Ġbut Ġnot Ġthe Ġbarcode Ġscanning Ċ Ġ* Ġprocess Ġitself . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġintended Ġfor Ġan ĠActivity Ġthat Ġis Ġdedicated Ġto Ġcapturing Ġa Ġsingle Ġbarcode Ġand Ġreturning Ċ Ġ* Ġit Ġvia Ġset Result (). ĠFor Ġother Ġuse Ġcases , Ġuse ĠDefault Barcode Scanner View Ġor ĠBar code View Ġdirectly . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe Ġfollowing Ġis Ġmanaged Ġby Ġthis Ġclass : Ċ Ġ* Ġ- ĠOrientation Ġlock Ċ Ġ* Ġ- ĠIn activity Timer Ċ Ġ* Ġ- ĠBe ep Manager Ċ Ġ* Ġ- ĠInitial izing Ġfrom Ġan ĠIntent Ġ( via ĠIntent Integr ator ) Ċ Ġ* Ġ- ĠSetting Ġthe Ġresult Ġand Ġfinish ing Ġthe ĠActivity Ġwhen Ġa Ġbarcode Ġis Ġscanned Ċ Ġ* Ġ- ĠDisplay ing Ġcamera Ġerrors Ċ Ġ*/ Ċ class ĠCapture Manager ( private Ġval Ġactivity : ĠActivity , Ġprivate Ġval Ġbarcode View : ĠCamera View ) Ġ: ĠCamera Preview . State Listener , ĊĠĠĠ ĠBar code Callback Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġorientation Lock Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ UNSPECIFIED ĊĊĠĠĠ Ġprivate Ġvar Ġdestroyed Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġin activity Timer : ĠIn activity Timer Ġ= ĠIn activity Timer ( activity , ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġval Ġbe ep Manager : ĠBe ep Manager Ġ= ĠBe ep Manager ( activity ) ĊĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler () ĊĊĠĠĠ Ġvar Ġon Result : Ġ( Barcode Result ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġvar Ġon Finish : Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . window . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠĠĠĠĠ Ġbarcode View . barcode View . add State Listener ( this ) ĊĠĠĠĠĠĠĠ Ġlock Orientation () ĊĠĠĠĠĠĠĠ Ġbe ep Manager . is Be ep Enabled Ġ= ĠQR Config . be ep ĊĠĠĠĠĠĠĠ Ġbe ep Manager . update Prefs () ĊĠĠĠĠĠĠĠ Ġif Ġ( QR Config . timeout Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠQR Config . timeout . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLock Ġdisplay Ġto Ġcurrent Ġorientation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġlock Orientation () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġget Ġthe Ġorientation Ġif Ġit 's Ġnot Ġlocked Ġto Ġone Ġyet . ĊĠĠĠĠĠĠĠ Ġif Ġ( this . orientation Lock Ġ== ĠActivity Info . SCREEN _ OR IENTATION _ UNSPECIFIED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdapt ed Ġfrom Ġhttp :// stackoverflow . com / a / 1 4 5 6 5 4 3 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġactivity . window Manager . default Display ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= Ġdisplay . rotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Orientation Ġ= Ġactivity . resources . configuration . orientation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation : ĠInt Ġ= Ġif Ġ( base Orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rotation Ġ== ĠSurface . ROT ATION _ 0 Ġ|| Ġrotation Ġ== ĠSurface . ROT ATION _ 9 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Info . SCREEN _ OR IENTATION _ LAND SC APE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Info . SCREEN _ OR IENTATION _ RE VERSE _ LAND SC APE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( base Orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rotation Ġ== ĠSurface . ROT ATION _ 0 Ġ|| Ġrotation Ġ== ĠSurface . ROT ATION _ 2 7 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Info . SCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Info . SCREEN _ OR IENTATION _ RE VERSE _ POR TRA IT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . orientation Lock Ġ= Ġorientation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// no inspection ĠResource Type ĊĠĠĠĠĠĠĠ Ġactivity . requested Orientation Ġ= Ġthis . orientation Lock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreview Sized () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreview Started () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreview Stopped () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcamera Error ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay Framework Bug Message And Exit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbarcode Result ( result : ĠBar code Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbarcode View . on Pause () ĊĠĠĠĠĠĠĠ Ġbe ep Manager . play Be ep Sound And V ibrate () ĊĊĠĠĠĠĠĠĠ ĠTask . fore Delay ( DELAY _ B EE P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Result ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpossible Result Points ( result Points : ĠList < Result Point >) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdecode () Ġ{ ĊĠĠĠĠĠĠĠ Ġbarcode View . decode Single ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera With Permission () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbarcode View . on Resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbe ep Manager . update Prefs () ĊĠĠĠĠĠĠĠ Ġin activity Timer . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġasked Permission Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Target Api ( 2 3 ) ĊĠĠĠ Ġprivate Ġfun Ġopen Camera With Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . check Self Permission ( Manifest . permission . CAMERA ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbarcode View . on Resume () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! ask ed Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . request Permissions ( array Of ( Manifest . permission . CAMERA ), Ġcamera Permission Req Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasked Permission Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWait Ġfor Ġpermission Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġcamera Permission Req Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbarcode View . on Resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Framework Bug Message And Exit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġbarcode View . on Pause () ĊĠĠĠĠĠĠĠ Ġin activity Timer . cancel () ĊĠĠĠĠĠĠĠ Ġbe ep Manager . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġdestroyed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġin activity Timer . cancel () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Int ( SA VED _ OR IENTATION _ LOCK , Ġthis . orientation Lock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Finish () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Framework Bug Message And Exit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . is Finish ing Ġ|| Ġthis . destroy ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( activity ) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle ( activity . getString ( R . string . zx ing _ app _ name )) ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage ( activity . getString ( R . string . zx ing _ msg _ camera _ framework _ bug )) ĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button ( R . string . zx ing _ button _ ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġfinish () Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . setOn Cancel Listener Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġcamera Permission Req Code Ġ= Ġ 2 5 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS AV ED _ OR IENTATION _ LOCK Ġ= Ġ" SA VED _ OR IENTATION _ LOCK " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEL AY _ B EE P : ĠLong Ġ= Ġ 1 5 0 ĊĊĊĠĠĠ Ġ} Ċ } Ċ