package Ġcom . sup ers uman . mac ron ium Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . camera . core . Camera Selector Ċ import Ġandroidx . camera . core . Image Analysis Ċ import Ġandroidx . camera . core . Image Proxy Ċ import Ġandroidx . camera . core . Preview Ċ import Ġandroidx . camera . lifecycle . Process Camera Provider Ċ import Ġandroidx . camera . view . Preview View Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . google . common . util . concurrent . List enable Future Ċ import Ġcom . google . ml kit . vision . barcode . Barcode Ċ import Ġcom . google . ml kit . vision . barcode . Barcode Scanner Ċ import Ġcom . google . ml kit . vision . barcode . Barcode Scanner Options Ċ import Ġcom . google . ml kit . vision . barcode . Barcode Sc anning Ċ import Ġcom . google . ml kit . vision . common . Input Image Ċ import Ġjava . util . concurrent . Executors ĊĊ Ċ class ĠScanner Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreview View Ġ: ĠPreview View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġscanner Ġ: ĠBar code Scanner ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Provider Future Ġ: ĠList enable Future < Process Camera Provider > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ scanner ) ĊĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( android . Manifest . permission . CAMERA ), 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ: ĠBar code Scanner Options Ġ= ĠBar code Scanner Options . Builder (). set Barcode Formats ( Barcode . FORMAT _ QR _ CODE , Barcode . FORMAT _ AZ TEC ). build () ĊĠĠĠĠĠĠĠ Ġscanner Ġ= ĠBar code Sc anning . getClient ( options ) ĊĊĊĠĠĠĠĠĠĠ Ġcamera Provider Future Ġ= ĠProcess Camera Provider . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġinit Listeners () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Provider Future . addListener ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Provider Ġ: ĠProcess Camera Provider Ġ= Ġcamera Provider Future . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Selector Ġ= ĠCamera Selector . DEFAULT _ BACK _ CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Ġ= ĠPreview . Builder (). build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Surface Provider ( preview View . surface Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Analyzer Ġ= Ġ ĠImage Analysis . Builder (). build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Analyzer ( Executors . new Single Thread Executor (), Scanner Analyzer ( scanner , this )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . target Rotation Ġ= Ġpreview View . display . rotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Provider . unbind All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Provider . bind To Lifecycle ( this , camera Selector Ġ, Ġpreview , Ġimage Analyzer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĠContext Compat . get Main Executor ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġpreview View Ġ= ĠfindViewById ( R . id . preview View ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠScanner Analyzer ( val Ġscanner : ĠBar code Scanner , Ġval Ġscanner Activity : ĠScanner Activity ) Ġ: ĠImage Analysis . Analyzer { ĊĊĠĠĠ Ġ@ Suppress Lint (" Unsafe Opt In Usage Error ") ĊĠĠĠ Ġoverride Ġfun Ġanalyze ( image : ĠImage Proxy ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage 1 Ġ= ĠInput Image . from Media Image ( image . image !! , Ġimage . image Info . rotation Degrees ) ĊĠĠĠĠĠĠĠ Ġscanner . process ( image 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġmutable List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Intent . putExtra (" result ", it . raw Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscanner Activity . set Result ( Activity . RESULT _ OK , Ġreturn Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscanner Activity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }