/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 2 , Ġ 2 0 1 3 , Ġ 2 0 1 4 , Ġ 2 0 1 5 ĠRen ard ĠWell n itz . Ċ Ġ* ĠĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ċ Ġ* Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ċ Ġ* Ġthe ĠLicense Ġat Ċ Ġ* ĠĊ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT Ċ Ġ* ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe Ċ Ġ* ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ċ Ġ* Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . ren ard . ocr . documents . creation . visual isation Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Remote Exception Ċ import Ġandroid . support . annotation . Nullable Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Toast Ċ import Ġbutter knife . BindView Ċ import Ġbutter knife . B utter Kn ife Ċ import Ġcom . google code . le pton ica . android . Pix Ċ import Ġcom . google code . t esseract . android . OCR Ċ import Ġcom . google code . t esseract . android . O cr Progress Ċ import Ġcom . google code . t esseract . android . Preview Picture Ċ import Ġcom . ren ard . ocr . Mon itored Activity Ċ import Ġcom . ren ard . ocr . Permission Granted Event Ċ import Ġcom . ren ard . ocr . R Ċ import Ġcom . ren ard . ocr . Text F air y Application Ċ import Ġcom . ren ard . ocr . documents . creation . New Document Activity Ċ import Ġcom . ren ard . ocr . documents . creation . visual isation . Layout Question Dialog . Layout Ch ose Listener Ċ import Ġcom . ren ard . ocr . documents . creation . visual isation . Layout Question Dialog . Layout Kind Ċ import Ġcom . ren ard . ocr . documents . view ing . Document Content Provider Ċ import Ġcom . ren ard . ocr . documents . view ing . Document Content Provider . Columns Ċ import Ġcom . ren ard . ocr . documents . view ing . grid . Document Grid Activity Ċ import Ġcom . ren ard . ocr . documents . view ing . single . Document Activity Ċ import Ġcom . ren ard . ocr . util . Screen Ċ import Ġcom . ren ard . ocr . util . Util Ċ import Ġde . green robot . event . EventBus Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ private Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" O cr Activity " ĊĊ Ċ /** Ċ Ġ* Ġthis Ġactivity Ġis Ġshown Ġduring Ġthe Ġocr Ġprocess Ċ Ġ* Ċ Ġ* Ġ@ author Ġren ard Ċ Ġ*/ Ċ class ĠO CR Activity Ġ: ĠMon itored Activity (), ĠLayout Ch ose Listener Ġ{ ĊĊĠĠĠ Ġ@ BindView ( R . id . column _ pick _ completed ) ĊĠĠĠ Ġlateinit Ġvar Ġm Button Start OCR : ĠButton ĊĠĠĠ Ġ@ BindView ( R . id . progress _ image ) ĊĠĠĠ Ġlateinit Ġvar Ġm ImageView : ĠO CR ImageView ĊĊĠĠĠ Ġprivate Ġvar Ġm O cr Language : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm OCR : ĠO CR ĊĠĠĠ Ġprivate Ġvar Ġm Parent Id Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠScreen . lock Orientation ( this ) ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġnative Pix Ġ= Ġintent . getLong Extra ( Document Grid Activity . EXTRA _ NATIVE _ PIX , Ġ- 1 ) ĊĊĠĠĠĠ Ġ// ĠĠ Ġval Ġm Upload Image Ġ= Ġintent . getBoolean Extra ( New Document Activity . UPLOAD _ IMAGE , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġm Parent Id Ġ= Ġintent . getInt Extra ( EXTRA _ PARENT _ DOCUMENT _ ID , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠExtract Ġthe Ġvalue Ġof ĠUP LOAD _ IMAGE Ġfrom Ġthe Ġreceived Ġintent Ġhere Ġand Ġassign Ġit Ġto ĊĠĠĠĠĠĠĠ Ġ* ĠĠ Ġthe Ġboolean Ġvariable Ġm Upload Image Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġm OCR Ġ= ĠViewModel Providers . of ( this , Ġobject Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠO CR ( Pix ( native Pix ), Ġapplication Ġas ĠText F air y Application ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}). get ( OCR :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ ocr ) ĊĠĠĠĠĠĠĠ ĠB utter Kn ife . bind ( this ) ĊĠĠĠĠĠĠĠ Ġinit Toolbar () ĊĠĠĠĠĠĠĠ Ġensure Permission ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE , ĠR . string . permission _ explanation ) ĊĠĠĠĠĠĠĠ Ġm OCR . get O cr Progress (). observe ( this , ĠObserver < O cr Progress > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO cr Progress . Message Ġ-> Ġset Toolbar Message ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO cr Progress . Layout Elements Ġ-> Ġon Layout Elements ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO cr Progress . Progress Ġ-> Ġon Progress ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO cr Progress . Result Ġ-> Ġon Re cogn ised Text ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO cr Progress . Error Ġ-> ĠonError ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm OCR . get Preview P ictures (). observe ( this , ĠObserver < Preview Picture > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Picture ( it ?. bitmap ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonError ( it : ĠO cr Progress . Error ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , ĠgetText ( it . message ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ ĠScreen . unlock Orientation ( this @ OCR Activity ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Re cogn ised Text ( it : ĠO cr Progress . Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave Document ( it . native Pix , Ġit . h ocr Text , Ġit . utf 8 Text , Ġit . accuracy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Layout Elements ( it : ĠO cr Progress . Layout Elements ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġm ImageView . setImage Rects ( it . image Bounds ) ĊĠĠĠĠĠĠĠ Ġm ImageView . setText Rects ( it . column Bounds ) ĊĊĠĠĠĠĠĠĠ Ġm Button Start OCR . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm Button Start OCR . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Texts Ġ= Ġm ImageView . selected Text Indexes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Images Ġ= Ġm ImageView . selected Image Indexes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Texts . isNotEmpty () Ġ|| Ġselected Images . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analytics . send Screen View (" O cr ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ImageView . clear All Progress Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm OCR . start OCR For Complex Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ OCR Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm O cr Language !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . columns , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . images , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Texts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Images ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Button Start OCR . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . please _ tap _ on _ column , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Analytics . send Screen View (" Pick ĠColumns ") ĊĊĠĠĠĠĠĠĠ Ġset Toolbar Message ( R . string . progress _ choose _ columns ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Progress ( it : ĠO cr Progress . Progress ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm ImageView . set Progress ( it . percent , Ġit . word Bounds , Ġit . page Bounds ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġfun Ġon Event MainThread ( event : ĠPermission Granted Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġask User About Document Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout Ch osen ( layout Kind : ĠLayout Kind , Ġocr Language : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Kind Ġ== ĠLayout Kind . DO _ NOTH ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// save Document ( m Native Pix , Ġnull , Ġnull , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm O cr Language Ġ= Ġocr Language ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Toolbar Message ( R . string . progress _ start ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Kind Ġ== ĠLayout Kind . SIMPLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analytics . send Screen View (" O cr ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm OCR . start OCR For Simple Layout ( this @ OCR Activity , Ġocr Language , Ġm ImageView . width , Ġm ImageView . height , Ġintent . getBoolean Extra ( New Document Activity . UPLOAD _ IMAGE , Ġfalse ) /* Add Ġone Ġextra Ġargument Ġhere Ġm Image Upload */) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( layout Kind Ġ== ĠLayout Kind . COMPLEX ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm OCR . start Layout Analysis ( m ImageView . width , Ġm ImageView . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpreview Picture ( bitmap : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm ImageView . setImage Bitmap Reset Base ( bitmap , Ġtrue , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Document ( pix : ĠLong , Ġh ocr String : ĠString ?, Ġutf 8 String : ĠString ?, Ġaccuracy : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠUtil . start Background Job ( this @ OCR Activity , Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetText ( R . string . saving _ document ). toString (), Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimage File : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdocument Uri : ĠUri ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage File Ġ= Ġsave Image ( pix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetText ( R . string . error _ create _ file ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Uri Ġ= Ġsave Document To DB ( image File , Ġh ocr String , Ġutf 8 String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . create Thumbnail ( this @ OCR Activity , Ġimage File , ĠInteger . valueOf ( document Uri !!. last Path Segment )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRemoteException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetText ( R . string . error _ create _ file ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Uri Ġ!= Ġnull Ġ&& Ġ! is Finish ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this @ OCR Activity , ĠDocument Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Document Activity . EXTRA _ AC CUR ACY , Ġaccuracy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Document Activity . EXTRA _ LANGUAGE , Ġm O cr Language ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdocument Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScreen . unlock Orientation ( this @ OCR Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĠHandler ()) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġsave Image ( p : ĠLong ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠDate Format . format (" ss mm hh dd MM yy ", ĠDate ( System . currentTimeMillis ())) ĊĠĠĠĠĠĠĠ Ġreturn ĠUtil . save Pix To SD ( Pix ( p ), Ġid . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Remote Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġsave Document To DB ( image File : ĠFile ?, Ġh ocr : ĠString ?, Ġplain Text : ĠString ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= Ġcontent Resolver . acquire Content Provider Client ( Document Content Provider . CONTENT _ URI ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclient . insert ( Document Content Provider . CONTENT _ URI , ĠContent Values (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Document Content Provider . Columns . PH OTO _ PATH , Ġimage File . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( h ocr Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Columns . HO CR _ TEXT , Ġh ocr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plain Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Columns . OCR _ TEXT , Ġplain Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Parent Id Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Columns . PARENT _ ID , Ġm Parent Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Columns . OCR _ LANG , Ġm O cr Language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Hint Dialog Id () Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġfun Ġask User About Document Layout () Ġ{ ĊĠĠĠĠĠĠĠ ĠLayout Question Dialog . newInstance (). show ( support FragmentManager , ĠLayout Question Dialog . TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . putString ( OCR _ LANGUAGE , Ġm O cr Language ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m O cr Language Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm O cr Language Ġ= ĠsavedInstanceState . getString ( OCR _ LANGUAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Screen Name () Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) ĊĠĠĠĠĠĠĠ Ġm ImageView . clear () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ PARENT _ DOCUMENT _ ID Ġ= Ġ" parent _ id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠO CR _ LANGUAGE Ġ= Ġ" ocr _ language " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ USE _ ACC ES SI B ILITY _ MODE Ġ= Ġ" ACC ES SI B IL TY _ MODE " ĊĠĠĠ Ġ} Ċ } Ċ