@@ -24,11 +24,14 @@ import androidx.biometric.BiometricPrompt
24
24
import androidx.core.content.ContextCompat
25
25
import androidx.fragment.app.Fragment
26
26
import androidx.fragment.app.FragmentActivity
27
+ import com.duckduckgo.app.statistics.pixels.Pixel
28
+ import com.duckduckgo.app.statistics.pixels.Pixel.PixelType
27
29
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
28
30
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthResult
29
31
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthResult.Error
30
32
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthResult.Success
31
33
import com.duckduckgo.autofill.impl.deviceauth.DeviceAuthenticator.AuthResult.UserCancelled
34
+ import com.duckduckgo.autofill.impl.pixel.AutofillPixelNames.AUTOFILL_DEVICE_AUTH_ERROR_HARDWARE_UNAVAILABLE
32
35
import com.duckduckgo.di.scopes.AppScope
33
36
import com.squareup.anvil.annotations.ContributesBinding
34
37
import javax.inject.Inject
@@ -55,6 +58,7 @@ class RealAuthLauncher @Inject constructor(
55
58
private val context : Context ,
56
59
private val appBuildConfig : AppBuildConfig ,
57
60
private val autofillAuthorizationGracePeriod : AutofillAuthorizationGracePeriod ,
61
+ private val pixel : Pixel ,
58
62
) : AuthLauncher {
59
63
60
64
override fun launch (
@@ -101,6 +105,7 @@ class RealAuthLauncher @Inject constructor(
101
105
onResult(UserCancelled )
102
106
} else {
103
107
onResult(Error (String .format(" (%d) %s" , errorCode, errString)))
108
+ sendErrorPixel(errorCode)
104
109
}
105
110
}
106
111
@@ -115,6 +120,21 @@ class RealAuthLauncher @Inject constructor(
115
120
super .onAuthenticationFailed()
116
121
Timber .v(" onAuthenticationFailed" )
117
122
}
123
+
124
+ private fun sendErrorPixel (errorCode : Int ) {
125
+ when (errorCode) {
126
+ BiometricPrompt .ERROR_HW_NOT_PRESENT -> {
127
+ val params = mapOf (
128
+ " manufacturer" to appBuildConfig.manufacturer,
129
+ " model" to appBuildConfig.model,
130
+ )
131
+ pixel.fire(AUTOFILL_DEVICE_AUTH_ERROR_HARDWARE_UNAVAILABLE , parameters = params, type = PixelType .Unique ())
132
+ }
133
+ else -> {
134
+ // no-op
135
+ }
136
+ }
137
+ }
118
138
}
119
139
120
140
private fun getPromptInfo (titleText : Int , featureAuthText : Int ): BiometricPrompt .PromptInfo {
0 commit comments