package Ġcom . mo yin ol u wa . cam er ab ar code detection Ċ Ċ import Ġandroid . Manifest . permission . CAMERA Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . pm . PackageManager . PERMISSION _ GRAN TED Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . design . widget . Snackbar . LENGTH _ IN DEFIN ITE Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġcom . google . android . gms . common . Connection Result . SUCCESS Ċ import Ġcom . google . android . gms . common . Google Api Availability Ċ import Ġcom . google . android . gms . vision . Camera Source Ċ import Ġcom . google . android . gms . vision . Camera Source . CAMERA _ F ACING _ BACK Ċ import Ġcom . google . android . gms . vision . Detector Ċ import Ġcom . google . android . gms . vision . Multi Processor Ċ import Ġcom . google . android . gms . vision . Tracker Ċ import Ġcom . google . android . gms . vision . barcode . Barcode Ċ import Ġcom . google . android . gms . vision . barcode . Barcode . ALL _ FORMAT S Ċ import Ġcom . google . android . gms . vision . barcode . Barcode Detector Ċ import Ġcom . mo yin ol u wa . cam er ab ar code detection . ui . camera . Camera Source Preview Ċ import Ġcom . mo yin ol u wa . cam er ab ar code detection . ui . camera . Graphic Overlay Ċ import Ġjava . io . IOException Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Barcode Tracker " Ċ private Ġconst Ġval ĠRC _ HANDLE _ G MS Ġ= Ġ 9 0 0 1 Ċ // Ġpermission Ġrequest Ġcodes Ġneed Ġto Ġbe Ġ< Ġ 2 5 6 Ċ private Ġconst Ġval ĠRC _ HANDLE _ CAMERA _ PERM Ġ= Ġ 2 Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Source Preview : ĠCamera Source Preview ĊĠĠĠ Ġlateinit Ġvar Ġgraphic Overlay : ĠGraph ic Overlay ĊĊĠĠĠ Ġprivate Ġvar Ġcamera Source : ĠCamera Source ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġcamera Source Preview Ġ= ĠfindViewById ( R . id . preview ) ĊĠĠĠĠĠĠĠ Ġgraphic Overlay Ġ= ĠfindViewById ( R . id . overlay ) ĊĊĠĠĠĠĠĠĠ Ġ// Check Ġfor Ġthe Ġcamera Ġpermission Ġbefore Ġaccessing Ġthe Ġcamera . Ġ ĠIf Ġthe ĊĠĠĠĠĠĠĠ Ġ// permission Ġis Ġnot Ġgranted Ġyet , Ġrequest Ġpermission . ĊĠĠĠĠĠĠĠ Ġval Ġrc Ġ= ĠActivity Compat . check Self Permission ( this , ĠCAM ERA ) ĊĠĠĠĠĠĠĠ Ġif Ġ( rc Ġ== ĠPER MISSION _ GRAN TED ) Ġcreate Camera Source () Ġelse Ġrequest Camera Permission () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġrequesting Ġof Ġthe Ġcamera Ġpermission . Ġ ĠThis Ġincludes ĊĠĠĠĠ Ġ* Ġshowing Ġa Ġ" Snackbar " Ġmessage Ġof Ġwhy Ġthe Ġpermission Ġis Ġneeded Ġthen ĊĠĠĠĠ Ġ* Ġsending Ġthe Ġrequest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrequest Camera Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Camera Ġpermission Ġis Ġnot Ġgranted . ĠRequest ing Ġpermission ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= ĠarrayOf ( CAMERA ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Activity Compat . should Show Request Permission R ationale ( this , ĠCAM ERA )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions , ĠRC _ HANDLE _ CAMERA _ PERM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions , ĠRC _ HANDLE _ CAMERA _ PERM ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( graphic Overlay , ĠR . string . permission _ camera _ ration ale , ĠLEN GTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġand Ġstarts Ġthe Ġcamera . Ġ ĠNote Ġthat Ġthis Ġuses Ġa Ġhigher Ġresolution Ġin Ġcomparison ĊĠĠĠĠ Ġ* Ġto Ġother Ġdetection Ġexamples Ġto Ġenable Ġthe Ġbarcode Ġdetector Ġto Ġdetect Ġsmall Ġbar codes ĊĠĠĠĠ Ġ* Ġat Ġlong Ġdistances . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Camera Source () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdetector Ġ= ĠBar code Detector . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Barcode Formats ( ALL _ FORMAT S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġdetector . set Processor ( Multi Processor . Builder ( Graphic Barcode Tracker Factory ()). build ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! detector . is Operation al ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote : ĠThe Ġfirst Ġtime Ġthat Ġan Ġapp Ġusing Ġface ĠAPI Ġis Ġinstalled Ġon Ġa Ġdevice , ĠG MS Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdownload Ġa Ġnative Ġlibrary Ġto Ġthe Ġdevice Ġin Ġorder Ġto Ġdo Ġdetection . Ġ ĠUsually Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompletes Ġbefore Ġthe Ġapp Ġis Ġrun Ġfor Ġthe Ġfirst Ġtime . Ġ ĠBut Ġif Ġthat Ġdownload Ġhas Ġnot Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompleted , Ġthen Ġthe Ġabove Ġcall Ġwill Ġnot Ġdetect Ġany Ġfaces . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Operation al () Ġcan Ġbe Ġused Ġto Ġcheck Ġif Ġthe Ġrequired Ġnative Ġlibrary Ġis Ġcurrently ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġavailable . Ġ ĠThe Ġdetector Ġwill Ġautomatically Ġbecome Ġoperational Ġonce Ġthe Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdownload Ġcompletes Ġon Ġdevice . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Barcode Ġdetector Ġdependencies Ġare Ġnot Ġyet Ġavailable .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcamera Source Ġ= ĠCamera Source . Builder ( this , Ġdetector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Facing ( CAMERA _ F ACING _ BACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Focus Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Requested F ps ( 1 5 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe starts Ġthe Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġstart Camera Source () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSto ps Ġthe Ġcamera . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġcamera Source Preview . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRelease s Ġthe Ġresources Ġassociated Ġwith Ġthe Ġcamera Ġsource , Ġthe Ġassociated Ġdetector , Ġand Ġthe ĊĠĠĠĠ Ġ* Ġrest Ġof Ġthe Ġprocessing Ġpipeline . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġcamera Source ?. release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġfor Ġthe Ġresult Ġfrom Ġrequesting Ġpermissions . ĠThis Ġmethod ĊĠĠĠĠ Ġ* Ġis Ġinvoked Ġfor Ġevery Ġcall Ġon Ġ[. request Permissions ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** Note :** ĠIt Ġis Ġpossible Ġthat Ġthe Ġpermissions Ġrequest Ġinteraction ĊĠĠĠĠ Ġ* Ġwith Ġthe Ġuser Ġis Ġinterrupted . ĠIn Ġthis Ġcase Ġyou Ġwill Ġreceive Ġempty Ġpermissions ĊĠĠĠĠ Ġ* Ġand Ġresults Ġarrays Ġwhich Ġshould Ġbe Ġtreated Ġas Ġa Ġcancellation . ĊĠĠĠĠ Ġ* ĊĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code Ġ ĠThe Ġrequest Ġcode Ġpassed Ġin Ġ[. request Permissions ]. ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpermissions Ġ ĠThe Ġrequested Ġpermissions . ĠNever Ġnull . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġgrant Results ĠThe Ġgrant Ġresults Ġfor Ġthe Ġcorresponding Ġpermissions ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhich Ġis Ġeither Ġ[ PackageManager . PERMISSION _ GRAN TED ] ĊĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ[ PackageManager . PERMISSION _ DEN IED ]. ĠNever Ġnull . ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ. request Permissions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ!= ĠRC _ HANDLE _ CAMERA _ PERM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Got Ġunexpected Ġpermission Ġresult : Ġ$ request Code ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPER MISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Camera Ġpermission Ġgranted Ġ- Ġinitialize Ġthe Ġcamera Ġsource ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġpermission , Ġso Ġcreate Ġthe Ġcameras ource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Camera Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Permission Ġnot Ġgranted : Ġresults Ġlen Ġ= Ġ${ grant Results . size } ĠResult Ġcode Ġ= Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġif Ġ( grant Results . isNotEmpty ()) Ġgrant Results [ 0 ] Ġelse Ġ"( empty )") ĊĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> Ġfinish () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Barcode ĠTracker Ġsample ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . no _ camera _ permission ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ================================================================================ ============== ĊĠĠĠ Ġ// ĠCamera ĠSource ĠPreview ĊĠĠĠ Ġ// ================================================================================ ============== ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġor Ġrestart s Ġthe Ġcamera Ġsource , Ġif Ġit Ġexists . Ġ ĠIf Ġthe Ġcamera Ġsource Ġdoesn 't Ġexist Ġyet ĊĠĠĠĠ Ġ* Ġ( e . g ., Ġbecause Ġon Resume Ġwas Ġcalled Ġbefore Ġthe Ġcamera Ġsource Ġwas Ġcreated ), Ġthis Ġwill Ġbe Ġcalled ĊĠĠĠĠ Ġ* Ġagain Ġwhen Ġthe Ġcamera Ġsource Ġis Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Camera Source () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthat Ġthe Ġdevice Ġhas Ġplay Ġservices Ġavailable . ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠGoogle Api Availability . getInstance (). is Google Play Services Available ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( code Ġ!= ĠSUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdlg Ġ= ĠGoogle Api Availability . getInstance (). getError Dialog ( this , Ġcode , ĠRC _ HANDLE _ G MS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdlg . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcamera Source ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Source Preview . start ( it , Ġgraphic Overlay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġstart Ġcamera Ġsource .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Source Preview . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Source Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ================================================================================ ============== ĊĠĠĠ Ġ// ĠGraph ic ĠBar code ĠTracker ĊĠĠĠ Ġ// ================================================================================ ============== ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfor Ġcreating Ġa Ġbarcode Ġtracker Ġto Ġbe Ġassociated Ġwith Ġa Ġnew Ġbarcode . Ġ ĠThe Ġmulti processor ĊĠĠĠĠ Ġ* Ġuses Ġthis Ġfactory Ġto Ġcreate Ġbarcode Ġtrack ers Ġas Ġneeded Ġ-- Ġone Ġfor Ġeach Ġindividual . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠGraph ic Barcode Tracker Factory Ġ: ĠMulti Processor . Factory < Barcode > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( barcode : ĠBar code ): ĠTracker < Barcode > Ġ= ĠGraph ic Barcode Tracker ( graphic Overlay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBar code Ġtracker Ġfor Ġeach Ġdetected Ġindividual . ĠThis Ġmaintains Ġa Ġbarcode Ġgraphic Ġwithin Ġthe Ġapp 's ĊĠĠĠĠ Ġ* Ġassociated Ġbarcode Ġoverlay . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠGraph ic Barcode Tracker Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Overlay : ĠGraph ic Overlay ĊĠĠĠ Ġ) Ġ: ĠTracker < Barcode >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Barcode Graphic : ĠBar code Graphic Ġ= ĠBar code Graphic ( m Overlay ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠStart Ġtracking Ġthe Ġdetected Ġbarcode Ġinstance Ġwithin Ġthe Ġface Ġoverlay . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Item ( barcode Id : ĠInt , Ġitem : ĠBar code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Barcode Graphic . setId ( barcode Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUpdate Ġthe Ġposition / character istics Ġof Ġthe Ġbarcode Ġwithin Ġthe Ġoverlay . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonUpdate ( detection Results : ĠDetector . Det e ctions < Barcode >, Ġbarcode : ĠBar code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Overlay . add ( m Barcode Graphic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Barcode Graphic . update Barcode ( barcode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHide Ġthe Ġgraphic Ġwhen Ġthe Ġcorresponding Ġbarcode Ġwas Ġnot Ġdetected . Ġ ĠThis Ġcan Ġhappen Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġintermediate Ġframes Ġtemporarily Ġ( e . g ., Ġif Ġthe Ġbarcode Ġwas Ġmoment arily Ġblocked Ġfrom ĊĠĠĠĠĠĠĠĠ Ġ* Ġview ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Missing ( detection Results : ĠDetector . Det e ctions < Barcode >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Overlay . remove ( m Barcode Graphic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġbarcode Ġis Ġassumed Ġto Ġbe Ġgone Ġfor Ġgood . ĠRemove Ġthe Ġgraphic Ġannotation Ġfrom ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġoverlay . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Done () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Overlay . remove ( m Barcode Graphic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }