secant-android-wallet/ui-lib/src/main/java/co/electriccoin/zcash/global/WalletCoordinator.kt

27 lines
1.1 KiB
Kotlin

package co.electriccoin.zcash.global
import android.content.Context
import cash.z.ecc.android.sdk.WalletCoordinator
import co.electriccoin.zcash.spackle.LazyWithArgument
import co.electriccoin.zcash.ui.preference.EncryptedPreferenceKeys
import co.electriccoin.zcash.ui.preference.EncryptedPreferenceSingleton
import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flow
private val lazy = LazyWithArgument<Context, WalletCoordinator> {
/**
* A flow of the user's stored wallet. Null indicates that no wallet has been stored.
*/
val persistableWallet = flow {
// EncryptedPreferenceSingleton.getInstance() is a suspending function, which is why we need
// the flow builder to provide a coroutine context.
val encryptedPreferenceProvider = EncryptedPreferenceSingleton.getInstance(it)
emitAll(EncryptedPreferenceKeys.PERSISTABLE_WALLET.observe(encryptedPreferenceProvider))
}
WalletCoordinator(it, persistableWallet)
}
fun WalletCoordinator.Companion.getInstance(context: Context) = lazy.getInstance(context)