1
+ package com.credmanwebtest.webhandler
2
+
3
+ import android.app.Activity
4
+ import android.util.Log
5
+ import androidx.credentials.*
6
+ import androidx.credentials.exceptions.*
7
+
8
+ /* *
9
+ * A class that encapsulates the credential manager object and provides simplified APIs for
10
+ * creating and retrieving public key credentials. For other types of credentials follow the
11
+ * documentation https://developer.android.com/training/sign-in/passkeys
12
+ */
13
+ class CredentialManagerHandler (private val activity : Activity ) {
14
+
15
+ private val mCredMan = CredentialManager .create(activity.applicationContext)
16
+ private val TAG = " CredentialManagerHandler"
17
+
18
+ /* *
19
+ * Encapsulates the create passkey API for credential manager in a less error-prone manner.
20
+ *
21
+ * @param request a create public key credential request JSON required by [CreatePublicKeyCredentialRequest].
22
+ * @return [CreatePublicKeyCredentialResponse] containing the result of the credential creation.
23
+ */
24
+ suspend fun createPasskey (request : String ): CreatePublicKeyCredentialResponse {
25
+ val createRequest = CreatePublicKeyCredentialRequest (request)
26
+ try {
27
+ return mCredMan.createCredential(activity, createRequest) as CreatePublicKeyCredentialResponse
28
+ } catch (e: CreateCredentialException ) {
29
+ // For error handling use guidance from https://developer.android.com/training/sign-in/passkeys
30
+ Log .i(TAG , " Error creating credential: ErrMessage: ${e.errorMessage} , ErrType: ${e.type} " )
31
+ throw e
32
+ }
33
+ }
34
+
35
+ /* *
36
+ * Encapsulates the get passkey API for credential manager in a less error-prone manner.
37
+ *
38
+ * @param request a get public key credential request JSON required by [GetCredentialRequest].
39
+ * @return [GetCredentialResponse] containing the result of the credential retrieval.
40
+ */
41
+ suspend fun getPasskey (request : String ): GetCredentialResponse {
42
+ val getRequest = GetCredentialRequest (listOf (GetPublicKeyCredentialOption (request, null )))
43
+ try {
44
+ return mCredMan.getCredential(activity, getRequest)
45
+ } catch (e: GetCredentialException ) {
46
+ // For error handling use guidance from https://developer.android.com/training/sign-in/passkeys
47
+ Log .i(TAG , " Error retrieving credential: ${e.message} " )
48
+ throw e
49
+ }
50
+ }
51
+ }
0 commit comments