secant-android-wallet/spackle-android-lib/src/main/kotlin/co/electriccoin/zcash/spackle/EmulatorWtfUtil.kt

36 lines
1.2 KiB
Kotlin

package co.electriccoin.zcash.spackle
import android.content.Context
import android.provider.Settings
/*
* This is not under a test module, because there are some code paths that we might want to alter
* during Emulator WTF tests.
*/
object EmulatorWtfUtil {
private const val EMULATOR_WTF_SETTING = "emulator.wtf" // $NON-NLS
private const val SETTING_TRUE = "true" // $NON-NLS
private val isEmulatorWtfCached = LazyWithArgument<Context, Boolean> {
isEmulatorWtfImpl(it)
}
/**
* @return True if the environment is emulator.wtf
*/
fun isEmulatorWtf(context: Context) = isEmulatorWtfCached.getInstance(context)
private fun isEmulatorWtfImpl(context: Context): Boolean {
// Tested with the benchmark library, this is very fast. There shouldn't be a need to make
// this a suspend function. That said, we'll still cache the result as a just-in-case
// since IPC may be involved.
return runCatching {
SETTING_TRUE == Settings.System.getString(context.contentResolver, EMULATOR_WTF_SETTING)
}.recover {
// Fail-safe in case an error occurs
// 99.9% of the time, it won't be Emulator.wtf
false
}.getOrThrow()
}
}