package Ġorg . od k . collect . android . form management . form map Ċ Ċ import Ġandroid . content . res . Resources Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġorg . od k . collect . android . R Ċ import Ġorg . od k . collect . android . external . Instance Provider Ċ import Ġorg . od k . collect . android shared . li ved ata . Mutable NonNull LiveData Ċ import Ġorg . od k . collect . android shared . li ved ata . NonNull LiveData Ċ import Ġorg . od k . collect . async . Scheduler Ċ import Ġorg . od k . collect . forms . Form Ċ import Ġorg . od k . collect . forms . Forms Repository Ċ import Ġorg . od k . collect . forms . instances . Instance Ċ import Ġorg . od k . collect . forms . instances . Instances Repository Ċ import Ġorg . od k . collect . geo . selection . M appable Select Item Ċ import Ġorg . od k . collect . geo . selection . Selection Map Data Ċ import Ġorg . od k . collect . settings . Settings Provider Ċ import Ġorg . od k . collect . settings . keys . Protected Project Keys Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Date Ċ import Ġjava . util . Locale Ċ Ċ class ĠForm Map ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġresources : ĠResources , ĊĠĠĠ Ġprivate Ġval Ġform Id : ĠLong , ĊĠĠĠ Ġprivate Ġval Ġforms Repository : ĠForms Repository , ĊĠĠĠ Ġprivate Ġval Ġinstances Repository : ĠInstances Repository , ĊĠĠĠ Ġprivate Ġval Ġsettings Provider : ĠSettings Provider , ĊĠĠĠ Ġprivate Ġval Ġscheduler : ĠScheduler Ċ ) Ġ: ĠViewModel (), ĠSelection Map Data Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ form : ĠForm ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġmap Title Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġprivate Ġvar Ġm appable Items Ġ= ĠMutable NonNull LiveData < List < M appable Select Item >>( emptyList ()) ĊĠĠĠ Ġprivate Ġvar Ġitem Count Ġ= ĠMutable LiveData ( 0 ) ĊĠĠĠ Ġprivate Ġval ĠisLoading Ġ= ĠMutable NonNull LiveData ( false ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Map Title (): ĠLive Data < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Type (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . getString ( R . string . saved _ forms ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠLive Data < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitem Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget M appable Items (): ĠNon Null LiveData < List < M appable Select Item >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm appable Items ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisLoading (): ĠNon Null LiveData < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisLoading ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload () Ġ{ ĊĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġscheduler . immediate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= Ġ_ form Ġ?: Ġforms Repository . get ( form Id ) !!. also Ġ{ Ġ_ form Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstances Ġ= Ġinstances Repository . getAll By Form Id ( form . form Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < M appable Select Item >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( instance Ġin Ġinstances ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance . geometry Ġ!= Ġnull Ġ&& Ġinstance . geometry Type Ġ== ĠInstance . GEOMETRY _ TYPE _ POINT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgeometry Ġ= ĠJSONObject ( instance . geometry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoordinates Ġ= Ġgeometry . get JSONArray (" coordinates ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn ĠGeo JSON , Ġlongitude Ġcomes Ġbefore Ġlatitude . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlon Ġ= Ġcoordinates . getDouble ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Ġ= Ġcoordinates . getDouble ( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( create Item ( instance , Ġlat , Ġlon )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" Invalid ĠJSON Ġin Ġinstances Ġtable : Ġ% s ", Ġinstance . geometry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( form . displayName , Ġitems , Ġinstances . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforeground Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Title . value Ġ= Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm appable Items . value Ġ= Ġit . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Count . value Ġ= Ġit . third ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Item ( ĊĠĠĠĠĠĠĠ Ġinstance : ĠInstance , ĊĠĠĠĠĠĠĠ Ġlatitude : ĠDouble , ĊĠĠĠĠĠĠĠ Ġlongitude : ĠDouble , ĊĠĠĠ Ġ): ĠM appable Select Item Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Last Status Change Date Ġ= ĠInstance Provider . getDisplay Sub text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . status , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate ( instance . last Status Change Date ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( instance . deleted Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleted Time Ġ= Ġresources . getString ( R . string . deleted _ on _ date _ at _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĠdateFormat . format ( instance . deleted Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM appable Select Item . With Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable Id For Status ( instance . status , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable Id For Status ( instance . status , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . displayName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM appable Select Item . Icon ified Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Submission Summary Status Icon ( instance . status ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Last Status Change Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! instance . can Edit When Complete () Ġ&& ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ COMPLETE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ SUB MISSION _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ SUBMIT TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). contains ( instance . status ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġresources . getString ( R . string . cannot _ edit _ completed _ form ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM appable Select Item . With Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable Id For Status ( instance . status , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable Id For Status ( instance . status , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . displayName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM appable Select Item . Icon ified Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Submission Summary Status Icon ( instance . status ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Last Status Change Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġwhen Ġ( instance . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ IN COMPLETE Ġ-> Ġcreate Edit Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ COMPLETE Ġ-> Ġcreate Edit Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcreate View Action () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠM appable Select Item . With Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . db Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable Id For Status ( instance . status , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable Id For Status ( instance . status , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . displayName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM appable Select Item . Icon ified Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Submission Summary Status Icon ( instance . status ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Last Status Change Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate View Action (): ĠM appable Select Item . Icon ified Text Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠM appable Select Item . Icon ified Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ visibility , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . view _ data ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Edit Action (): ĠM appable Select Item . Icon ified Text Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcan Edit Saved Ġ= Ġsettings Provider . get Protected Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean ( Protected Project Keys . KEY _ EDIT _ SA VED ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠM appable Select Item . Icon ified Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Edit Saved ) ĠR . drawable . ic _ edit Ġelse ĠR . drawable . ic _ visibility , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( if Ġ( can Edit Saved ) ĠR . string . review _ data Ġelse ĠR . string . view _ data ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Drawable Id For Status ( status : ĠString , Ġen lar ged : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ IN COMPLETE Ġ-> Ġif Ġ( en lar ged ) ĠR . drawable . ic _ room _ form _ state _ in complete _ 4 8 dp Ġelse ĠR . drawable . ic _ room _ form _ state _ in complete _ 2 4 dp ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ COMPLETE Ġ-> Ġif Ġ( en lar ged ) ĠR . drawable . ic _ room _ form _ state _ complete _ 4 8 dp Ġelse ĠR . drawable . ic _ room _ form _ state _ complete _ 2 4 dp ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ SUBMIT TED Ġ-> Ġif Ġ( en lar ged ) ĠR . drawable . ic _ room _ form _ state _ submitted _ 4 8 dp Ġelse ĠR . drawable . ic _ room _ form _ state _ submitted _ 2 4 dp ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ SUB MISSION _ FAILED Ġ-> Ġif Ġ( en lar ged ) ĠR . drawable . ic _ room _ form _ state _ submission _ failed _ 4 8 dp Ġelse ĠR . drawable . ic _ room _ form _ state _ submission _ failed _ 2 4 dp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . ic _ map _ point ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Submission Summary Status Icon ( instance Status : ĠString ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( instance Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ COMPLETE Ġ-> ĠR . drawable . form _ state _ final ized ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ SUBMIT TED Ġ-> ĠR . drawable . form _ state _ submit ed ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstance . STATUS _ SUB MISSION _ FAILED Ġ-> ĠR . drawable . form _ state _ submission _ failed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . form _ state _ saved ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ