package Ġlt . vil n ius . t var ka u . view model Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġlt . vil n ius . t var ka u . analytics . Analytics Ċ import Ġlt . vil n ius . t var ka u . d agger . Ui Scheduler Ċ import Ġlt . vil n ius . t var ka u . entity . Profile Ċ import Ġlt . vil n ius . t var ka u . entity . Report Entity Ċ import Ġlt . vil n ius . t var ka u . entity . Report Type Ċ import Ġlt . vil n ius . t var ka u . mvp . inter actors . Personal Data Interactor Ċ import Ġlt . vil n ius . t var ka u . mvp . present ers . New Report Data Ċ import Ġlt . vil n ius . t var ka u . repository . Reports Repository Ċ import Ġlt . vil n ius . t var ka u . utils . Field Aware Validator Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠNew Report ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ Ui Scheduler ĊĠĠĠ Ġprivate Ġval Ġui Scheduler : ĠScheduler , ĊĠĠĠ Ġprivate Ġval Ġpersonal Data Interactor : ĠPersonal Data Interactor , ĊĠĠĠ Ġprivate Ġval Ġanalytics : ĠAnalytics , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠReports Repository Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ personal Data Ġ= ĠMutable LiveData < Profile >() ĊĠĠĠ Ġval Ġpersonal Data : ĠLive Data < Profile > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ personal Data ĊĊĠĠĠ Ġprivate Ġval Ġ_ validation Error Ġ= ĠSingle Live Event < Field Aware Validator . ValidationException >() ĊĠĠĠ Ġval Ġvalidation Error : ĠLive Data < Field Aware Validator . ValidationException > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ validation Error ĊĊĠĠĠ Ġprivate Ġval Ġ_ submitted Report Ġ= ĠMutable LiveData < Report Entity >() ĊĠĠĠ Ġval Ġsubmitted Report : ĠLive Data < Report Entity > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ submitted Report ĊĊĠĠĠ Ġfun Ġinit With ( report Type : ĠReport Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( report Type . is Par king Violation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Ġ= Ġif Ġ(! personal Data Interactor . is User Anonymous ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal Data Interactor . get Personal Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ personal Data . value Ġ= Ġprofile ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMissing Ġsupport Ġfrom Ġbackend Ġfor : ĊĠĠĠĠ Ġ* Ġ- Ġpersonal Ġcode Ġfield ĊĠĠĠĠ Ġ* Ġ- Ġemail ĊĠĠĠĠ Ġ* Ġ- Ġphone ĊĠĠĠĠ Ġ* Ġ- Ġfull Ġname ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAll Ġfields Ġshould Ġbe Ġavailable Ġfrom Ġuser 's Ġpersonal Ġdata Ġafter Ġsign - in Ġvia ĠV il nia us ĠV art ai ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsubmit ( validator : ĠField Aware Validator < New Report Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidator . to Single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġrepository . submit Report ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( ui Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġthis :: handle Success , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġthis :: handleError ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Success ( report : ĠReport Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanalytics . track Report Registration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Type Ġ= Ġreport . report Type . title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Count Ġ= Ġ 0 Ġ// TODO Ġset Ġphoto Ġcount ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ_ submitted Report . value Ġ= Ġreport ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠField Aware Validator . ValidationException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ validation Error . value Ġ= Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics . track Report Validation ( error . message Ġ?: Ġ" no Ġmessage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ_ error Events . value Ġ= Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Images Pick ed ( image Files : ĠList < File >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġimplement Ġimage Ġupload Ġwith Ġnew ĠAPI ĊĠĠĠ Ġ} Ċ } Ċ