/* Ċ Ġ* ĠBSD Ġ 3 - Clause ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ ĠS age ĠB ion etwork s . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ġmodification , Ċ Ġ* Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ 1 . Ġ ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ 2 . Ġ ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ċ Ġ* Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ 3 . Ġ ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder ( s ) Ġnor Ġthe Ġnames Ġof Ġany Ġcontributors Ċ Ġ* Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* Ġspecific Ġprior Ġwritten Ġpermission . ĠNo Ġlicense Ġis Ġgranted Ġto Ġthe Ġtrade marks Ġof Ċ Ġ* Ġthe Ġcopyright Ġhold ers Ġeven Ġif Ġsuch Ġmarks Ġare Ġincluded Ġin Ġthis Ġsoftware . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE Ċ Ġ* ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL Ċ Ġ* ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER Ċ Ġ* ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , Ċ Ġ* ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġorg . sage b ion etwork s . research . mp ower . profile Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġhu . ak arn ok d . rx java . interop . Rx Java Interop Ċ import Ġio . reactivex . Single Ċ import Ġorg . sage b ion etwork s . bridge . android . manager . Authentication Manager Ċ import Ġorg . sage b ion etwork s . bridge . android . manager . models . Profile DataSource Ċ import Ġorg . sage b ion etwork s . bridge . research stack . Bridge DataProvider Ċ import Ġorg . sage b ion etwork s . bridge . rest . model . Sharing Scope Ċ import Ġorg . sage b ion etwork s . bridge . rest . model . Study Participant Ċ import Ġorg . sage b ion etwork s . bridge . rest . model . Survey Ċ import Ġorg . sage b ion etwork s . bridge . rest . model . Survey Reference Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . dao . room . AppConfig Repository Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . dao . room . Report Repository Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . dao . room . Scheduled Activity Entity Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . dao . room . Survey Repository Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . profile . Profile DataLoader Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . profile . Profile Manager Ċ import Ġorg . sage b ion etwork s . research . s ag ere search . repos . Bridge Repository Manager Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ open Ġclass ĠM p Base Profile ViewModel ( ĊĠĠĠĠĠĠĠ Ġval Ġbridge Repo Manager : ĠBridge Repository Manager , ĊĠĠĠĠĠĠĠ Ġval Ġreport Repo : ĠReport Repository , ĊĠĠĠĠĠĠĠ Ġval Ġapp Config Repo : ĠApp Config Repository , ĊĠĠĠĠĠĠĠ Ġval Ġsurvey Repo : ĠSurvey Repository , ĊĠĠĠĠĠĠĠ Ġval Ġauth Manager : ĠAuthentication Manager , ĊĠĠĠĠĠĠĠ Ġapp : ĠApplication ) Ġ: ĠAndroid ViewModel ( app ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( Mp Base Profile ViewModel :: class . java ) ĊĊĠĠĠ Ġval Ġprofile Manager Ġ= ĠM p Profile Manager ( report Repo , Ġapp Config Repo , Ġauth Manager , Ġapp ) ĊĊĠĠĠ Ġval Ġcomposite Disposable Ġ= Ġio . reactivex . dis pos ables . Composite Disposable () ĊĊĠĠĠ Ġvar Ġcurrent Scheduled Activity : ĠScheduled Activity Entity ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcached Profile DataLoader : ĠProfile DataLoader ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġshared Prefs : ĠSharedPreferences Ġ= ĠM p Profile Manager . create Shared Prefs ( app ) ĊĊĠĠĠ Ġprivate Ġfun Ġprofile DataLoader (): ĠLive Data < Profile DataLoader > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprofile Manager . profile DataLoader () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprofile DataSource (): ĠLive Data < Map < String , ĠProfile DataSource >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprofile Manager . load Profile Data Sources () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprofile Data ( key : ĠString ): ĠLive Data < Pair < Profile DataSource ?, ĠProfile DataLoader ? >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmedi ator Ġ= ĠMed iator LiveData < Pair < Profile DataSource ?, ĠProfile DataLoader ? >> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprofile DataLoader : ĠProfile DataLoader ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprofile DataSource : ĠProfile DataSource ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile DataLoader Ġ!= Ġnull Ġ&& Ġprofile DataSource Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= ĠPair ( profile DataSource , Ġprofile DataLoader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Source ( profile DataSource ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile DataSource Ġ= Ġit . get ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Source ( profile DataLoader ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile DataLoader Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Profile DataLoader Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmedi ator ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Study Participant Value ( value : ĠString , Ġprofile Item Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstudy Participant : ĠStudy Participant ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhen Ġ( profile Item Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" firstName " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM p Profile Manager . update FirstName In Cache ( shared Prefs , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Profile DataLoader ?. participant Data ?. firstName Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudy Participant Ġ= ĠStudy Participant () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudy Participant . firstName Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sharing Scope " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠSh aring Scope . from Value ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM p Profile Manager . update Sharing Scope In Cache ( shared Prefs , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Profile DataLoader ?. participant Data ?. sharing Scope Ġ= Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudy Participant Ġ= ĠStudy Participant () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudy Participant . sharing Scope Ġ= Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( study Participant Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( Rx Java Interop . to V 2 Observable ( Bridge DataProvider . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update Study Participant ( study Participant )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġuser Session Info Ġ-> ĠLOGGER . info (" Successfully Ġupdated Ġstudy Ġparticipant ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrowable Ġ-> ĠLOGGER . warn (" Error Ġupdating Ġstudy Ġparticipant ") Ġ})) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Survey ( survey Reference : ĠSurvey Reference ): ĠSingle < Survey > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsurvey Repo . get Survey ( survey Reference ). do On Success Ġ{ Ġload Scheduled Activity ( it . identifier ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Scheduled Activity ( survey Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( bridge Repo Manager . schedule Repo . schedule Dao . activity Group Flow able ( set Of ( survey Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġcurrent Scheduled Activity Ġ= Ġit . first OrNull () Ġ}, Ġ{ Ġ" fail " Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . dispose () ĊĠĠĠ Ġ} Ċ } Ċ