Skip to content

Commit 95d2395

Browse files
committed
fix(biometrics): correctly resolve a FragmentActivity instance for use with BiometricsPrompt
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 753661a commit 95d2395

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

  • libs/biometrics/src/main/kotlin/com/getcode/libs/biometrics

libs/biometrics/src/main/kotlin/com/getcode/libs/biometrics/Biometrics.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.getcode.libs.biometrics
22

33
import android.content.Context
4+
import android.content.ContextWrapper
45
import androidx.biometric.BiometricManager
56
import androidx.biometric.BiometricPrompt
67
import androidx.compose.runtime.getValue
@@ -79,7 +80,7 @@ object Biometrics {
7980
promptActive = true
8081
delay(delay)
8182
return suspendCancellableCoroutine { cont ->
82-
val activity = context as FragmentActivity
83+
val activity = context.findFragmentActivity()
8384
val executor = Executors.newSingleThreadExecutor()
8485
val biometricPrompt = BiometricPrompt(
8586
activity,
@@ -112,4 +113,13 @@ object Biometrics {
112113
biometricPrompt.authenticate(promptInfo)
113114
}
114115
}
116+
}
117+
118+
private fun Context.findFragmentActivity(): FragmentActivity {
119+
var ctx = this
120+
while (ctx is ContextWrapper) {
121+
if (ctx is FragmentActivity) return ctx
122+
ctx = ctx.baseContext
123+
}
124+
throw IllegalStateException("Biometric prompt requires a FragmentActivity context")
115125
}

0 commit comments

Comments
 (0)