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

39 lines
1.4 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 Google Play Prelaunch reports.
*/
object FirebaseTestLabUtil {
private const val FIREBASE_TEST_LAB_SETTING = "firebase.test.lab" // $NON-NLS
private const val SETTING_TRUE = "true" // $NON-NLS
private val isFirebaseTestLabCached = LazyWithArgument<Context, Boolean> {
isFirebaseTestLabImpl(it)
}
/**
* @return True if the environment is Firebase Test Lab.
*/
fun isFirebaseTestLab(context: Context) = isFirebaseTestLabCached.getInstance(context)
private fun isFirebaseTestLabImpl(context: Context): Boolean {
/*
* Per the documentation at https://firebase.google.com/docs/test-lab/android-studio
*/
// 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, FIREBASE_TEST_LAB_SETTING)
}.recover {
// Fail-safe in case an error occurs
// 99.9% of the time, it won't be Firebase Test Lab
false
}.getOrThrow()
}
}