package Ġch . r my . android . http _ shortcuts . activities . variables Ċ Ċ import Ġandroid . app . Application Ċ import Ġch . r my . android . http _ shortcuts . data . Realm ViewModel Ċ import Ġch . r my . android . http _ shortcuts . data . Repository Ċ import Ġch . r my . android . http _ shortcuts . data . Repository . getBase Ċ import Ġch . r my . android . http _ shortcuts . data . Repository . get Variable ById Ċ import Ġch . r my . android . http _ shortcuts . data . Transactions Ċ import Ġch . r my . android . http _ shortcuts . data . li ved ata . List LiveData Ċ import Ġch . r my . android . http _ shortcuts . data . models . Variable Ċ import Ġch . r my . android . http _ shortcuts . extensions . detach From Realm Ċ import Ġch . r my . android . http _ shortcuts . extensions . to LiveData Ċ import Ġch . r my . android . http _ shortcuts . utils . UUID Utils . new UUID Ċ import Ġch . r my . android . http _ shortcuts . variables . Variables . KEY _ MAX _ LENGTH Ċ import Ġio . realm . Realm Ċ Ċ class ĠVariables ViewModel ( application : ĠApplication ) Ġ: ĠRealm ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Variables (): ĠList LiveData < Variable > Ġ= ĊĠĠĠĠĠĠĠ Ġget Base ( pers isted Realm ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. variables ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to LiveData () ĊĊĠĠĠ Ġfun Ġmove Variable ( variable Id : ĠString , Ġposition : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ ĠTransactions . commit Ġ{ Ġrealm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= Ġget Variable ById ( realm , Ġvariable Id ) Ġ?: Ġreturn @ commit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= Ġget Base ( realm )?. variables Ġ?: Ġreturn @ commit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Position Ġ= Ġvariables . indexOf ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariables . move ( old Position , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Variable ( variable Id : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ ĠTransactions . commit Ġ{ Ġrealm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Variable ById ( realm , Ġvariable Id )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions ?. delete All From Realm () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete From Realm () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġduplicate Variable ( variable Id : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ ĠTransactions . commit Ġ{ Ġrealm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Variable Ġ= Ġget Variable ById ( realm , Ġvariable Id ) Ġ?: Ġreturn @ commit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Variable Ġ= Ġold Variable . detach From Realm () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Variable . id Ġ= Ġnew UUID () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Variable . key Ġ= Ġgenerate New Key ( realm , Ġold Variable . key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Variable . options ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . id Ġ= Ġnew UUID () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġget Base ( realm ) Ġ?: Ġreturn @ commit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Position Ġ= Ġbase . variables . indexOf ( old Variable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Pers isted Variable Ġ= Ġrealm . copy To Realm OrUpdate ( new Variable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase . variables . add ( old Position Ġ+ Ġ 1 , Ġnew Pers isted Variable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate New Key ( realm : ĠRealm , Ġold Key : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġold Key . take ( KEY _ MAX _ LENGTH Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 2 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Key Ġ= Ġ"$ base $ i " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Variable Key InUse ( realm , Ġnew Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġgenerate Ġnew Ġkey Ġfor Ġvariable Ġduplication ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Variable Key InUse ( realm : ĠRealm , Ġkey : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ ĠRepository . get Variable ByKey ( realm , Ġkey ) Ġ!= Ġnull Ċ Ċ }