/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠRealm ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . realm . kotlin Ċ Ċ import Ġio . realm . Realm ChangeListener Ċ import Ġio . realm . Realm Model Ċ import Ġio . realm . Realm Object Ċ import Ġio . realm . Realm Object ChangeListener Ċ Ċ /** Ċ Ġ* ĠDeletes Ġthe Ġobject Ġfrom Ġthe ĠRealm Ġit Ġis Ġcurrently Ġassociated Ġwith . Ċ Ġ* Ċ Ġ* ĠAfter Ġthis Ġmethod Ġis Ġcalled Ġthe Ġobject Ġwill Ġbe Ġinvalid Ġand Ġany Ġoperation Ġ( read Ġor Ġwrite ) Ġperformed Ġon Ġit Ġwill Ċ Ġ* Ġfail Ġwith Ġan Ġ` IllegalStateException `. Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġthe Ġcorresponding ĠRealm Ġis Ġclosed Ġor Ġin Ġan Ġincorrect Ġthread . Ċ Ġ* Ġ@ see Ġ[ isValid ] Ċ Ġ*/ Ċ fun ĠRealm Model . delete From Realm () Ġ{ ĊĠĠĠ ĠRealm Object . delete From Realm ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠChecks Ġif Ġthe ĠRealm Object Ġis Ġstill Ġvalid Ġto Ġuse Ġi . e ., Ġthe ĠRealm Object Ġhasn 't Ġbeen Ġdeleted Ġnor Ġhas Ġthe Ċ Ġ* ĠRealm Ġbeen Ġclosed . ĠIt Ġwill Ġalways Ġreturn Ġ` true ` Ġfor Ġunmanaged Ġobjects . Ċ Ġ* Ċ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġobject Ġis Ġstill Ġaccessible Ġor Ġan Ġunmanaged Ġobject , Ġ` false ` Ġotherwise . Ċ Ġ*/ Ċ fun ĠRealm Model . isValid (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . isValid ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġfrozen Ġsnapshot Ġof Ġthis Ġobject . ĠThe Ġfrozen Ġcopy Ġcan Ġbe Ġread Ġand Ġqueried Ġfrom Ġany Ġthread Ġwithout Ġthrowing Ċ Ġ* Ġan Ġ[ IllegalStateException ]. Ċ Ġ* Ċ Ġ* ĠFree zing Ġa ĠRealm Model Ġalso Ġcreates Ġa Ġfrozen ĠRealm Ġwhich Ġhas Ġits Ġown Ġlifecycle , Ġbut Ġif Ġthe Ġlive ĠRealm Ġthat Ġspawn ed Ġthe Ċ Ġ* Ġoriginal Ġcollection Ġis Ġfully Ġclosed Ġ( i . e . Ġall Ġinstances Ġacross Ġall Ġthreads Ġare Ġclosed ), Ġthe Ġfrozen ĠRealm Ġand Ċ Ġ* Ġobject Ġwill Ġbe Ġclosed Ġas Ġwell . Ċ Ġ* Ċ Ġ* ĠF rozen Ġobjects Ġcan Ġbe Ġqueried Ġas Ġnormal , Ġbut Ġtrying Ġto Ġmutate Ġit Ġin Ġany Ġway Ġor Ġattempting Ġto Ġregister Ġa Ġlistener Ġwill Ċ Ġ* Ġthrow Ġan Ġ[ IllegalStateException ]. Ċ Ġ* Ċ Ġ* ĠNote : ĠKeep ing Ġa Ġlarge Ġnumber Ġof Ġfrozen Ġobjects Ġwith Ġdifferent Ġversions Ġalive Ġcan Ġhave Ġa Ġnegative Ġimpact Ġon Ġthe Ġfile size Ċ Ġ* Ġof Ġthe ĠRealm . ĠIn Ġorder Ġto Ġavoid Ġsuch Ġa Ġsituation Ġit Ġis Ġpossible Ġto Ġset Ġ[ io . realm . Realm Configuration . Builder . max NumberOf Active Versions ]. Ċ Ġ* Ċ Ġ* Ġ@ return Ġa Ġfrozen Ġcopy Ġof Ġthis Ġobject . Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġthis Ġmethod Ġis Ġcalled Ġfrom Ġinside Ġa Ġwrite Ġtransaction . Ċ Ġ*/ Ċ fun Ġ< T : ĠRealm Model > ĠRealm Model . freeze (): ĠT Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . freeze ( this ) Ġas ĠT Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġthis ĠRealm Model Ġis Ġfrozen . Ċ Ġ* Ċ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe ĠRealm Model Ġis Ġfrozen , Ġ` false ` Ġif Ġit Ġis Ġnot . Ċ Ġ* Ġ@ see Ġ[ freeze ] Ċ Ġ*/ Ċ fun ĠRealm Model . is Frozen (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . is Frozen ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠChecks Ġif Ġthis Ġobject Ġis Ġmanaged Ġby ĠRealm . ĠA Ġmanaged Ġobject Ġis Ġjust Ġa Ġwrapper Ġaround Ġthe Ġdata Ġin Ġthe Ġunderlying Ċ Ġ* ĠRealm Ġfile . ĠOn ĠL ooper Ġthreads , Ġa Ġmanaged Ġobject Ġwill Ġbe Ġlive - updated Ġso Ġit Ġalways Ġpoints Ġto Ġthe Ġlatest Ġdata . ĠIt Ċ Ġ* Ġis Ġpossible Ġto Ġregister Ġa Ġchange Ġlistener Ġusing Ġ[ add ChangeListener ] Ġto Ġbe Ċ Ġ* Ġnotified Ġwhen Ġchanges Ġhappen . ĠManaged Ġobjects Ġare Ġthread Ġconf ined Ġso Ġthat Ġthey Ġcannot Ġbe Ġaccessed Ġfrom Ġother Ġthreads Ċ Ġ* Ġthan Ġthe Ġone Ġthat Ġcreated Ġthem . Ċ Ġ* Ċ Ġ* ĠIf Ġthis Ġmethod Ġreturns Ġ` false `, Ġthe Ġobject Ġis Ġunmanaged . ĠAn Ġunmanaged Ġobject Ġis Ġjust Ġa Ġnormal ĠKotlin Ġobject , Ċ Ġ* Ġso Ġit Ġcan Ġbe Ġpassed Ġfreely Ġacross Ġthreads , Ġbut Ġthe Ġdata Ġin Ġthe Ġobject Ġis Ġnot Ġconnected Ġto Ġthe Ġunderlying ĠRealm , Ċ Ġ* Ġso Ġit Ġwill Ġnot Ġbe Ġlive Ġupdated . Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġpossible Ġto Ġcreate Ġa Ġmanaged Ġobject Ġfrom Ġan Ġunmanaged Ġobject Ġby Ġusing Ċ Ġ* Ġ[ io . realm . Realm . copy To Realm ]. ĠAn Ġunmanaged Ġobject Ġcan Ġbe Ġcreated Ġfrom Ġa Ġmanaged Ġobject Ġby Ġusing Ċ Ġ* Ġ[ io . realm . Realm . copyFrom Realm ]. Ċ Ġ* Ċ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġobject Ġis Ġmanaged , Ġ` false ` Ġif Ġit Ġis Ġunmanaged . Ċ Ġ*/ Ċ fun ĠRealm Model . is Managed (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . is Managed ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠChecks Ġif Ġthe Ġquery Ġused Ġto Ġfind Ġthis ĠRealm Object Ġhas Ġcompleted . Ċ Ġ* Ċ Ġ* ĠAsync Ġmethods Ġlike Ġ[ io . realm . Realm Query . findFirst Async ] Ġreturn Ġan ĠRealm Object Ġthat Ġrepresents Ġthe Ġfuture Ġresult Ċ Ġ* Ġof Ġthe ĠRealm Query . ĠIt Ġcan Ġbe Ġconsidered Ġsimilar Ġto Ġa Ġ[ java . util . concurrent . Future ] Ġin Ġthis Ġregard . Ċ Ġ* Ċ Ġ* ĠOnce Ġ` is Loaded ()` Ġreturns Ġ` true `, Ġthe Ġobject Ġrepresents Ġthe Ġquery Ġresult Ġeven Ġif Ġthe Ġquery Ċ Ġ* Ġdidn 't Ġfind Ġany Ġobject Ġmatching Ġthe Ġquery Ġparameters . ĠIn Ġthis Ġcase Ġthe ĠRealm Object Ġwill Ċ Ġ* Ġbecome Ġa Ġ` null ` Ġobject . Ċ Ġ* Ċ Ġ* Ġ" Null " Ġobjects Ġrepresents Ġ` null `. Ġ ĠAn Ġexception Ġis Ġthrown Ġif Ġany Ġaccessor Ġis Ġcalled , Ġso Ġit Ġis Ġimportant Ġto Ġalso Ċ Ġ* Ġcheck ĠisValid Ġbefore Ġcalling Ġany Ġmethods . ĠA Ġcommon Ġpattern Ġis : Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġval Ġperson Ġ= Ġrealm . where < Person >(). findFirst Async () Ċ Ġ* Ġperson . is Loaded () Ġ// Ġ== Ġfalse Ċ Ġ* Ġperson . add ChangeListener Ġ{ Ġp Ġ-> Ċ Ġ* ĠĠĠĠ Ġp . is Loaded () Ġ// Ġalways Ġtrue Ġhere Ċ Ġ* ĠĠĠĠ Ġif ( p . isValid ()) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// ĠIt Ġis Ġsafe Ġto Ġaccess Ġthis Ġperson . Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* ĠS ynchronous ĠRealm Objects Ġare Ġby Ġdefinition Ġblocking Ġhence Ġthis Ġmethod Ġwill Ġalways Ġreturn Ġ` true ` Ġfor Ġthem . Ċ Ġ* ĠThis Ġmethod Ġwill Ġreturn Ġ` true ` Ġif Ġcalled Ġon Ġan Ġunmanaged Ġobject Ġ( created Ġoutside Ġof ĠRealm ). Ċ Ġ* Ċ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġquery Ġhas Ġcompleted , Ġ` false ` Ġif Ġthe Ġquery Ġis Ġin Ċ Ġ* Ġprogress . Ċ Ġ* Ġ@ see Ġ[ isValid ] Ċ Ġ*/ Ċ fun ĠRealm Model . is Loaded (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . is Loaded ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠMakes Ġan Ġasynchronous Ġquery Ġblocking . ĠThis Ġwill Ġalso Ġtrigger Ġany Ġregistered Ġlisteners . Ċ Ġ* Ċ Ġ* ĠNote : ĠThis Ġwill Ġreturn Ġ` true ` Ġif Ġcalled Ġfor Ġan Ġunmanaged Ġobject Ġ( created Ġoutside Ġof ĠRealm ). Ċ Ġ* Ċ Ġ* Ġ@ return Ġ` true ` Ġif Ġit Ġsuccessfully Ġcompleted Ġthe Ġquery , Ġ` false ` Ġotherwise . Ċ Ġ*/ Ċ fun ĠRealm Model . load (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . load ( this ) Ċ } ĊĊ Ċ /** Ċ Ġ* ĠAdds Ġa Ġchange Ġlistener Ġto Ġa ĠRealm Object Ġthat Ġwill Ġbe Ġtriggered Ġif Ġany Ġvalue Ġfield Ġor Ġreferenced ĠRealm Object Ġfield Ċ Ġ* Ġis Ġchanged , Ġor Ġthe ĠRealm List Ġfield Ġitself Ġis Ġchanged . ĊĊ Ġ* ĠRegister ing Ġa Ġchange Ġlistener Ġwill Ġnot Ġprevent Ġthe Ġunderlying ĠRealm Object Ġfrom Ġbeing Ġgarbage Ġcollected . Ċ Ġ* ĠIf Ġthe ĠRealm Object Ġis Ġgarbage Ġcollected , Ġthe Ġchange Ġlistener Ġwill Ġstop Ġbeing Ġtriggered . ĠTo Ġavoid Ġthis , Ġkeep Ġa Ċ Ġ* Ġstrong Ġreference Ġfor Ġas Ġlong Ġas Ġappropriate Ġe . g . Ġin Ġa Ġclass Ġvariable . Ċ Ġ* Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġclass ĠMy Activity Ġ: ĠActivity Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġprivate Ġvar Ġperson : ĠPerson ? Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġperson Ġ= Ġrealm . where < Person >(). findFirst () Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġperson ?. add ChangeListener ( Realm ChangeListener Ġ{ Ġperson Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReact Ġto Ġchange Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ}) Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġlistener Ġthe Ġchange Ġlistener Ġto Ġbe Ġnotified . Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġ` object ` Ġis Ġ` null ` Ġor Ġan Ġunmanaged Ġobject , Ġor Ġthe Ġchange Ċ Ġ* Ġlistener Ġis Ġ` null `. Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġyou Ġtry Ġto Ġadd Ġa Ġlistener Ġfrom Ġa Ġnon - Looper Ġor ĠIntent Service Ġthread . Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġyou Ġtry Ġto Ġadd Ġa Ġlistener Ġinside Ġa Ġtransaction . Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠRealm Model > ĠE . add ChangeListener ( listener : ĠRealm ChangeListener < E >) Ġ{ ĊĠĠĠ ĠRealm Object . add ChangeListener ( this , Ġlistener ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġchange Ġlistener Ġto Ġa ĠRealm Object Ġto Ġget Ġdetailed Ġinformation Ġabout Ġthe Ġchanges . ĠThe Ġlistener Ġwill Ġbe Ċ Ġ* Ġtriggered Ġif Ġany Ġvalue Ġfield Ġor Ġreferenced ĠRealm Object Ġfield Ġis Ġchanged , Ġor Ġthe ĠRealm List Ġfield Ġitself Ġis Ċ Ġ* Ġchanged . ĊĊ Ġ* ĠRegister ing Ġa Ġchange Ġlistener Ġwill Ġnot Ġprevent Ġthe Ġunderlying ĠRealm Object Ġfrom Ġbeing Ġgarbage Ġcollected . Ċ Ġ* ĠIf Ġthe ĠRealm Object Ġis Ġgarbage Ġcollected , Ġthe Ġchange Ġlistener Ġwill Ġstop Ġbeing Ġtriggered . ĠTo Ġavoid Ġthis , Ġkeep Ġa Ċ Ġ* Ġstrong Ġreference Ġfor Ġas Ġlong Ġas Ġappropriate Ġe . g . Ġin Ġa Ġclass Ġvariable . Ċ Ġ* Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġclass ĠMy Activity Ġ: ĠActivity Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġprivate Ġvar Ġperson : ĠPerson ? Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġperson Ġ= Ġrealm . where < Person >(). findFirst () Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġperson ?. add ChangeListener ( Realm Object ChangeListener Ġ{ Ġperson , Ġchange Set Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReact Ġto Ġchange Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ}) Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġlistener Ġthe Ġchange Ġlistener Ġto Ġbe Ġnotified . Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġ` object ` Ġis Ġ` null ` Ġor Ġan Ġunmanaged Ġobject , Ġor Ġthe Ġchange Ċ Ġ* Ġlistener Ġis Ġ` null `. Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġyou Ġtry Ġto Ġadd Ġa Ġlistener Ġfrom Ġa Ġnon - Looper Ġor ĠIntent Service Ġthread . Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġyou Ġtry Ġto Ġadd Ġa Ġlistener Ġinside Ġa Ġtransaction . Ċ Ġ*/ Ċ fun Ġ< E Ġ: ĠRealm Model > ĠE . add ChangeListener ( listener : ĠRealm Object ChangeListener < E >) Ġ{ ĊĠĠĠ ĠRealm Object . add ChangeListener ( this , Ġlistener ) Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġa Ġpreviously Ġregistered Ġlistener Ġon Ġthe Ġgiven ĠRealm Object . Ċ Ġ* Ċ Ġ* Ġ@ param Ġlistener Ġthe Ġinstance Ġto Ġbe Ġremoved . Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġ` object ` Ġor Ġthe Ġchange Ġlistener Ġis Ġ` null `. Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġobject Ġis Ġan Ġunmanaged ĠRealm Object . Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġyou Ġtry Ġto Ġremove Ġa Ġlistener Ġfrom Ġa Ġnon - Looper ĠThread . Ċ Ġ*/ Ċ fun Ġ Ġ< E Ġ: ĠRealm Model > ĠE . remove ChangeListener ( listener : ĠRealm ChangeListener < E >) Ġ{ ĊĠĠĠ ĠRealm Object . remove ChangeListener ( this , Ġlistener ) Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġa Ġpreviously Ġregistered Ġlistener Ġon Ġthe Ġgiven ĠRealm Object . Ċ Ġ* Ċ Ġ* Ġ@ param Ġlistener Ġthe Ġinstance Ġto Ġbe Ġremoved . Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġ` object ` Ġor Ġthe Ġchange Ġlistener Ġis Ġ` null `. Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġobject Ġis Ġan Ġunmanaged ĠRealm Object . Ċ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġyou Ġtry Ġto Ġremove Ġa Ġlistener Ġfrom Ġa Ġnon - Looper ĠThread . Ċ Ġ*/ Ċ fun Ġ Ġ< E Ġ: ĠRealm Model > ĠE . remove ChangeListener ( listener : ĠRealm Object ChangeListener < E >) Ġ{ ĊĠĠĠ ĠRealm Object . remove ChangeListener ( this , Ġlistener ) Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġall Ġregistered Ġlisteners Ġfrom Ġthe Ġgiven ĠRealm Object . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġobject Ġis Ġ` null ` Ġor Ġisn 't Ġmanaged Ġby ĠRealm . Ċ Ġ*/ Ċ fun ĠRealm Model . removeAll Change Listeners () Ġ{ ĊĠĠĠ Ġreturn ĠRealm Object . removeAll Change Listeners ( this ) Ċ } Ċ