package Ġcom . mol ko . qrcode scanner Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . DialogInterface . On Dismiss Listener Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . room . Room Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . long Toast Ċ import Ġorg . opencv . android . Camera Bridge View Base . Cv Camera View Frame Ċ import Ġorg . opencv . android . Camera Bridge View Base . Cv Camera View Listener 2 Ċ import Ġorg . opencv . core . Cv Type Ċ import Ġorg . opencv . core . Mat Ċ import Ġorg . opencv . obj detect . QR Code Detector Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠC v Camera View Listener 2 Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġm Permissions : ĠArray < String > ĊĠĠĠ Ġprivate Ġval Ġm Permissions Return Code Ġ= Ġ 1 0 ĊĠĠĠĠĊĠĠĠ Ġlateinit Ġvar Ġm Rg ba : ĠMat ĊĠĠĠĠĊĠĠĠ Ġprivate Ġvar Ġm Detect : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġm Detector : ĠQR Code Detector ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. hide () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ ĠSystem . load Library (" opencv _ java 3 ") ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġm Permissions Ġ= ĠarrayOf ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠ Ġcheck Permissions () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġm Permissions Return Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpermissions Granted Ġ= Ġgrant Results . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( res Ġin Ġgrant Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Granted Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permissions Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Toast ( getString ( R . string . permissions )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpermissions Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfor Ġ( permission Ġin Ġm Permissions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this @ MainActivity , Ġpermission ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Granted Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this @ MainActivity , Ġm Permissions , Ġm Permissions Return Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Camera . set Cv Camera View Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġfab History . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ MainActivity , ĠHistory Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Detector Ġ= ĠQR Code Detector () ĊĠĠĠĠĠĠĠ Ġm Detect Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview Camera . enable View () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġinner Ġclass ĠQR Dialog Dismiss Listener Ġ: ĠOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Dismiss ( dialog : ĠDialog Interface ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Detect Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġon Camera View Started ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Rg ba Ġ= ĠMat ( height , Ġwidth , ĠC v Type . CV _ 8 UC 4 ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġon Camera View Stopped () Ġ{ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġon Camera Frame ( input Frame : ĠC v Camera View Frame ): ĠMat Ġ{ ĊĠĠĠĠĠĠĠ Ġm Rg ba Ġ= Ġinput Frame . rgba () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Detect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġm Detector . detect And Decode ( m Rg ba ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Detect Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow QR Dialog ( this @ MainActivity , Ġtext , ĠQR Dialog Dismiss Listener ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠRoom . database Builder ( application Context , ĠApp Database :: class . java , ĠTABLE _ NAME ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . history Dao (). insert ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Rg ba ĊĠĠĠ Ġ} Ċ } Ċ