package Ġcom . peng ke . paper . scanner . scan Ċ Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Display Ċ import Ġandroid . view . Surface View Ċ import Ġcom . peng ke . paper . scanner . R Ċ import Ġcom . peng ke . paper . scanner . base . Base Activity Ċ import Ġcom . peng ke . paper . scanner . view . Paper Rectangle Ċ Ċ import Ġkotlinx . android . synt hetic . main . activity _ scan .* Ċ import Ġorg . opencv . android . OpenCV Loader Ċ Ċ class ĠScan Activity Ġ: ĠBase Activity (), ĠI Scan View . Proxy Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠREQUEST _ CAMERA _ PERMISSION Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠEXIT _ TIME Ġ= Ġ 2 0 0 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Presenter : ĠScan Presenter ĊĠĠĠ Ġprivate Ġvar Ġlatest Back Press Time : ĠLong Ġ= Ġ 0 ĊĊĊĠĠĠ Ġoverride Ġfun Ġprovide ContentView Id (): ĠInt Ġ= ĠR . layout . activity _ scan ĊĊĠĠĠ Ġoverride Ġfun Ġinit Presenter () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Presenter Ġ= ĠScan Presenter ( this , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! OpenCV Loader . init Debug ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" loading Ġopen cv Ġerror , Ġexit ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , Ġandroid . Manifest . permission . CAMERA ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( this , Ġandroid . Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( android . Manifest . permission . CAMERA , Ġandroid . Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĠREQUEST _ CAMERA _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Context Compat . check Self Permission ( this , Ġandroid . Manifest . permission . CAMERA ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( android . Manifest . permission . CAMERA ), ĠREQUEST _ CAMERA _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Context Compat . check Self Permission ( this , Ġandroid . Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( android . Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĠREQUEST _ CAMERA _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshut . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter . sh ut () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlatest Back Press Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġm Presenter . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġm Presenter . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexit () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis (). minus ( latest Back Press Time ) Ġ> ĠEXIT _ TIME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( R . string . press _ again _ logout ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlatest Back Press Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CAMERA _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( grant Results [ permissions . indexOf ( android . Manifest . permission . CAMERA )] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( R . string . camera _ grant ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter . init Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Presenter . update Camera () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Display (): ĠDisplay Ġ= Ġwindow Manager . default Display ĊĊĠĠĠ Ġoverride Ġfun Ġget Surface View (): ĠSurface View Ġ= Ġsurface ĊĊĠĠĠ Ġoverride Ġfun Ġget Paper Rect (): ĠPaper Rectangle Ġ= Ġpaper _ rect Ċ }