From d4093cc8ff2b7cc7877c31488113e89d1bc3348f Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Sat, 9 Jun 2018 00:24:24 -0400 Subject: [PATCH] Load maxValue in KeyManager lazily --- data/src/main/java/manager/KeyManagerImpl.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/data/src/main/java/manager/KeyManagerImpl.kt b/data/src/main/java/manager/KeyManagerImpl.kt index a62a2851b..3ec85f3ed 100644 --- a/data/src/main/java/manager/KeyManagerImpl.kt +++ b/data/src/main/java/manager/KeyManagerImpl.kt @@ -26,18 +26,14 @@ import javax.inject.Singleton @Singleton class KeyManagerImpl @Inject constructor() : KeyManager { - private var maxValue: Long = 0L - - init { - val realm = Realm.getDefaultInstance() - maxValue = realm.where(Message::class.java).max("id")?.toLong() ?: 0L - realm.close() - } + private var initialized = false + private var maxValue: Long = 0 /** * Should be called when a new sync is being started */ override fun reset() { + initialized = true maxValue = 0L } @@ -45,6 +41,13 @@ class KeyManagerImpl @Inject constructor() : KeyManager { * Returns a valid ID that can be used to store a new message */ override fun newId(): Long { + if (!initialized) { + maxValue = Realm.getDefaultInstance().use { realm -> + realm.where(Message::class.java).max("id")?.toLong() ?: 0L + } + initialized = true + } + maxValue++ return maxValue }