package Ġcom . scanner . sample Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġcom . blank j . util code . util . Bar Utils Ċ import Ġcom . blank j . util code . util . Size Utils Ċ import Ġcom . blank j . util code . util . Toast Utils Ċ import Ġcom . code . scanner . bean . Codec Type Ċ import Ġcom . code . scanner . view . Scan Line View Ċ import Ġcom . scanner . sample . databinding . Activity Scan Binding Ċ import Ġio . reactivex . rx java 3 . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx java 3 . internal . functions . Functions Ċ Ċ /** Ċ Ġ* ĠCreated Ġon Ġ 2 0 2 1 / 0 8 / 0 9 Ċ Ġ* Ċ Ġ* Ġ@ Author Ġli u zh ou ( leo ) Ċ Ġ* Ġ@ Detail Ġ æī« çłģ Demo Ċ Ġ*/ Ċ class ĠScanner Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Scan Binding Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ scan ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcode Type : ĠCodec Type Ġ= ĠCodec Type . QR ĊĠĠĠ Ġvar Ġmode Title : ĠObservable Field < String > Ġ= ĠObservable Field () ĊĠĠĠ Ġval Ġis Torch On Ġ= ĠObservable Boolean ( false ) ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠBar Utils . transparent StatusBar ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . data Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġset Mode Title () ĊĠĠĠĠĠĠĠ Ġset Scan Code Style () ĊĠĠĠĠĠĠĠ Ġstart Scan Camera () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æī« çłģ æ¨¡å¼ı æłĩé¢ĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Mode Title () Ġ{ ĊĠĠĠĠĠĠĠ Ġcode Type Ġ= Ġintent . getInt Extra ( DATA , ĠCodec Type . QR . value ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCodec Type . parse ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( code Type Ġ== ĠCodec Type . BAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" æĿ¡ å½¢ çłģ æī«æıı " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" äºĮ ç»´ çłģ æī« çłģ " ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode Title . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æī« çłģ æ¡Ĩ æł·å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Scan Code Style () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( code Type Ġ== ĠCodec Type . BAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠSize Utils . dp 2 px ( 2 6 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠSize Utils . dp 2 px ( 1 3 3 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Scan Code Style ( width , Ġheight , Ġ 3 0 0 0 , ĠScan Line View . Orientation . HORIZONTAL ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠSize Utils . dp 2 px ( 2 6 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Scan Code Style ( size , Ġsize , Ġ 3 0 0 0 , ĠScan Line View . Orientation . VERTICAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æī« çłģ æ¡Ĩ æł·å¼ı ĊĠĠĠĠ Ġ* Ġ@ param Ġwidth ĠInt ĊĠĠĠĠ Ġ* Ġ@ param Ġheight ĠInt ĊĠĠĠĠ Ġ* Ġ@ param Ġscan Speed ĠLong ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Scan Code Style ( ĊĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġheight : ĠInt , ĊĠĠĠĠĠĠĠ Ġscan Speed : ĠLong , ĊĠĠĠĠĠĠĠ Ġorientation : ĠScan Line View . Orientation ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . scan View . set Sc anning Frame Size ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġbinding . line View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Scan Size ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Orientation ( orientation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scan Speed Ġ= Ġscan Speed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . start ( this @ Scanner Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ æī« çłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Scan Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . scan Camera ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Sounds Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Scan ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Long (" æī« çłģ ç»ĵæŀľ ï¼ļ ${ it }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( Functions . empty Consumer (), ĠFunctions . ERROR _ CON SUM ER ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»İ çĽ¸ åĨĮ éĢīæĭ© äºĮ ç»´ çłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġaction Gallery () Ġ{ ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĩæį¢ æīĭ çĶµ çŃ Ĵ å¼Ģ åħ³ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġaction Switch Torch () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . scan Camera . switch Torch (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Torch On . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ é¡µéĿ¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġaction Finish () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDATA Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠOpen ĠScan Activity ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcodec Type ĠCodec Type ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġstart ( context : ĠContext , Ġcodec Type : ĠCodec Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠScanner Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( DATA , Ġcodec Type . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }