/// ************************************************************************ ******* Ċ // Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġby ĠMax ĠL v Ġ< max . c . lv @ gmail . com > ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġby ĠMy god ĠStudio Ġ< contact - shadow socks - android @ my god . be > Ġ Ġ* Ċ // Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify ĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby ĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor ĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , ĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense ĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ* Ġ Ġalong Ġwith Ġthis Ġprogram . ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. ĠĠĠĠĠĠ Ġ* Ċ // Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ // Ġ************************************************************************* ******/ Ċ // Ċ // package Ġcom . str atag ile . q link . shadow socks Ċ // Ċ // import Ġandroid . app . Activity Ċ // import Ġandroid . content . Intent Ċ // import Ġandroid . content . pm . Shortcut Manager Ċ // import Ġandroid . hardware . camera 2 . Camera AccessException Ċ // import Ġandroid . hardware . camera 2 . Camera Manager Ċ // import Ġandroid . os . Build Ċ // import Ġandroid . os . Bundle Ċ // import Ġandroid . support . v 4 . app . Nav Utils . should Up Re create Task Ċ // import Ġandroid . support . v 4 . app . Task Stack Builder Ċ // import Ġandroid . support . v 7 . app . AppCompatActivity Ċ // import Ġandroid . support . v 7 . widget . Toolbar Ċ // import Ġandroid . util . Log Ċ // import Ġandroid . util . Sparse Array Ċ // import Ġandroid . view . MenuItem Ċ // import Ġandroid . widget . Toast Ċ //// import Ġandroidx . appcompat . app . AppCompatActivity Ċ //// import Ġandroidx . appcompat . widget . Toolbar Ċ //// import Ġandroidx . core . app . Task Stack Builder Ċ //// import Ġandroidx . core . content . getSystem Service Ċ // import Ġandroidx . core . util . forEach Ċ // import Ġcom . crash ly t ics . android . Crash ly t ics Ċ //// import Ġcom . github . shadow socks . App . Companion . app Ċ //// import Ġcom . github . shadow socks . database . Profile Ċ //// import Ġcom . github . shadow socks . database . Profile Manager Ċ //// import Ġcom . github . shadow socks . utils . datas Ċ //// import Ġcom . github . shadow socks . utils . open Bitmap Ċ //// import Ġcom . github . shadow socks . utils . print Log Ċ //// import Ġcom . github . shadow socks . utils . resolve ResourceId Ċ // import Ġcom . google . android . gms . common . Google Api Availability Ċ // import Ġcom . google . android . gms . samples . vision . bar coder e ader . Barcode Capture Ċ // import Ġcom . google . android . gms . samples . vision . bar coder e ader . Barcode Graphic Ċ // import Ġcom . google . android . gms . vision . Frame Ċ // import Ġcom . google . android . gms . vision . barcode . Barcode Ċ // import Ġcom . google . android . gms . vision . barcode . Barcode Detector Ċ // import Ġcom . str atag ile . q link . R Ċ // import Ġcom . str atag ile . q link . R . string . finish Ċ // import Ġcom . str atag ile . q link . application . AppConfig Ċ // import Ġcom . str atag ile . q link . shadow socks . database . Profile Ċ // import Ġcom . str atag ile . q link . shadow socks . database . Profile Manager Ċ // import Ġcom . str atag ile . q link . shadow socks . utils . datas Ċ // import Ġcom . str atag ile . q link . shadow socks . utils . open Bitmap Ċ // import Ġcom . str atag ile . q link . shadow socks . utils . print Log Ċ // import Ġcom . str atag ile . q link . shadow socks . utils . resolve ResourceId Ċ // import Ġxyz . bel vi . mobile vision barcode scanner . Barcode Retriever Ċ // Ċ // class ĠScanner Activity Ġ: ĠAppCompatActivity (), ĠToolbar . On MenuItem ClickListener , ĠBar code Retriever Ġ{ Ċ // ĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Scanner Activity " Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ IMPORT Ġ= Ġ 2 Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ IMPORT _ OR _ FIN ISH Ġ= Ġ 3 Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ GOOGLE _ API Ġ= Ġ 4 Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġlateinit Ġvar Ġdetector : ĠBar code Detector Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġnavigate Up () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġparent Activity Intent Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( should Up Re create Task ( intent ) Ġ|| Ġis Task Root ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠTask Stack Builder . create ( this ). add Next Intent With Parent Stack ( intent ). start Activities () Ċ // ĠĠĠĠĠĠĠ Ġelse Ġfinish () Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) Ċ // ĠĠĠĠĠĠĠ Ġdetector Ġ= ĠBar code Detector . Builder ( this ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Barcode Formats ( Barcode . QR _ CODE ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! detector . is Operation al ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailability Ġ= ĠGoogle Api Availability . getInstance () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġavailability . getError Dialog ( this , Ġavailability . is Google Play Services Available ( this ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ GOOGLE _ API ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dialog Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . common _ google _ play _ services _ notification _ ticker , ĠToast . LENGTH _ SHORT ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setOn Dismiss Listener Ġ{ Ġfinish () Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 5 ) Ġget System Service < Shortcut Manager >() !!. report Shortcut Used (" scan ") Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( try Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service < Camera Manager >() ?. camera IdList ?. isEmpty () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠCamera AccessException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= Ġfalse ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstart Import () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . layout _ scanner ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) Ċ // ĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġtitle Ċ // ĠĠĠĠĠĠĠ Ġtoolbar . set Navigation Icon ( theme . resolve ResourceId ( R . attr . home As Up Indicator )) Ċ // ĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ Ġnavigate Up () Ġ} Ċ // ĠĠĠĠĠĠĠ Ġtoolbar . inflate Menu ( R . menu . scanner _ menu ) Ċ // ĠĠĠĠĠĠĠ Ġtoolbar . setOn MenuItem ClickListener ( this ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġcapture Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . barcode ) Ġas ĠBar code Capture Ċ // ĠĠĠĠĠĠĠ Ġcapture . set Custom Detector ( detector ) Ċ // ĠĠĠĠĠĠĠ Ġcapture . set Retrie val ( this ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġon Retrie ved ( barcode : ĠBar code ) Ġ= Ġrun On Ui Thread Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠProfile . findAll Urls ( barcode . raw Value , ĠApp Config . instance . current Profile ). forEach Ġ{ ĠProfile Manager . create Profile ( it ) Ġ} Ċ // ĠĠĠĠĠĠĠ Ġnavigate Up () Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġoverride Ġfun Ġon Retrie ved Multiple ( clo set To Click : ĠBar code ?, Ġbarcode : ĠMutable List < Barcode Graphic > ?) Ġ= Ġcheck ( false ) Ċ // ĠĠĠ Ġoverride Ġfun Ġon Bitmap Sc anned ( sparse Array : ĠSparse Array < Barcode > ?) Ġ{ Ġ} Ċ // ĠĠĠ Ġoverride Ġfun Ġon Retrie ved Failed ( reason : ĠString ?) Ġ= ĠCrash ly t ics . log ( Log . WARN , ĠTAG , Ġreason ) Ċ // ĠĠĠ Ġoverride Ġfun Ġon Permission Request Denied () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . add _ profile _ scanner _ permission _ required , ĠToast . LENGTH _ SHORT ). show () Ċ // ĠĠĠĠĠĠĠ Ġstart Import () Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġon MenuItem Click ( item : ĠMenuItem ) Ġ= Ġwhen Ġ( item . itemId ) Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠR . id . action _ import _ clipboard Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstart Import ( true ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġstart Import ( manual : ĠBoolean Ġ= Ġfalse ) Ġ= ĠstartActivity For Result ( Intent ( Intent . ACTION _ GET _ CONTENT ). apply Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ OP ENABLE ) Ċ // ĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" image /* " Ċ // ĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ ALLOW _ MULTIPLE , Ġtrue ) Ċ // ĠĠĠ Ġ}, Ġif Ġ( manual ) ĠREQUEST _ IMPORT Ġelse ĠREQUEST _ IMPORT _ OR _ FIN ISH ) Ċ // ĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ IMPORT , ĠREQUEST _ IMPORT _ OR _ FIN ISH Ġ-> Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= ĠApp Config . instance . current Profile Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uri Ġin Ġdata !!. datas ) Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . detect ( Frame . Builder (). set Bitmap ( content Resolver . open Bitmap ( uri )). build ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ_, Ġbarcode Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile . findAll Urls ( barcode . raw Value , Ġfeature ). forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Manager . create Profile ( it ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Log ( e ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġif Ġ( success ) ĠR . string . action _ import _ msg Ġelse ĠR . string . action _ import _ err , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Up () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠREQUEST _ IMPORT _ OR _ FIN ISH ) Ġnavigate Up () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ //} Ċ