@tokamakdev/plugin-local-authentication 0.1.0-beta.107 → 0.1.0-beta.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/android/Bindings.kt +271 -0
- package/android/LocalAuthenticationPlugin.kt +5 -4
- package/android/bindings.ts +1144 -0
- package/apple/Bindings.swift +530 -0
- package/apple/LocalAuthenticationPlugin.swift +5 -3
- package/apple/bindings.ts +721 -0
- package/package.json +5 -3
- package/src/index.ts +4 -4
- package/tokamak-plugin.json +39 -4
package/README.md
CHANGED
|
@@ -8,8 +8,12 @@ Add it to your project's dependencies:
|
|
|
8
8
|
npm install @tokamakdev/plugin-local-authentication
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
Pages import the generated `/client` SDK. In `src/tokamak.ts`, import the
|
|
12
|
+
package root and call its factory with the handler's `ctx`. The main worker
|
|
13
|
+
uses its generated `env.TOKAMAK_LOCAL_AUTHENTICATION` service binding when present.
|
|
14
|
+
|
|
11
15
|
```ts
|
|
12
|
-
import
|
|
16
|
+
import localAuthentication from "@tokamakdev/plugin-local-authentication/client";
|
|
13
17
|
|
|
14
18
|
// "available" | "notEnrolled" | "unavailable"
|
|
15
19
|
const status = await localAuthentication.status("biometricsOrPasscode");
|
|
@@ -35,6 +39,14 @@ where the system cannot show its prompt.
|
|
|
35
39
|
any data. To bind a stored value to authentication, use
|
|
36
40
|
`@tokamakdev/plugin-secure-storage`.
|
|
37
41
|
|
|
42
|
+
## Platform bindings
|
|
43
|
+
|
|
44
|
+
`@tokamakdev/plugin-local-authentication/apple` is the Local Authentication
|
|
45
|
+
framework, and `@tokamakdev/plugin-local-authentication/android` is
|
|
46
|
+
`android.hardware.biometrics` with the `Context`, `CancellationSignal` and
|
|
47
|
+
`Executor` types it uses, for Worker code that needs what this API does not
|
|
48
|
+
offer.
|
|
49
|
+
|
|
38
50
|
## Platforms
|
|
39
51
|
|
|
40
52
|
- **iOS and macOS:** LocalAuthentication. On macOS, `biometricsOrPasscode`
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
// Generated by `tok bindings` from the Android 35 SDK: android.hardware.biometrics, android.content.Context, android.os.CancellationSignal, java.util.concurrent.Executor. Do not edit.
|
|
2
|
+
@file:Suppress("DEPRECATION", "OVERRIDE_DEPRECATION", "UNCHECKED_CAST")
|
|
3
|
+
@file:SuppressLint("MissingPermission")
|
|
4
|
+
|
|
5
|
+
package com.tokamak.bindings.local_authentication
|
|
6
|
+
|
|
7
|
+
import android.annotation.SuppressLint
|
|
8
|
+
import android.os.Build
|
|
9
|
+
import com.tokamak.runtime.TokamakBinding
|
|
10
|
+
import com.tokamak.runtime.TokamakHost
|
|
11
|
+
import com.tokamak.runtime.TokamakPlugin
|
|
12
|
+
import com.tokamak.runtime.TokamakPluginBytesReply
|
|
13
|
+
import com.tokamak.runtime.TokamakPluginError
|
|
14
|
+
|
|
15
|
+
class Bindings(private val host: TokamakHost) : TokamakPlugin {
|
|
16
|
+
override val id = "local-authentication/android"
|
|
17
|
+
|
|
18
|
+
override fun callBytes(method: String, payload: ByteArray, reply: TokamakPluginBytesReply): (() -> Unit)? {
|
|
19
|
+
val b = TokamakBinding(payload, host.resources, reply)
|
|
20
|
+
return when (method.substringBefore('#')) {
|
|
21
|
+
"BiometricManager" -> callBiometricManager(method, b)
|
|
22
|
+
"BiometricManager.Strings" -> callBiometricManager_Strings(method, b)
|
|
23
|
+
"BiometricPrompt" -> callBiometricPrompt(method, b)
|
|
24
|
+
"BiometricPrompt.AuthenticationCallback" -> callBiometricPrompt_AuthenticationCallback(method, b)
|
|
25
|
+
"BiometricPrompt.AuthenticationResult" -> callBiometricPrompt_AuthenticationResult(method, b)
|
|
26
|
+
"BiometricPrompt.Builder" -> callBiometricPrompt_Builder(method, b)
|
|
27
|
+
"BiometricPrompt.CryptoObject" -> callBiometricPrompt_CryptoObject(method, b)
|
|
28
|
+
"PromptContentItemBulletedText" -> callPromptContentItemBulletedText(method, b)
|
|
29
|
+
"PromptContentItemPlainText" -> callPromptContentItemPlainText(method, b)
|
|
30
|
+
"PromptContentViewWithMoreOptionsButton" -> callPromptContentViewWithMoreOptionsButton(method, b)
|
|
31
|
+
"PromptContentViewWithMoreOptionsButton.Builder" -> callPromptContentViewWithMoreOptionsButton_Builder(method, b)
|
|
32
|
+
"PromptVerticalListContentView" -> callPromptVerticalListContentView(method, b)
|
|
33
|
+
"PromptVerticalListContentView.Builder" -> callPromptVerticalListContentView_Builder(method, b)
|
|
34
|
+
"Context" -> callContext(method, b)
|
|
35
|
+
"Context.BindServiceFlags" -> callContext_BindServiceFlags(method, b)
|
|
36
|
+
"CancellationSignal" -> callCancellationSignal(method, b)
|
|
37
|
+
"CancellationSignal.OnCancelListener" -> callCancellationSignal_OnCancelListener(method, b)
|
|
38
|
+
else -> b.unsupported(method)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
override fun subscribeBytes(method: String, payload: ByteArray, reply: TokamakPluginBytesReply): () -> Unit {
|
|
43
|
+
val b = TokamakBinding(payload, host.resources, reply)
|
|
44
|
+
return when (method) {
|
|
45
|
+
"BiometricPrompt.AuthenticationCallback" -> {
|
|
46
|
+
if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable
|
|
47
|
+
b.implement { BiometricPrompt_AuthenticationCallbackImplementation(it) }
|
|
48
|
+
}
|
|
49
|
+
"CancellationSignal.OnCancelListener" -> {
|
|
50
|
+
if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable
|
|
51
|
+
b.implement { CancellationSignal_OnCancelListenerImplementation(it) }
|
|
52
|
+
}
|
|
53
|
+
else -> throw TokamakPluginError.notSupported("$method is not supported")
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private fun callBiometricManager(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
58
|
+
when (method) {
|
|
59
|
+
"BiometricManager#canAuthenticate()I" -> b.run { if (Build.VERSION.SDK_INT < 29) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager::class.java).canAuthenticate()) }
|
|
60
|
+
"BiometricManager#canAuthenticate(I)I" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager::class.java).canAuthenticate(b.int(b[0]))) }
|
|
61
|
+
"BiometricManager#getStrings(I)Landroid/hardware/biometrics/BiometricManager\$Strings;" -> b.run { if (Build.VERSION.SDK_INT < 31) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager::class.java).getStrings(b.int(b[0]))) }
|
|
62
|
+
"BiometricManager#getLastAuthenticationTime(I)J" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager::class.java).getLastAuthenticationTime(b.int(b[0]))) }
|
|
63
|
+
else -> b.unsupported(method)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private fun callBiometricManager_Strings(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
67
|
+
when (method) {
|
|
68
|
+
"BiometricManager.Strings#getButtonLabel()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 31) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager.Strings::class.java).getButtonLabel()) }
|
|
69
|
+
"BiometricManager.Strings#getPromptMessage()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 31) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager.Strings::class.java).getPromptMessage()) }
|
|
70
|
+
"BiometricManager.Strings#getSettingName()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 31) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricManager.Strings::class.java).getSettingName()) }
|
|
71
|
+
else -> b.unsupported(method)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private fun callBiometricPrompt(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
75
|
+
when (method) {
|
|
76
|
+
"BiometricPrompt#authenticate(Landroid/hardware/biometrics/BiometricPrompt\$CryptoObject;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt\$AuthenticationCallback;)V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.target(android.hardware.biometrics.BiometricPrompt::class.java).authenticate(b.obj(b[0], android.hardware.biometrics.BiometricPrompt.CryptoObject::class.java), b.obj(b[1], android.os.CancellationSignal::class.java), b.obj(b[2], java.util.concurrent.Executor::class.java), b.obj(b[3], android.hardware.biometrics.BiometricPrompt.AuthenticationCallback::class.java)); null }
|
|
77
|
+
"BiometricPrompt#authenticate(Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt\$AuthenticationCallback;)V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.target(android.hardware.biometrics.BiometricPrompt::class.java).authenticate(b.obj(b[0], android.os.CancellationSignal::class.java), b.obj(b[1], java.util.concurrent.Executor::class.java), b.obj(b[2], android.hardware.biometrics.BiometricPrompt.AuthenticationCallback::class.java)); null }
|
|
78
|
+
"BiometricPrompt#getTitle()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getTitle()) }
|
|
79
|
+
"BiometricPrompt#getSubtitle()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getSubtitle()) }
|
|
80
|
+
"BiometricPrompt#getDescription()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getDescription()) }
|
|
81
|
+
"BiometricPrompt#getNegativeButtonText()Ljava/lang/CharSequence;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getNegativeButtonText()) }
|
|
82
|
+
"BiometricPrompt#isConfirmationRequired()Z" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).isConfirmationRequired()) }
|
|
83
|
+
"BiometricPrompt#getAllowedAuthenticators()I" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getAllowedAuthenticators()) }
|
|
84
|
+
"BiometricPrompt#getLogoRes()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getLogoRes()) }
|
|
85
|
+
"BiometricPrompt#getLogoDescription()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getLogoDescription()) }
|
|
86
|
+
"BiometricPrompt#getContentView()Landroid/hardware/biometrics/PromptContentView;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt::class.java).getContentView()) }
|
|
87
|
+
else -> b.unsupported(method)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private fun callBiometricPrompt_AuthenticationCallback(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
91
|
+
when (method) {
|
|
92
|
+
"BiometricPrompt.AuthenticationCallback#onAuthenticationError(ILjava/lang/CharSequence;)V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.target(android.hardware.biometrics.BiometricPrompt.AuthenticationCallback::class.java).onAuthenticationError(b.int(b[0]), b.optional(b[1]) { x1 -> b.string(x1) }); null }
|
|
93
|
+
"BiometricPrompt.AuthenticationCallback#onAuthenticationHelp(ILjava/lang/CharSequence;)V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.target(android.hardware.biometrics.BiometricPrompt.AuthenticationCallback::class.java).onAuthenticationHelp(b.int(b[0]), b.optional(b[1]) { x1 -> b.string(x1) }); null }
|
|
94
|
+
"BiometricPrompt.AuthenticationCallback#onAuthenticationSucceeded(Landroid/hardware/biometrics/BiometricPrompt\$AuthenticationResult;)V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.target(android.hardware.biometrics.BiometricPrompt.AuthenticationCallback::class.java).onAuthenticationSucceeded(b.optional(b[0]) { x1 -> b.obj(x1, android.hardware.biometrics.BiometricPrompt.AuthenticationResult::class.java) }); null }
|
|
95
|
+
"BiometricPrompt.AuthenticationCallback#onAuthenticationFailed()V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.target(android.hardware.biometrics.BiometricPrompt.AuthenticationCallback::class.java).onAuthenticationFailed(); null }
|
|
96
|
+
else -> b.unsupported(method)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private fun callBiometricPrompt_AuthenticationResult(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
100
|
+
when (method) {
|
|
101
|
+
"BiometricPrompt.AuthenticationResult#getCryptoObject()Landroid/hardware/biometrics/BiometricPrompt\$CryptoObject;" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.AuthenticationResult::class.java).getCryptoObject()) }
|
|
102
|
+
"BiometricPrompt.AuthenticationResult#getAuthenticationType()I" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.AuthenticationResult::class.java).getAuthenticationType()) }
|
|
103
|
+
else -> b.unsupported(method)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private fun callBiometricPrompt_Builder(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
107
|
+
when (method) {
|
|
108
|
+
"BiometricPrompt.Builder#<init>(Landroid/content/Context;)V" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.BiometricPrompt.Builder(b.optional(b[0]) { x1 -> b.obj(x1, android.content.Context::class.java) })) }
|
|
109
|
+
"BiometricPrompt.Builder#setTitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setTitle(b.string(b[0]))) }
|
|
110
|
+
"BiometricPrompt.Builder#setSubtitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setSubtitle(b.string(b[0]))) }
|
|
111
|
+
"BiometricPrompt.Builder#setDescription(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setDescription(b.string(b[0]))) }
|
|
112
|
+
"BiometricPrompt.Builder#build()Landroid/hardware/biometrics/BiometricPrompt;" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).build()) }
|
|
113
|
+
"BiometricPrompt.Builder#setConfirmationRequired(Z)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 29) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setConfirmationRequired(b.boolean(b[0]))) }
|
|
114
|
+
"BiometricPrompt.Builder#setDeviceCredentialAllowed(Z)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 29) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setDeviceCredentialAllowed(b.boolean(b[0]))) }
|
|
115
|
+
"BiometricPrompt.Builder#setAllowedAuthenticators(I)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setAllowedAuthenticators(b.int(b[0]))) }
|
|
116
|
+
"BiometricPrompt.Builder#setLogoRes(I)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setLogoRes(b.int(b[0]))) }
|
|
117
|
+
"BiometricPrompt.Builder#setLogoDescription(Ljava/lang/String;)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setLogoDescription(b.string(b[0]))) }
|
|
118
|
+
"BiometricPrompt.Builder#setContentView(Landroid/hardware/biometrics/PromptContentView;)Landroid/hardware/biometrics/BiometricPrompt\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.Builder::class.java).setContentView(b.obj(b[0], android.hardware.biometrics.PromptContentView::class.java))) }
|
|
119
|
+
else -> b.unsupported(method)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private fun callBiometricPrompt_CryptoObject(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
123
|
+
when (method) {
|
|
124
|
+
"BiometricPrompt.CryptoObject#<init>(J)V" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.BiometricPrompt.CryptoObject(b.long(b[0]))) }
|
|
125
|
+
"BiometricPrompt.CryptoObject#getOperationHandle()J" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.BiometricPrompt.CryptoObject::class.java).getOperationHandle()) }
|
|
126
|
+
else -> b.unsupported(method)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private fun callPromptContentItemBulletedText(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
130
|
+
when (method) {
|
|
131
|
+
"PromptContentItemBulletedText#<init>(Ljava/lang/String;)V" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.PromptContentItemBulletedText(b.string(b[0]))) }
|
|
132
|
+
"PromptContentItemBulletedText#describeContents()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptContentItemBulletedText::class.java).describeContents()) }
|
|
133
|
+
else -> b.unsupported(method)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private fun callPromptContentItemPlainText(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
137
|
+
when (method) {
|
|
138
|
+
"PromptContentItemPlainText#<init>(Ljava/lang/String;)V" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.PromptContentItemPlainText(b.string(b[0]))) }
|
|
139
|
+
"PromptContentItemPlainText#describeContents()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptContentItemPlainText::class.java).describeContents()) }
|
|
140
|
+
else -> b.unsupported(method)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
private fun callPromptContentViewWithMoreOptionsButton(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
144
|
+
when (method) {
|
|
145
|
+
"PromptContentViewWithMoreOptionsButton#getDescription()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptContentViewWithMoreOptionsButton::class.java).getDescription()) }
|
|
146
|
+
"PromptContentViewWithMoreOptionsButton#describeContents()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptContentViewWithMoreOptionsButton::class.java).describeContents()) }
|
|
147
|
+
else -> b.unsupported(method)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private fun callPromptContentViewWithMoreOptionsButton_Builder(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
151
|
+
when (method) {
|
|
152
|
+
"PromptContentViewWithMoreOptionsButton.Builder#<init>()V" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.PromptContentViewWithMoreOptionsButton.Builder()) }
|
|
153
|
+
"PromptContentViewWithMoreOptionsButton.Builder#setDescription(Ljava/lang/String;)Landroid/hardware/biometrics/PromptContentViewWithMoreOptionsButton\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptContentViewWithMoreOptionsButton.Builder::class.java).setDescription(b.string(b[0]))) }
|
|
154
|
+
"PromptContentViewWithMoreOptionsButton.Builder#build()Landroid/hardware/biometrics/PromptContentViewWithMoreOptionsButton;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptContentViewWithMoreOptionsButton.Builder::class.java).build()) }
|
|
155
|
+
else -> b.unsupported(method)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
private fun callPromptVerticalListContentView(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
159
|
+
when (method) {
|
|
160
|
+
"PromptVerticalListContentView#getMaxItemCount()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.PromptVerticalListContentView.getMaxItemCount()) }
|
|
161
|
+
"PromptVerticalListContentView#getMaxEachItemCharacterNumber()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.PromptVerticalListContentView.getMaxEachItemCharacterNumber()) }
|
|
162
|
+
"PromptVerticalListContentView#getDescription()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView::class.java).getDescription()) }
|
|
163
|
+
"PromptVerticalListContentView#getListItems()Ljava/util/List;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView::class.java).getListItems()) }
|
|
164
|
+
"PromptVerticalListContentView#describeContents()I" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView::class.java).describeContents()) }
|
|
165
|
+
else -> b.unsupported(method)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private fun callPromptVerticalListContentView_Builder(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
169
|
+
when (method) {
|
|
170
|
+
"PromptVerticalListContentView.Builder#<init>()V" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(android.hardware.biometrics.PromptVerticalListContentView.Builder()) }
|
|
171
|
+
"PromptVerticalListContentView.Builder#setDescription(Ljava/lang/String;)Landroid/hardware/biometrics/PromptVerticalListContentView\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView.Builder::class.java).setDescription(b.string(b[0]))) }
|
|
172
|
+
"PromptVerticalListContentView.Builder#addListItem(Landroid/hardware/biometrics/PromptContentItem;)Landroid/hardware/biometrics/PromptVerticalListContentView\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView.Builder::class.java).addListItem(b.obj(b[0], android.hardware.biometrics.PromptContentItem::class.java))) }
|
|
173
|
+
"PromptVerticalListContentView.Builder#addListItem(Landroid/hardware/biometrics/PromptContentItem;I)Landroid/hardware/biometrics/PromptVerticalListContentView\$Builder;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView.Builder::class.java).addListItem(b.obj(b[0], android.hardware.biometrics.PromptContentItem::class.java), b.int(b[1]))) }
|
|
174
|
+
"PromptVerticalListContentView.Builder#build()Landroid/hardware/biometrics/PromptVerticalListContentView;" -> b.run { if (Build.VERSION.SDK_INT < 35) throw TokamakBinding.unavailable; b.encode(b.target(android.hardware.biometrics.PromptVerticalListContentView.Builder::class.java).build()) }
|
|
175
|
+
else -> b.unsupported(method)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
private fun callContext(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
179
|
+
when (method) {
|
|
180
|
+
"Context#getApplicationContext()Landroid/content/Context;" -> b.run { b.encode(b.target(android.content.Context::class.java).getApplicationContext()) }
|
|
181
|
+
"Context#getText(I)Ljava/lang/CharSequence;" -> b.run { b.encode(b.target(android.content.Context::class.java).getText(b.int(b[0]))) }
|
|
182
|
+
"Context#getString(I)Ljava/lang/String;" -> b.run { b.encode(b.target(android.content.Context::class.java).getString(b.int(b[0]))) }
|
|
183
|
+
"Context#getString(I[Ljava/lang/Object;)Ljava/lang/String;" -> b.run { b.encode(b.target(android.content.Context::class.java).getString(b.int(b[0]), *b.list(b[1]) { x1 -> b.optional(x1) { x2 -> b.any(x2) } }.toTypedArray())) }
|
|
184
|
+
"Context#setTheme(I)V" -> b.run { b.target(android.content.Context::class.java).setTheme(b.int(b[0])); null }
|
|
185
|
+
"Context#getPackageName()Ljava/lang/String;" -> b.run { b.encode(b.target(android.content.Context::class.java).getPackageName()) }
|
|
186
|
+
"Context#deleteFile(Ljava/lang/String;)Z" -> b.run { b.encode(b.target(android.content.Context::class.java).deleteFile(b.optional(b[0]) { x1 -> b.string(x1) })) }
|
|
187
|
+
"Context#fileList()[Ljava/lang/String;" -> b.run { b.encode(b.target(android.content.Context::class.java).fileList()) }
|
|
188
|
+
"Context#deleteDatabase(Ljava/lang/String;)Z" -> b.run { b.encode(b.target(android.content.Context::class.java).deleteDatabase(b.optional(b[0]) { x1 -> b.string(x1) })) }
|
|
189
|
+
"Context#databaseList()[Ljava/lang/String;" -> b.run { b.encode(b.target(android.content.Context::class.java).databaseList()) }
|
|
190
|
+
"Context#getWallpaperDesiredMinimumWidth()I" -> b.run { b.encode(b.target(android.content.Context::class.java).getWallpaperDesiredMinimumWidth()) }
|
|
191
|
+
"Context#getWallpaperDesiredMinimumHeight()I" -> b.run { b.encode(b.target(android.content.Context::class.java).getWallpaperDesiredMinimumHeight()) }
|
|
192
|
+
"Context#clearWallpaper()V" -> b.run { b.target(android.content.Context::class.java).clearWallpaper(); null }
|
|
193
|
+
"Context#getSystemService(Ljava/lang/String;)Ljava/lang/Object;" -> b.run { b.encode(b.target(android.content.Context::class.java).getSystemService(b.string(b[0]))) }
|
|
194
|
+
"Context#checkPermission(Ljava/lang/String;II)I" -> b.run { b.encode(b.target(android.content.Context::class.java).checkPermission(b.string(b[0]), b.int(b[1]), b.int(b[2]))) }
|
|
195
|
+
"Context#checkCallingPermission(Ljava/lang/String;)I" -> b.run { b.encode(b.target(android.content.Context::class.java).checkCallingPermission(b.string(b[0]))) }
|
|
196
|
+
"Context#checkCallingOrSelfPermission(Ljava/lang/String;)I" -> b.run { b.encode(b.target(android.content.Context::class.java).checkCallingOrSelfPermission(b.string(b[0]))) }
|
|
197
|
+
"Context#enforcePermission(Ljava/lang/String;IILjava/lang/String;)V" -> b.run { b.target(android.content.Context::class.java).enforcePermission(b.string(b[0]), b.int(b[1]), b.int(b[2]), b.optional(b[3]) { x1 -> b.string(x1) }); null }
|
|
198
|
+
"Context#enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V" -> b.run { b.target(android.content.Context::class.java).enforceCallingPermission(b.string(b[0]), b.optional(b[1]) { x1 -> b.string(x1) }); null }
|
|
199
|
+
"Context#enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V" -> b.run { b.target(android.content.Context::class.java).enforceCallingOrSelfPermission(b.string(b[0]), b.optional(b[1]) { x1 -> b.string(x1) }); null }
|
|
200
|
+
"Context#createPackageContext(Ljava/lang/String;I)Landroid/content/Context;" -> b.run { b.encode(b.target(android.content.Context::class.java).createPackageContext(b.optional(b[0]) { x1 -> b.string(x1) }, b.int(b[1]))) }
|
|
201
|
+
"Context#isRestricted()Z" -> b.run { if (Build.VERSION.SDK_INT < 4) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).isRestricted()) }
|
|
202
|
+
"Context#getPackageResourcePath()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 8) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getPackageResourcePath()) }
|
|
203
|
+
"Context#getPackageCodePath()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 8) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getPackageCodePath()) }
|
|
204
|
+
"Context#getColor(I)I" -> b.run { if (Build.VERSION.SDK_INT < 23) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getColor(b.int(b[0]))) }
|
|
205
|
+
"Context#checkSelfPermission(Ljava/lang/String;)I" -> b.run { if (Build.VERSION.SDK_INT < 23) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).checkSelfPermission(b.string(b[0]))) }
|
|
206
|
+
"Context#moveSharedPreferencesFrom(Landroid/content/Context;Ljava/lang/String;)Z" -> b.run { if (Build.VERSION.SDK_INT < 24) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).moveSharedPreferencesFrom(b.optional(b[0]) { x1 -> b.obj(x1, android.content.Context::class.java) }, b.optional(b[1]) { x1 -> b.string(x1) })) }
|
|
207
|
+
"Context#deleteSharedPreferences(Ljava/lang/String;)Z" -> b.run { if (Build.VERSION.SDK_INT < 24) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).deleteSharedPreferences(b.optional(b[0]) { x1 -> b.string(x1) })) }
|
|
208
|
+
"Context#moveDatabaseFrom(Landroid/content/Context;Ljava/lang/String;)Z" -> b.run { if (Build.VERSION.SDK_INT < 24) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).moveDatabaseFrom(b.optional(b[0]) { x1 -> b.obj(x1, android.content.Context::class.java) }, b.optional(b[1]) { x1 -> b.string(x1) })) }
|
|
209
|
+
"Context#createDeviceProtectedStorageContext()Landroid/content/Context;" -> b.run { if (Build.VERSION.SDK_INT < 24) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).createDeviceProtectedStorageContext()) }
|
|
210
|
+
"Context#isDeviceProtectedStorage()Z" -> b.run { if (Build.VERSION.SDK_INT < 24) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).isDeviceProtectedStorage()) }
|
|
211
|
+
"Context#createContextForSplit(Ljava/lang/String;)Landroid/content/Context;" -> b.run { if (Build.VERSION.SDK_INT < 26) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).createContextForSplit(b.optional(b[0]) { x1 -> b.string(x1) })) }
|
|
212
|
+
"Context#getMainExecutor()Ljava/util/concurrent/Executor;" -> b.run { if (Build.VERSION.SDK_INT < 28) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getMainExecutor()) }
|
|
213
|
+
"Context#getOpPackageName()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 29) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getOpPackageName()) }
|
|
214
|
+
"Context#getAttributionTag()Ljava/lang/String;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getAttributionTag()) }
|
|
215
|
+
"Context#createAttributionContext(Ljava/lang/String;)Landroid/content/Context;" -> b.run { if (Build.VERSION.SDK_INT < 30) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).createAttributionContext(b.optional(b[0]) { x1 -> b.string(x1) })) }
|
|
216
|
+
"Context#isUiContext()Z" -> b.run { if (Build.VERSION.SDK_INT < 31) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).isUiContext()) }
|
|
217
|
+
"Context#revokeSelfPermissionOnKill(Ljava/lang/String;)V" -> b.run { if (Build.VERSION.SDK_INT < 33) throw TokamakBinding.unavailable; b.target(android.content.Context::class.java).revokeSelfPermissionOnKill(b.string(b[0])); null }
|
|
218
|
+
"Context#revokeSelfPermissionsOnKill(Ljava/util/Collection;)V" -> b.run { if (Build.VERSION.SDK_INT < 33) throw TokamakBinding.unavailable; b.target(android.content.Context::class.java).revokeSelfPermissionsOnKill(b.list(b[0]) { x1 -> b.optional(x1) { x2 -> b.string(x2) } }); null }
|
|
219
|
+
"Context#createDeviceContext(I)Landroid/content/Context;" -> b.run { if (Build.VERSION.SDK_INT < 34) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).createDeviceContext(b.int(b[0]))) }
|
|
220
|
+
"Context#getDeviceId()I" -> b.run { if (Build.VERSION.SDK_INT < 34) throw TokamakBinding.unavailable; b.encode(b.target(android.content.Context::class.java).getDeviceId()) }
|
|
221
|
+
else -> b.unsupported(method)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private fun callContext_BindServiceFlags(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
225
|
+
when (method) {
|
|
226
|
+
"Context.BindServiceFlags#of(J)Landroid/content/Context\$BindServiceFlags;" -> b.run { if (Build.VERSION.SDK_INT < 34) throw TokamakBinding.unavailable; b.encode(android.content.Context.BindServiceFlags.of(b.long(b[0]))) }
|
|
227
|
+
else -> b.unsupported(method)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private fun callCancellationSignal(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
231
|
+
when (method) {
|
|
232
|
+
"CancellationSignal#<init>()V" -> b.run { if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable; b.encode(android.os.CancellationSignal()) }
|
|
233
|
+
"CancellationSignal#isCanceled()Z" -> b.run { if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable; b.encode(b.target(android.os.CancellationSignal::class.java).isCanceled()) }
|
|
234
|
+
"CancellationSignal#throwIfCanceled()V" -> b.run { if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable; b.target(android.os.CancellationSignal::class.java).throwIfCanceled(); null }
|
|
235
|
+
"CancellationSignal#cancel()V" -> b.run { if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable; b.target(android.os.CancellationSignal::class.java).cancel(); null }
|
|
236
|
+
"CancellationSignal#setOnCancelListener(Landroid/os/CancellationSignal\$OnCancelListener;)V" -> b.run { if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable; b.target(android.os.CancellationSignal::class.java).setOnCancelListener(b.optional(b[0]) { x1 -> b.obj(x1, android.os.CancellationSignal.OnCancelListener::class.java) }); null }
|
|
237
|
+
else -> b.unsupported(method)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private fun callCancellationSignal_OnCancelListener(method: String, b: TokamakBinding): (() -> Unit)? =
|
|
241
|
+
when (method) {
|
|
242
|
+
"CancellationSignal.OnCancelListener#onCancel()V" -> b.run { if (Build.VERSION.SDK_INT < 16) throw TokamakBinding.unavailable; b.target(android.os.CancellationSignal.OnCancelListener::class.java).onCancel(); null }
|
|
243
|
+
else -> b.unsupported(method)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
@androidx.annotation.RequiresApi(28)
|
|
247
|
+
private class BiometricPrompt_AuthenticationCallbackImplementation(private val binding: TokamakBinding) : android.hardware.biometrics.BiometricPrompt.AuthenticationCallback() {
|
|
248
|
+
override fun onAuthenticationError(errorCode: Int, errString: CharSequence?) {
|
|
249
|
+
if (!binding.call("onAuthenticationError") { b -> listOf(b.encode(errorCode), b.encode(errString)) }) super.onAuthenticationError(errorCode, errString)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
override fun onAuthenticationHelp(helpCode: Int, helpString: CharSequence?) {
|
|
253
|
+
if (!binding.call("onAuthenticationHelp") { b -> listOf(b.encode(helpCode), b.encode(helpString)) }) super.onAuthenticationHelp(helpCode, helpString)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
override fun onAuthenticationSucceeded(result: android.hardware.biometrics.BiometricPrompt.AuthenticationResult?) {
|
|
257
|
+
if (!binding.call("onAuthenticationSucceeded") { b -> listOf(b.encode(result)) }) super.onAuthenticationSucceeded(result)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
override fun onAuthenticationFailed() {
|
|
261
|
+
if (!binding.call("onAuthenticationFailed") { b -> listOf() }) super.onAuthenticationFailed()
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
@androidx.annotation.RequiresApi(16)
|
|
266
|
+
private class CancellationSignal_OnCancelListenerImplementation(private val binding: TokamakBinding) : android.os.CancellationSignal.OnCancelListener {
|
|
267
|
+
override fun onCancel() {
|
|
268
|
+
binding.call("onCancel") { b -> listOf() }
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
@@ -20,12 +20,13 @@ class TokamakLocalAuthenticationPlugin(
|
|
|
20
20
|
|
|
21
21
|
private val biometrics = host.context.getSystemService(BiometricManager::class.java)
|
|
22
22
|
|
|
23
|
-
override fun call(method: String, arguments: Any?, reply: TokamakPluginReply) {
|
|
23
|
+
override fun call(method: String, arguments: Any?, reply: TokamakPluginReply): (() -> Unit)? {
|
|
24
24
|
when (method) {
|
|
25
25
|
"status" -> reply(Result.success(status(requireObject(arguments))))
|
|
26
|
-
"authenticate" -> authenticate(requireObject(arguments), reply)
|
|
26
|
+
"authenticate" -> return authenticate(requireObject(arguments), reply)
|
|
27
27
|
else -> super.call(method, arguments, reply)
|
|
28
28
|
}
|
|
29
|
+
return null
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
private fun status(request: JSONObject): String =
|
|
@@ -35,12 +36,12 @@ class TokamakLocalAuthenticationPlugin(
|
|
|
35
36
|
else -> "unavailable"
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
private fun authenticate(request: JSONObject, reply: TokamakPluginReply) {
|
|
39
|
+
private fun authenticate(request: JSONObject, reply: TokamakPluginReply): () -> Unit {
|
|
39
40
|
val authenticators = authenticators(request)
|
|
40
41
|
val prompt = request.requireString("prompt")
|
|
41
42
|
if (prompt.isEmpty()) throw TokamakPluginError.typeError("prompt must be a non-empty string")
|
|
42
43
|
host.requireOwnerAuthentication(authenticators)
|
|
43
|
-
host.authenticateOwner(prompt, authenticators, null, reply) { reply(Result.success(null)) }
|
|
44
|
+
return host.authenticateOwner(prompt, authenticators, null, reply) { reply(Result.success(null)) }
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
private fun authenticators(request: JSONObject): Int {
|