package Ġcom . h se . vas ili y . b cre cognition Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Ċ import Ġandroid . net . Network Capabilities Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . google . android . material . navigation . Navigation View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Switch Ċ import Ġandroidx . appcompat . view . Action Mode Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . recyclerview . selection . Selection Tracker Ċ import Ġcom . h se . vas ili y . b cre cognition . gallery .* Ċ import Ġcom . h se . vas ili y . b cre cognition . gallery . editing . Editing Fragment Ċ import Ġcom . h se . vas ili y . b cre cognition . gallery . editing . Initial Editing Fragment Ċ import Ġcom . h se . vas ili y . b cre cognition . gallery . editing . Saved Card Editing Fragment Ċ import Ġcom . h se . vas ili y . b cre cognition . helper _ dialogs . Confirmation Dialog Ċ import Ġcom . h se . vas ili y . b cre cognition . helper _ dialogs . Error Dialog Ċ import Ġcom . h se . vas ili y . b cre cognition . recognition . Camera Fragment Ċ import Ġcom . h se . vas ili y . b cre cognition . recognition . Recognition Fragment Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . app _ bar _ main .* Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException ĊĊ Ċ class ĠMainActivity Ġ: ĊĠĠĠ ĠAppCompatActivity (), ĊĠĠĠ ĠNavigation View . On Navigation ItemSelected Listener , ĊĠĠĠ ĠConfirm ation Dialog . Confirmation Dialog Listener , ĊĠĠĠ ĠCard Gallery Fragment . On List Fragment Interaction Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontainer : ĠFrame Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfragment Manager : ĠFragment Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcamera Fragment : ĠCamera Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrecognition Fragment : ĠRecognition Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings Fragment : ĠSettings Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgallery Fragment : ĠCard Gallery Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontact Info Fragment : ĠContact Info Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġediting Fragment : ĠEdit ing Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinit Editing Fragment : ĠInitial Editing Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepeated Editing Fragment : ĠSaved Card Editing Fragment ĊĊĠĠĠ Ġprivate Ġval Ġactivity Tag Ġ= Ġ" MAIN _ ACTIVITY " ĊĊĠĠĠ Ġprivate Ġvar Ġaction Mode : ĠAction Mode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpermissions Requested Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Dialog Positive Click ( dialog Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( dialog Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . PERMISSION _ RATION ALE . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ START UP _ PERMISSION S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . NETWORK _ SWITCH _ ON LINE _ NOTIFICATION . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Navigation View >( R . id . nav _ view ). menu . find Item ( R . id . nav _ offline _ switch ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction View . findViewById < Switch >( R . id . offline _ switch ). isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Recognition () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . NETWORK _ SWITCH _ OFF LINE _ NOTIFICATION . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Navigation View >( R . id . nav _ view ). menu . find Item ( R . id . nav _ offline _ switch ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction View . findViewById < Switch >( R . id . offline _ switch ). isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Recognition () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dialog Negative Click ( dialog Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( dialog Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . PERMISSION _ RATION ALE . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( activity Tag , Ġ" User Ġdecl ines Ġapps Ġpermissions ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . NETWORK _ SWITCH _ ON LINE _ NOTIFICATION . ordinal Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Recognition () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon List Fragment Interaction ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Contact Info ( pos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Selected Items Changed ( tracker : ĠSelection Tracker < Long >, Ġadapter : ĠC ards RecyclerView Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tracker . has Selection () Ġ&& Ġaction Mode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġstart Support Action Mode ( ActionBar Overlay ( tracker , Ġadapter )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetSelected Title ( tracker . selection . size ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! tracker . has Selection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Mode Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetSelected Title ( tracker . selection . size ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetSelected Title ( selected : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Mode ?. title Ġ= Ġ" Selected : Ġ$ selected " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit AuthToken () ĊĠĠĠĠĠĠĠ Ġset Theme ( R . style . App Theme ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġcontainer Ġ= ĠfindViewById ( R . id . fragment _ container ) ĊĠĠĠĠĠĠĠ Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġcamera Fragment Ġ= ĠCamera Fragment () ĊĠĠĠĠĠĠĠ Ġrecognition Fragment Ġ= ĠRecognition Fragment () ĊĠĠĠĠĠĠĠ Ġsettings Fragment Ġ= ĠSettings Fragment () ĊĠĠĠĠĠĠĠ Ġgallery Fragment Ġ= ĠCard Gallery Fragment () ĊĠĠĠĠĠĠĠ Ġcontact Info Fragment Ġ= ĠContact Info Fragment () ĊĠĠĠĠĠĠĠ Ġinit Editing Fragment Ġ= ĠInitial Editing Fragment () ĊĠĠĠĠĠĠĠ Ġrepeated Editing Fragment Ġ= ĠSaved Card Editing Fragment () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . add ( R . id . fragment _ container , Ġcamera Fragment , ĠCAM ERA _ FRAGMENT _ TAG ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġval Ġtoggle Ġ= ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġdrawer _ layout , Ġtoolbar , ĠR . string . navigation _ drawer _ open , ĠR . string . navigation _ drawer _ close ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdrawer _ layout . add Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠ Ġtoggle . sync State () ĊĊĠĠĠĠĠĠĠ Ġnav _ view . set Navigation ItemSelected Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġmodule Mode Pre paration () ĊĊĠĠĠĠĠĠĠ Ġ// Need Ġto Ġrequest Ġpermission Ġon Ġfirst Ġlaunch ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( application Context , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Startup Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Check Ġthat Ġstorage Ġis Ġavailable ĊĠĠĠĠĠĠĠ Ġcheck External Storage Writable () ĊĠĠĠĠĠĠĠ Ġcopy Tess er act Files On Storage () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drawer _ layout . is Drawer Open ( Gravity Compat . START )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer _ layout . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigation ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ camera Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ settings Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ gallery Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Gallery () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ offline _ switch Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . nav _ share Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrawer _ layout . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck External Storage Writable () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Environment . get External Storage State () Ġ!= ĠEnvironment . MEDIA _ MOUNT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( getString ( R . string . external _ storage _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠERROR _ DIALOG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Tess er act Files On Storage () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// create Ġt esseract Ġdirectory Ġif Ġit Ġstill Ġnot Ġexist ĊĠĠĠĠĠĠĠ Ġval Ġdir Name Ġ= Ġ"${ application Context . get External Files Dir ( null ) }/ $ TES SER ACT _ SAMPLES _ PATH " ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( dir Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! dir . mkdir s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance ( getString ( R . string . external _ storage _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠERROR _ DIALOG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// copy Ġfiles Ġitself ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile List Ġ= Ġassets . list ( TES SER ACT _ AS SETS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fileName Ġin Ġfile List !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Ġ= Ġ"$ dir Name /$ fileName " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! File ( dst ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġassets . open ("$ TES SER ACT _ AS SETS /$ fileName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠFileOutputStream ( dst ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlen Ġ= Ġinput . read ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( len Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( buf , Ġ 0 , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġinput . read ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog . newInstance ( getString ( R . string . external _ storage _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠERROR _ DIALOG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit AuthToken () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠGoogle AccessToken Loader ( application Context ) ĊĠĠĠĠĠĠĠ Ġtask . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Camera (){ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA _ FRAGMENT _ TAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Settings (){ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSET T INGS _ FRAGMENT _ TAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ). commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Recognition (){ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecognition Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRE CO GN ITION _ FRAGMENT _ TAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ). commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Contact Info ( num Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Info Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONT ACT _ INFO _ FRAGMENT _ TAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( POSITION , Ġnum ) ĊĠĠĠĠĠĠĠ Ġcontact Info Fragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ). commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmodule Mode Pre paration (){ ĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= Ġget SharedPreferences ( PRE FS , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġoffline Switch Ġ= ĠfindViewById < Navigation View >( R . id . nav _ view ). menu . find Item ( R . id . nav _ offline _ switch ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction View . findViewById < Switch >( R . id . offline _ switch ) ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . getBoolean ( OFF LINE _ MODE , Ġfalse )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Switch . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoffline Switch . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . edit (). put Boolean ( OFF LINE _ MODE , Ġtrue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . edit (). put Boolean ( OFF LINE _ MODE , Ġfalse ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Network Available ( wifi Only Ġ: ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= Ġget System Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġactive Network : ĠNetwork ? Ġ= Ġcm . active Network ĊĠĠĠĠĠĠĠ Ġactive Network Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( wifi Only Ġ&& Ġ! cm . get Network Capabilities ( active Network ). has Transport ( Network Capabilities . TRANSPORT _ WIFI )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Gallery (){ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgallery Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG ALL ERY _ FRAGMENT _ TAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ). commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Editing ( is From Recognition Ġ: ĠBoolean Ġ= Ġfalse , Ġinfo Ġ: ĠCard Gallery Content . Parcelable Json Item ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is From Recognition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġediting Fragment Ġ= Ġinit Editing Fragment ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġediting Fragment Ġ= Ġrepeated Editing Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fragment _ container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġediting Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEDIT ING _ FRAGMENT _ TAG ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( PAR CEL ABLE _ ITEM , Ġinfo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġediting Fragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is From Recognition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager . pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( null ). commit () ĊĠĠĠĠĠĠĠ Ġediting Fragment . up Reset Flag () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Network Settings (){ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Prefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġapplication Prefs Ġ= Ġget SharedPreferences ( PRE FS , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġis Online Ġ= Ġis Network Available ( settings Prefs . getBoolean (" wifi _ only _ mode ", Ġfalse )) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Online Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Prefs . getBoolean ( OFF LINE _ MODE , Ġfalse ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Prefs . getBoolean (" internet _ enable _ notification ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . NETWORK _ SWITCH _ ON LINE _ NOTIFICATION . ordinal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . switch _ online _ notification _ dialog _ header ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . switch _ online _ notification _ dialog _ body ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . ok ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show ( support FragmentManager , ĠCON FIRM ATION _ DIALOG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Online Ġ&& Ġ! application Prefs . getBoolean ( OFF LINE _ MODE , Ġfalse )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings Prefs . getBoolean (" internet _ disable _ notification ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . NETWORK _ SWITCH _ OFF LINE _ NOTIFICATION . ordinal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . switch _ offline _ notification _ dialog _ header ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . switch _ offline _ notification _ dialog _ body ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . ok ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show ( support FragmentManager , ĠCON FIRM ATION _ DIALOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Navigation View >( R . id . nav _ view ). menu . find Item ( R . id . nav _ offline _ switch ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction View . findViewById < Switch >( R . id . offline _ switch ). isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġopen Recognition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Contact ( intent : ĠIntent ){ ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Startup Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( permissions Requested ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions Requested Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( should Show Request Permission R ationale ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġshould Show Request Permission R ationale ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm ation Dialog s Types . PERMISSION _ RATION ALE . ordinal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . camera _ access _ required _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . camera _ access _ required ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . ok ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġis Cancel able Ġ= Ġfalse Ġ}. show ( support FragmentManager , ĠCON FIRM ATION _ DIALOG ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ START UP _ PERMISSION S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ START UP _ PERMISSION S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpermission Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġgrant Results . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ i ] Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Granted Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! permission Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog . newInstance ( getString ( R . string . permission _ den ied _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠERROR _ DIALOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Error By Request ( error Text : ĠString , Ġis Critical : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠError Dialog . newInstance ( error Text , Ġis Critical ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠERROR _ DIALOG ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ