treezor packages and native configs adapted to main app
This commit is contained in:
BIN
packages/flutter_treezor_entrust_sdk_bridge/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
Extension Discovery Cache
|
||||
=========================
|
||||
|
||||
This folder is used by `package:extension_discovery` to cache lists of
|
||||
packages that contains extensions for other packages.
|
||||
|
||||
DO NOT USE THIS FOLDER
|
||||
----------------------
|
||||
|
||||
* Do not read (or rely) the contents of this folder.
|
||||
* Do write to this folder.
|
||||
|
||||
If you're interested in the lists of extensions stored in this folder use the
|
||||
API offered by package `extension_discovery` to get this information.
|
||||
|
||||
If this package doesn't work for your use-case, then don't try to read the
|
||||
contents of this folder. It may change, and will not remain stable.
|
||||
|
||||
Use package `extension_discovery`
|
||||
---------------------------------
|
||||
|
||||
If you want to access information from this folder.
|
||||
|
||||
Feel free to delete this folder
|
||||
-------------------------------
|
||||
|
||||
Files in this folder act as a cache, and the cache is discarded if the files
|
||||
are older than the modification time of `.dart_tool/package_config.json`.
|
||||
|
||||
Hence, it should never be necessary to clear this cache manually, if you find a
|
||||
need to do please file a bug.
|
||||
@@ -0,0 +1 @@
|
||||
{"version":2,"entries":[{"package":"flutter_treezor_entrust_sdk_bridge","rootUri":"../","packageUri":"lib/"}]}
|
||||
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"configVersion": 2,
|
||||
"packages": [
|
||||
{
|
||||
"name": "async",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/async-2.11.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.18"
|
||||
},
|
||||
{
|
||||
"name": "boolean_selector",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.17"
|
||||
},
|
||||
{
|
||||
"name": "characters",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/characters-1.4.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "clock",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/clock-1.1.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "collection",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/collection-1.19.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "fake_async",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/fake_async-1.3.3",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "flutter",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "flutter_lints",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_lints-4.0.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "flutter_test",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter_test",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/leak_tracker-11.0.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_flutter_testing",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.10",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_testing",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "lints",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/lints-4.0.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "matcher",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/matcher-0.12.17",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "material_color_utilities",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.17"
|
||||
},
|
||||
{
|
||||
"name": "meta",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/meta-1.16.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path-1.9.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "plugin_platform_interface",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.0"
|
||||
},
|
||||
{
|
||||
"name": "sky_engine",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/bin/cache/pkg/sky_engine",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "source_span",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/source_span-1.10.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.18"
|
||||
},
|
||||
{
|
||||
"name": "stack_trace",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/stack_trace-1.12.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "stream_channel",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/stream_channel-2.1.4",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "string_scanner",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/string_scanner-1.3.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "term_glyph",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/term_glyph-1.2.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "test_api",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/test_api-0.7.6",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.5"
|
||||
},
|
||||
{
|
||||
"name": "vector_math",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/vector_math-2.2.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "vm_service",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/vm_service-14.3.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "flutter_treezor_entrust_sdk_bridge",
|
||||
"rootUri": "../",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.5"
|
||||
}
|
||||
],
|
||||
"generator": "pub",
|
||||
"generatorVersion": "3.9.2",
|
||||
"flutterRoot": "file:///Users/juliandalcalaf/Development/flutter",
|
||||
"flutterVersion": "3.35.7",
|
||||
"pubCache": "file:///Users/juliandalcalaf/.pub-cache"
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
{
|
||||
"roots": [
|
||||
"flutter_treezor_entrust_sdk_bridge"
|
||||
],
|
||||
"packages": [
|
||||
{
|
||||
"name": "flutter_treezor_entrust_sdk_bridge",
|
||||
"version": "1.0.2",
|
||||
"dependencies": [
|
||||
"flutter",
|
||||
"plugin_platform_interface"
|
||||
],
|
||||
"devDependencies": [
|
||||
"flutter_lints",
|
||||
"flutter_test"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flutter_lints",
|
||||
"version": "4.0.0",
|
||||
"dependencies": [
|
||||
"lints"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flutter_test",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"clock",
|
||||
"collection",
|
||||
"fake_async",
|
||||
"flutter",
|
||||
"leak_tracker_flutter_testing",
|
||||
"matcher",
|
||||
"meta",
|
||||
"path",
|
||||
"stack_trace",
|
||||
"stream_channel",
|
||||
"test_api",
|
||||
"vector_math"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "plugin_platform_interface",
|
||||
"version": "2.1.8",
|
||||
"dependencies": [
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flutter",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"characters",
|
||||
"collection",
|
||||
"material_color_utilities",
|
||||
"meta",
|
||||
"sky_engine",
|
||||
"vector_math"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lints",
|
||||
"version": "4.0.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "stream_channel",
|
||||
"version": "2.1.4",
|
||||
"dependencies": [
|
||||
"async"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "meta",
|
||||
"version": "1.16.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "collection",
|
||||
"version": "1.19.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_flutter_testing",
|
||||
"version": "3.0.10",
|
||||
"dependencies": [
|
||||
"flutter",
|
||||
"leak_tracker",
|
||||
"leak_tracker_testing",
|
||||
"matcher",
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "vector_math",
|
||||
"version": "2.2.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "stack_trace",
|
||||
"version": "1.12.1",
|
||||
"dependencies": [
|
||||
"path"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "clock",
|
||||
"version": "1.1.2",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "fake_async",
|
||||
"version": "1.3.3",
|
||||
"dependencies": [
|
||||
"clock",
|
||||
"collection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
"version": "1.9.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "matcher",
|
||||
"version": "0.12.17",
|
||||
"dependencies": [
|
||||
"async",
|
||||
"meta",
|
||||
"stack_trace",
|
||||
"term_glyph",
|
||||
"test_api"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "test_api",
|
||||
"version": "0.7.6",
|
||||
"dependencies": [
|
||||
"async",
|
||||
"boolean_selector",
|
||||
"collection",
|
||||
"meta",
|
||||
"source_span",
|
||||
"stack_trace",
|
||||
"stream_channel",
|
||||
"string_scanner",
|
||||
"term_glyph"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "sky_engine",
|
||||
"version": "0.0.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "material_color_utilities",
|
||||
"version": "0.11.1",
|
||||
"dependencies": [
|
||||
"collection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "characters",
|
||||
"version": "1.4.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "async",
|
||||
"version": "2.11.0",
|
||||
"dependencies": [
|
||||
"collection",
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_testing",
|
||||
"version": "3.0.2",
|
||||
"dependencies": [
|
||||
"leak_tracker",
|
||||
"matcher",
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker",
|
||||
"version": "11.0.2",
|
||||
"dependencies": [
|
||||
"clock",
|
||||
"collection",
|
||||
"meta",
|
||||
"path",
|
||||
"vm_service"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "term_glyph",
|
||||
"version": "1.2.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "string_scanner",
|
||||
"version": "1.3.0",
|
||||
"dependencies": [
|
||||
"source_span"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "source_span",
|
||||
"version": "1.10.0",
|
||||
"dependencies": [
|
||||
"collection",
|
||||
"path",
|
||||
"term_glyph"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "boolean_selector",
|
||||
"version": "2.1.1",
|
||||
"dependencies": [
|
||||
"source_span",
|
||||
"string_scanner"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "vm_service",
|
||||
"version": "14.3.0",
|
||||
"dependencies": []
|
||||
}
|
||||
],
|
||||
"configVersion": 1
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
3.35.7
|
||||
3
packages/flutter_treezor_entrust_sdk_bridge/CHANGELOG.md
Normal file
3
packages/flutter_treezor_entrust_sdk_bridge/CHANGELOG.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 0.0.1
|
||||
|
||||
* TODO: Describe initial release.
|
||||
1
packages/flutter_treezor_entrust_sdk_bridge/LICENSE
Normal file
1
packages/flutter_treezor_entrust_sdk_bridge/LICENSE
Normal file
@@ -0,0 +1 @@
|
||||
TODO: Add your license here.
|
||||
184
packages/flutter_treezor_entrust_sdk_bridge/README.md
Normal file
184
packages/flutter_treezor_entrust_sdk_bridge/README.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# flutter_treezor_entrust_sdk_bridge
|
||||
## Requirement
|
||||
|
||||
### For Android :
|
||||
|
||||
- Minimum android sdk version : 22
|
||||
- Maximum android sdk version : 34
|
||||
|
||||
### For IOS :
|
||||
- Xcode 13.0.0 or later
|
||||
|
||||
## Install
|
||||
|
||||
### On main project
|
||||
|
||||
```
|
||||
dependencies:
|
||||
....
|
||||
flutter:
|
||||
sdk: flutter
|
||||
|
||||
flutter_treezor_entrust_sdk_bridge:
|
||||
path: [pathToPluginFolder]/
|
||||
```
|
||||
|
||||
#### launch the exemple app
|
||||
|
||||
```
|
||||
flutter run
|
||||
```
|
||||
|
||||
## Main app integration requirement
|
||||
|
||||
### Android
|
||||
Follow Android Entrust Documentation https://doc.antelop-solutions.com/latest/wallet/sdk/android_integration.html
|
||||
|
||||
### Ios
|
||||
Follow Ios Entrust Documentation https://doc.antelop-solutions.com/latest/wallet/sdk/ios_integration.html
|
||||
|
||||
You can check the example app for some ios configuration
|
||||
|
||||
## How to use the SDK
|
||||
|
||||
### register
|
||||
|
||||
```
|
||||
Future<void> connectSDK() async {
|
||||
WalletManagerModule walletManagerModule = _flutterTreezorEntrustSdkBridgePlugin.getWalletManagerModule();
|
||||
|
||||
WalletManagerCallbacks walletManagerCallbacks = WalletManagerCallbacks(
|
||||
onProvisioningRequired:() => {
|
||||
onWalletManagerProvisioningRequired(walletManagerModule)
|
||||
},
|
||||
onCredentialsRequired:(reason, error) => {
|
||||
onWalletManageronCredentialsRequired(reason, error, walletManagerModule)
|
||||
},
|
||||
onConnectionError:(error) => {
|
||||
debugPrint("onConnectionError error: $error")
|
||||
},
|
||||
onConnectionSuccess:() => {
|
||||
onWalletManagerOnConnectionSuccess()
|
||||
}
|
||||
);
|
||||
await walletManagerModule.initialize(walletManagerCallbacks);
|
||||
walletManagerModule.connect(null, null);
|
||||
}
|
||||
|
||||
void onWalletManagerProvisioningRequired(WalletManagerModule walletManagerModule) async {
|
||||
debugPrint("onProvisioningRequired");
|
||||
String activationCode = await getWalletActivationCode();
|
||||
debugPrint("onWalletManagerProvisioningRequired activationCode: $activationCode");
|
||||
|
||||
WalletProvisioningModule walletProvisioningModule = _flutterTreezorEntrustSdkBridgePlugin.getWalletProvisioningModule();
|
||||
|
||||
WalletProvisioningCallbacks walletProvisioningCallbacks = WalletProvisioningCallbacks(
|
||||
onInitializationSuccess:() => {
|
||||
debugPrint("onInitializationSuccess"),
|
||||
walletProvisioningModule.checkEligibility(false)
|
||||
},
|
||||
onInitializationError:(error) => {
|
||||
debugPrint("onInitializationError")
|
||||
},
|
||||
onPermissionNotGranted:(permissions) => {
|
||||
debugPrint("onPermissionNotGranted")
|
||||
},
|
||||
onDeviceEligible:(fingerprintAllowed) => {
|
||||
debugPrint("onDeviceEligible"),
|
||||
walletProvisioningModule.launch(activationCode.substring(2))
|
||||
},
|
||||
onDeviceNotEligible:(reason, denialReference) => {
|
||||
debugPrint("onDeviceNotEligible")
|
||||
},
|
||||
onCheckEligibilityError:(error) => {
|
||||
debugPrint("onCheckEligibilityError")
|
||||
},
|
||||
onProvisioningPending:() => {
|
||||
debugPrint("onProvisioningPending")
|
||||
},
|
||||
onProvisioningSuccess:() => {
|
||||
debugPrint("onProvisioningSuccess"),
|
||||
walletManagerModule.connect(null, null)
|
||||
},
|
||||
onProvisioningError:(error) => {
|
||||
debugPrint("onProvisioningError")
|
||||
}
|
||||
);
|
||||
await walletProvisioningModule.initialize(walletProvisioningCallbacks);
|
||||
}
|
||||
|
||||
void onWalletManageronCredentialsRequired(String reason, AntelopError? error, WalletManagerModule walletManagerModule) async {
|
||||
debugPrint("onCredentialsRequired reason : $reason error: $error");
|
||||
switch (reason.toLowerCase()) {
|
||||
case "notset":
|
||||
walletManagerModule.connect(null, newPasscode);
|
||||
break;
|
||||
case "tobechanged":
|
||||
walletManagerModule.connect(passcode, null);
|
||||
break;
|
||||
case "validationneeded":
|
||||
walletManagerModule.connect(passcode, newPasscode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### generate siganture
|
||||
|
||||
Auth
|
||||
|
||||
```
|
||||
void _startSignatureProcess(String patternAuth) async {
|
||||
debugPrint("Starting signature process with $patternAuth");
|
||||
|
||||
CustomerAuthenticatedSignatureModule customerAuthenticatedSignatureModule =
|
||||
_flutterTreezorEntrustSdkBridgePlugin.getCustomerAuthenticatedSignatureModule(patternAuth, "", [payloadString]);
|
||||
|
||||
CustomCustomerAuthenticatedProcessCallback customCustomerAuthenticatedProcessCallback =
|
||||
CustomCustomerAuthenticatedProcessCallback(
|
||||
onCustomerCredentialsRequired: () => {
|
||||
_signatureOnCustomerCredentialsRequired(patternAuth, customerAuthenticatedSignatureModule)
|
||||
},
|
||||
onCustomerCredentialsInvalid: (reason) => {
|
||||
debugPrint("onCustomerCredentialsInvalid")
|
||||
},
|
||||
onProcessStart: () => {
|
||||
debugPrint("onProcessStart")
|
||||
},
|
||||
onProcessSuccess: () => {
|
||||
_signatureOnProcessSuccess(customerAuthenticatedSignatureModule)
|
||||
},
|
||||
onError: (error) => {
|
||||
debugPrint("onError: $error")
|
||||
},
|
||||
onAuthenticationDeclined: () => {
|
||||
debugPrint("onAuthenticationDeclined")
|
||||
},
|
||||
);
|
||||
customerAuthenticatedSignatureModule.signWithCustomAuthentication(customCustomerAuthenticatedProcessCallback);
|
||||
}
|
||||
|
||||
// Handle onCustomerCredentialsRequired based on patternAuth
|
||||
void _signatureOnCustomerCredentialsRequired(String patternAuth, CustomerAuthenticatedSignatureModule customerAuthenticatedSignatureModule) {
|
||||
debugPrint("onCustomerCredentialsRequired");
|
||||
switch (patternAuth) {
|
||||
case "PIN":
|
||||
customerAuthenticatedSignatureModule.setPinCustomerCredentials(newPasscode);
|
||||
break;
|
||||
case "BIO":
|
||||
customerAuthenticatedSignatureModule.setBioCustomerCredentials("Title", "SubTitle");
|
||||
break;
|
||||
case "NONE":
|
||||
default:
|
||||
customerAuthenticatedSignatureModule.setPinCustomerCredentials(newPasscode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle onProcessSuccess
|
||||
void _signatureOnProcessSuccess(CustomerAuthenticatedSignatureModule customerAuthenticatedSignatureModule) async {
|
||||
debugPrint("onProcessSuccess");
|
||||
String? scaResult = await customerAuthenticatedSignatureModule.getResult();
|
||||
}
|
||||
```
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/.DS_Store
vendored
Normal file
Binary file not shown.
223
packages/flutter_treezor_entrust_sdk_bridge/android/build.gradle
Normal file
223
packages/flutter_treezor_entrust_sdk_bridge/android/build.gradle
Normal file
@@ -0,0 +1,223 @@
|
||||
import java.security.MessageDigest
|
||||
import java.security.NoSuchAlgorithmException
|
||||
group = "com.treezor.flutter_treezor_entrust_sdk_bridge"
|
||||
version = "1.0"
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("com.android.tools.build:gradle:8.1.0")
|
||||
}
|
||||
}
|
||||
|
||||
String localMavenPath = project.mkdir("build").absolutePath
|
||||
|
||||
rootProject.allprojects {
|
||||
repositories {
|
||||
maven { url "file://$localMavenPath" }
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: "com.android.library"
|
||||
|
||||
android {
|
||||
if (project.android.hasProperty("namespace")) {
|
||||
namespace = "com.treezor.flutter_treezor_entrust_sdk_bridge"
|
||||
}
|
||||
|
||||
compileSdk = 34
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 21
|
||||
}
|
||||
|
||||
packagingOptions{
|
||||
jniLibs {
|
||||
keepDebugSymbols += "*/*/libscm.so"
|
||||
useLegacyPackaging = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.work:work-runtime:2.7.1'
|
||||
implementation 'com.google.firebase:firebase-messaging:23.0.0'
|
||||
implementation 'com.google.android.gms:play-services-auth:17.0.0'
|
||||
implementation "androidx.appcompat:appcompat:1.4.0"
|
||||
implementation "com.google.android.material:material:1.5.0"
|
||||
implementation "androidx.biometric:biometric:1.1.0"
|
||||
|
||||
testImplementation 'org.jetbrains.kotlin:kotlin-test'
|
||||
testImplementation 'org.mockito:mockito-core:5.0.0'
|
||||
}
|
||||
|
||||
testOptions {
|
||||
unitTests.all {
|
||||
testLogging {
|
||||
events "passed", "skipped", "failed", "standardOut", "standardError"
|
||||
outputs.upToDateWhen {false}
|
||||
showStandardStreams = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String aarPath = localMavenPath
|
||||
task useAar {
|
||||
File file = project.file("libs")
|
||||
if (file.exists() && file.isDirectory()) {
|
||||
file.listFiles(new FileFilter() {
|
||||
@Override
|
||||
boolean accept(File pathname) {
|
||||
return pathname.name.endsWith(".aar")
|
||||
}
|
||||
}).each { item ->
|
||||
String aarName = item.name.substring(0, item.name.length() - 4)
|
||||
String[] aarInfo = aarName.split("-")
|
||||
String sha1 = getFileSha1(item)
|
||||
String md5 = getFileMD5(item)
|
||||
println("aar: " + aarInfo + " file sha1:" + sha1 + " md5:" + md5)
|
||||
String fromStr = item.path
|
||||
|
||||
String intoStr = aarPath + "/" + aarInfo[0].replace(".", "/") + "/" + aarInfo[1] + "/" + aarInfo[2]
|
||||
|
||||
String newName = aarInfo[1] + "-" + aarInfo[2] + ".aar"
|
||||
|
||||
project.copy {
|
||||
from fromStr
|
||||
into intoStr
|
||||
rename(item.name, newName)
|
||||
}
|
||||
|
||||
project.file(intoStr + "/" + newName + ".md5").write(md5)
|
||||
project.file(intoStr + "/" + newName + ".sha1").write(sha1)
|
||||
|
||||
String pomPath = intoStr + "/" + newName.substring(0, newName.length() - 4) + ".pom"
|
||||
project.file(pomPath).write(createPomStr(aarInfo[0], aarInfo[1], aarInfo[2]))
|
||||
project.file(pomPath + ".md5").write(getFileMD5(project.file(pomPath)))
|
||||
project.file(pomPath + ".sha1").write(getFileSha1(project.file(pomPath)))
|
||||
|
||||
String metadataPath = project.file(intoStr).getParentFile().path + "/maven-metadata.xml"
|
||||
project.file(metadataPath).write(createMetadataStr(aarInfo[0], aarInfo[1], aarInfo[2]))
|
||||
project.file(metadataPath + ".md5").write(getFileMD5(project.file(metadataPath)))
|
||||
project.file(metadataPath + ".sha1").write(getFileSha1(project.file(metadataPath)))
|
||||
dependencies {
|
||||
implementation "${aarInfo[0]}:${aarInfo[1]}:${aarInfo[2]}"
|
||||
compileOnly fileTree(dir: "libs", includes: ['*.jar'])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static String createMetadataStr(String groupId, String artifactId, String version) {
|
||||
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<metadata>\n" +
|
||||
" <groupId>$groupId</groupId>\n" +
|
||||
" <artifactId>$artifactId</artifactId>\n" +
|
||||
" <versioning>\n" +
|
||||
" <release>$version</release>\n" +
|
||||
" <versions>\n" +
|
||||
" <version>$version</version>\n" +
|
||||
" </versions>\n" +
|
||||
" <lastUpdated>${new Date().format('yyyyMMdd')}000000</lastUpdated>\n" +
|
||||
" </versioning>\n" +
|
||||
"</metadata>\n"
|
||||
}
|
||||
|
||||
static String createPomStr(String groupId, String artifactId, String version) {
|
||||
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
|
||||
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
|
||||
" <modelVersion>4.0.0</modelVersion>\n" +
|
||||
" <groupId>$groupId</groupId>\n" +
|
||||
" <artifactId>$artifactId</artifactId>\n" +
|
||||
" <version>$version</version>\n" +
|
||||
" <packaging>aar</packaging>\n" +
|
||||
"</project>\n"
|
||||
}
|
||||
|
||||
static String getFileSha1(File file) {
|
||||
FileInputStream input = null;
|
||||
try {
|
||||
input = new FileInputStream(file);
|
||||
MessageDigest digest = MessageDigest.getInstance("SHA-1");
|
||||
byte[] buffer = new byte[1024 * 1024 * 10];
|
||||
|
||||
int len = 0;
|
||||
while ((len = input.read(buffer)) > 0) {
|
||||
digest.update(buffer, 0, len);
|
||||
}
|
||||
String sha1 = new BigInteger(1, digest.digest()).toString(16);
|
||||
int length = 40 - sha1.length();
|
||||
if (length > 0) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
sha1 = "0" + sha1;
|
||||
}
|
||||
}
|
||||
return sha1;
|
||||
}
|
||||
catch (IOException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
catch (NoSuchAlgorithmException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
if (input != null) {
|
||||
input.close();
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static String getFileMD5(File file) {
|
||||
FileInputStream input = null;
|
||||
try {
|
||||
input = new FileInputStream(file);
|
||||
MessageDigest digest = MessageDigest.getInstance("MD5");
|
||||
byte[] buffer = new byte[1024 * 1024 * 10];
|
||||
|
||||
int len = 0;
|
||||
while ((len = input.read(buffer)) > 0) {
|
||||
digest.update(buffer, 0, len);
|
||||
}
|
||||
String md5 = new BigInteger(1, digest.digest()).toString(16);
|
||||
int length = 32 - md5.length();
|
||||
if (length > 0) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
md5 = "0" + md5;
|
||||
}
|
||||
}
|
||||
return md5;
|
||||
}
|
||||
catch (IOException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
catch (NoSuchAlgorithmException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
if (input != null) {
|
||||
input.close();
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
a997390d9ff195d347c7babfcb3c40eb
|
||||
@@ -0,0 +1 @@
|
||||
1876ddcc5d9e9ac1925e2b72c0dc648ee711d7a3
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.entrust.antelop</groupId>
|
||||
<artifactId>antelop</artifactId>
|
||||
<version>2.6.4</version>
|
||||
<packaging>aar</packaging>
|
||||
</project>
|
||||
@@ -0,0 +1 @@
|
||||
7d1d617ace01a32802a824f8a906b1c8
|
||||
@@ -0,0 +1 @@
|
||||
87a33be94497ce90c9bcd1b6d7d37bbcedcd0d61
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<groupId>com.entrust.antelop</groupId>
|
||||
<artifactId>antelop</artifactId>
|
||||
<versioning>
|
||||
<release>2.6.4</release>
|
||||
<versions>
|
||||
<version>2.6.4</version>
|
||||
</versions>
|
||||
<lastUpdated>20260121000000</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
||||
@@ -0,0 +1 @@
|
||||
2b14702afabf7dabc6ee436857156114
|
||||
@@ -0,0 +1 @@
|
||||
238e2d82008afe02e0766c6273b14984c94b9375
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="android" name="Android">
|
||||
<configuration>
|
||||
<option name="ALLOW_USER_CONFIGURATION" value="false" />
|
||||
<option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
|
||||
<option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
|
||||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
|
||||
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
|
||||
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
|
||||
<option name="LIBS_FOLDER_RELATIVE_PATH" value="/src/main/libs" />
|
||||
<option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/src/main/proguard_logs" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="17" jdkType="JavaSDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Flutter for Android" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
7
packages/flutter_treezor_entrust_sdk_bridge/android/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
7
packages/flutter_treezor_entrust_sdk_bridge/android/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
249
packages/flutter_treezor_entrust_sdk_bridge/android/gradlew
vendored
Executable file
249
packages/flutter_treezor_entrust_sdk_bridge/android/gradlew
vendored
Executable file
@@ -0,0 +1,249 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
92
packages/flutter_treezor_entrust_sdk_bridge/android/gradlew.bat
vendored
Normal file
92
packages/flutter_treezor_entrust_sdk_bridge/android/gradlew.bat
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
sdk.dir=/Users/salah.aldemachki/Library/Android/sdk
|
||||
flutter.sdk=/Users/salah.aldemachki/flutterSdk/flutter
|
||||
@@ -0,0 +1 @@
|
||||
rootProject.name = 'flutter_treezor_entrust_sdk_bridge'
|
||||
@@ -0,0 +1,9 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.treezor.flutter_treezor_entrust_sdk_bridge">
|
||||
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
||||
<application>
|
||||
<meta-data
|
||||
android:name="fr.antelop.notificationService"
|
||||
android:value="com.treezor.flutter_treezor_entrust_sdk_bridge.WalletNotificationServiceModule" />
|
||||
</application>
|
||||
</manifest>
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/src/main/java/com/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/src/main/java/com/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/src/main/java/com/treezor/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/android/src/main/java/com/treezor/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
package com.treezor;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import fr.antelop.sdk.AntelopError;
|
||||
import fr.antelop.sdk.exception.WalletValidationException;
|
||||
|
||||
public class NativeModuleBase {
|
||||
|
||||
/** Helpers **/
|
||||
public static Map<String, Object> serializeAntelopError(AntelopError error) {
|
||||
Map<String, Object> errorMap = new HashMap<>();
|
||||
errorMap.put("message", error.getMessage());
|
||||
errorMap.put("reason", error.getReason());
|
||||
errorMap.put("code", error.getCode().toString());
|
||||
errorMap.put("type", "AntelopError");
|
||||
return errorMap;
|
||||
}
|
||||
|
||||
public static Map<String, Object> serializeWalletValidationException (WalletValidationException error) {
|
||||
Map<String, Object> errorMap = new HashMap<>();
|
||||
errorMap.put("domain", error.getDomain());
|
||||
errorMap.put("code", error.getCode().toString());
|
||||
errorMap.put("message", error.getMessage());
|
||||
errorMap.put("type", "WalletValidationException");
|
||||
return errorMap;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.treezor.flutter_treezor_entrust_sdk_bridge;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.treezor.flutter_treezor_entrust_sdk_bridge.WalletNotificationServiceModule;
|
||||
import com.treezor.sca.CustomerAuthenticatedSignatureModule;
|
||||
import com.treezor.wallet.WalletManagerModule;
|
||||
import com.treezor.wallet.WalletProvisioningModule;
|
||||
|
||||
import io.flutter.embedding.engine.plugins.FlutterPlugin;
|
||||
import io.flutter.plugin.common.MethodCall;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
|
||||
import io.flutter.plugin.common.MethodChannel.Result;
|
||||
|
||||
/** FlutterTreezorEntrustSdkBridgePlugin */
|
||||
public class FlutterTreezorEntrustSdkBridgePlugin implements FlutterPlugin, MethodCallHandler {
|
||||
private static final String WALLET_MANAGER_CHANNEL = "WalletManager";
|
||||
private static final String WALLET_PROVISIONING_CHANNEL = "WalletProvisioning";
|
||||
private static final String CUSTOMER_AUTHENTICATED_SIGNATURE_CHANNEL = "CustomerAuthenticatedSignature";
|
||||
private static final String WALLET_NOTIFICATION_SERVICE_CHANNEL = "WalletNotificationService";
|
||||
|
||||
private MethodChannel walletManagerChannel;
|
||||
private MethodChannel walletProvisioningChannel;
|
||||
private MethodChannel customerAuthenticatedSignatureChannel;
|
||||
private MethodChannel walletNotificationServiceChannel;
|
||||
|
||||
private WalletManagerModule walletManagerModule;
|
||||
private WalletProvisioningModule walletProvisioningModule;
|
||||
private CustomerAuthenticatedSignatureModule customerAuthenticatedSignatureModule;
|
||||
private WalletNotificationServiceModule walletNotificationServiceModule;
|
||||
|
||||
@Override
|
||||
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
|
||||
Context context = flutterPluginBinding.getApplicationContext();
|
||||
|
||||
// Initialize channels for each module
|
||||
walletManagerChannel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), WALLET_MANAGER_CHANNEL);
|
||||
walletProvisioningChannel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), WALLET_PROVISIONING_CHANNEL);
|
||||
customerAuthenticatedSignatureChannel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), CUSTOMER_AUTHENTICATED_SIGNATURE_CHANNEL);
|
||||
walletNotificationServiceChannel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), WALLET_NOTIFICATION_SERVICE_CHANNEL);
|
||||
|
||||
// Set handlers for each module's channel
|
||||
walletManagerModule = new WalletManagerModule(context, walletManagerChannel, flutterPluginBinding);
|
||||
walletProvisioningModule = new WalletProvisioningModule(context, walletProvisioningChannel, flutterPluginBinding);
|
||||
customerAuthenticatedSignatureModule = new CustomerAuthenticatedSignatureModule(context, customerAuthenticatedSignatureChannel, flutterPluginBinding);
|
||||
walletNotificationServiceModule = new WalletNotificationServiceModule(context, walletNotificationServiceChannel, flutterPluginBinding);
|
||||
|
||||
walletManagerChannel.setMethodCallHandler(walletManagerModule);
|
||||
walletProvisioningChannel.setMethodCallHandler(walletProvisioningModule);
|
||||
customerAuthenticatedSignatureChannel.setMethodCallHandler(customerAuthenticatedSignatureModule);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
|
||||
result.notImplemented();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
|
||||
walletManagerChannel.setMethodCallHandler(null);
|
||||
walletProvisioningChannel.setMethodCallHandler(null);
|
||||
customerAuthenticatedSignatureChannel.setMethodCallHandler(null);
|
||||
walletNotificationServiceChannel.setMethodCallHandler(null);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
package com.treezor.flutter_treezor_entrust_sdk_bridge;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import io.flutter.embedding.engine.plugins.FlutterPlugin;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import fr.antelop.sdk.WalletLockReason;
|
||||
import fr.antelop.sdk.WalletNotificationServiceCallback;
|
||||
import fr.antelop.sdk.card.EmvApplicationActivationMethod;
|
||||
|
||||
public class WalletNotificationServiceModule implements WalletNotificationServiceCallback {
|
||||
static final String TAG = "WalletNotificationServiceModule";
|
||||
static final String EVENT_CHANNEL_NAME = "wallet_notification_service_events";
|
||||
|
||||
private Context context;
|
||||
private MethodChannel channel;
|
||||
private static EventChannel eventChannel;
|
||||
private static EventChannel.EventSink eventSink;
|
||||
private final Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
private static WalletNotificationServiceModule instance = null;
|
||||
|
||||
public WalletNotificationServiceModule() {
|
||||
// This will be called by Antelop via reflection.
|
||||
// You can initialize lazy values later if needed.
|
||||
Log.d(TAG, "WalletNotificationServiceModule instantiated by Antelop SDK");
|
||||
}
|
||||
|
||||
public WalletNotificationServiceModule(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
this.context = context;
|
||||
this.channel = channel;
|
||||
|
||||
eventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), EVENT_CHANNEL_NAME);
|
||||
eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
|
||||
@Override
|
||||
public void onListen(Object arguments, EventChannel.EventSink events) {
|
||||
eventSink = events;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(Object arguments) {
|
||||
eventSink = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static synchronized WalletNotificationServiceModule getInstance(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
if (instance == null) {
|
||||
instance = new WalletNotificationServiceModule(context, channel, flutterPluginBinding);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEmvApplicationActivationRequired(Context context, String emvAppId, List<EmvApplicationActivationMethod> methods) {
|
||||
sendEvent("onEmvApplicationActivationRequired", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEmvApplicationCredentialsUpdated(Context context) {
|
||||
sendEvent("onEmvApplicationCredentialsUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardsUpdated(Context context) {
|
||||
sendEvent("onCardsUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletLoaded(@NonNull Context context) {
|
||||
Log.d(TAG, "WalletNotificationServiceModule onWalletLoaded");
|
||||
sendEvent("onWalletLoaded", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletLocked(@NonNull Context context, @NonNull WalletLockReason reason) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("reason", reason.name());
|
||||
sendEvent("onWalletLocked", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletUnlocked(@NonNull Context context) {
|
||||
sendEvent("onWalletUnlocked", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLogout(@NonNull Context context) {
|
||||
sendEvent("onLogout", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletDeleted(@NonNull Context context) {
|
||||
Log.d(TAG, "WalletNotificationServiceModule onWalletDeleted");
|
||||
sendEvent("onWalletDeleted", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSettingsUpdated(@NonNull Context context) {
|
||||
sendEvent("onSettingsUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCountersUpdated(Context context) {
|
||||
sendEvent("onCountersUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCustomerCredentialsReset(Context context) {
|
||||
sendEvent("onCustomerCredentialsReset", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSunsetScheduled(@NonNull Context context, @NonNull Date sunsetDate) {
|
||||
sendEvent("onSunsetScheduled", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLostEligibility(@NonNull Context context) {
|
||||
sendEvent("onLostEligibility", null);
|
||||
}
|
||||
|
||||
private void sendEvent(String eventName, Map<String, Object> params) {
|
||||
if (eventSink == null) {
|
||||
Log.w(TAG, "EventSink is not initialized. Dropping event: " + eventName);
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, Object> event = new HashMap<>();
|
||||
event.put("event", eventName);
|
||||
event.put("params", params != null ? params : null);
|
||||
|
||||
mainHandler.post(() -> {
|
||||
try {
|
||||
eventSink.success(event);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to send event: " + eventName, e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
package com.treezor.globals;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.Base64;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Utils {
|
||||
static public byte[] parseHexFormattedBinary(String s) {
|
||||
if (s == null || s.length() == 0 || (s.length() % 2 != 0)) {
|
||||
throw new IllegalArgumentException("Hex String is not properly formatted : " + s);
|
||||
}
|
||||
|
||||
int len = s.length();
|
||||
byte[] out = new byte[len / 2];
|
||||
|
||||
for (int i = 0; i < len; i += 2) {
|
||||
int h = hexToBin(s.charAt(i));
|
||||
int l = hexToBin(s.charAt(i + 1));
|
||||
if (h == -1 || l == -1) {
|
||||
throw new IllegalArgumentException("Hex String contains illegal character " + s);
|
||||
}
|
||||
out[i / 2] = (byte) (h * 16 + l);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
static public byte[] parseStringToBin(String str) {
|
||||
int len = str.length();
|
||||
byte[] out = new byte[len / 2];
|
||||
int endIndx;
|
||||
int i = 0;
|
||||
|
||||
while (i < len) {
|
||||
endIndx = i + 2;
|
||||
if (endIndx > len) {
|
||||
endIndx = len - 1;
|
||||
}
|
||||
out[i / 2] = (byte) Integer.parseInt(str.substring(i, endIndx), 16);
|
||||
i += 2;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
private static int hexToBin(char ch) {
|
||||
if ('0' <= ch && ch <= '9')
|
||||
return ch - '0';
|
||||
if ('A' <= ch && ch <= 'F')
|
||||
return ch - 'A' + 10;
|
||||
if ('a' <= ch && ch <= 'f')
|
||||
return ch - 'a' + 10;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*public static byte[] readableNumbersArrayToBytes(ReadableArray bytesArray) {
|
||||
int size = bytesArray.size();
|
||||
byte[] bytes = new byte[size];
|
||||
for (int i = 0; i < size; i++) {
|
||||
bytes[i] = (byte)bytesArray.getInt(i);
|
||||
}
|
||||
return bytes;
|
||||
}*/
|
||||
|
||||
public static byte[] stringNumbersArrayToBytes(String bytesString) {
|
||||
int size = bytesString.length();
|
||||
byte[] bytes = new byte[size];
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
bytes[i] = (byte) (bytesString.charAt(i) - '0'); // Convert each char to its byte value
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/*public static byte[] readableNumbersArrayToBytes(ReadableArray bytesArray) {
|
||||
int size = bytesArray.size();
|
||||
byte[] bytes = new byte[size];
|
||||
for (int i = 0; i < size; i++) {
|
||||
bytes[i] = (byte)bytesArray.getInt(i);
|
||||
}
|
||||
return bytes;
|
||||
}*/
|
||||
|
||||
public static byte[] stringToBytes(String numbersString) {
|
||||
// Split the string by commas to get individual number strings
|
||||
String[] numberStrings = numbersString.split(",");
|
||||
|
||||
// Initialize byte array with the size of the split array
|
||||
byte[] bytes = new byte[numberStrings.length];
|
||||
|
||||
// Convert each number in the string array to a byte
|
||||
for (int i = 0; i < numberStrings.length; i++) {
|
||||
try {
|
||||
bytes[i] = (byte) Integer.parseInt(numberStrings[i].trim());
|
||||
} catch (NumberFormatException e) {
|
||||
// Handle the case where the string can't be converted to an integer
|
||||
throw new IllegalArgumentException("Invalid number format in input string: " + numbersString, e);
|
||||
}
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/*public static WritableArray BytesToWritableArray(byte[] bytes) {
|
||||
int size = bytes.length;
|
||||
WritableArray bytesArray = new WritableNativeArray();
|
||||
for (byte aByte : bytes) {
|
||||
bytesArray.pushInt(aByte);
|
||||
}
|
||||
return bytesArray;
|
||||
}*/
|
||||
|
||||
public static boolean stringValueIsNull (String value) {
|
||||
if(value == null || value == "null") {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
////////
|
||||
// SCA Helpers
|
||||
//////
|
||||
static public Drawable getImageDrawable(Context c, String i) throws IOException {
|
||||
try {
|
||||
byte[] imageBytes = Base64.decode(i, Base64.DEFAULT);
|
||||
Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
|
||||
Drawable d = new BitmapDrawable(bitmap);
|
||||
return d;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
static public boolean isBase64Encoded(String input) throws IOException {
|
||||
try {
|
||||
String pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
|
||||
Pattern r = Pattern.compile(pattern);
|
||||
Matcher m = r.matcher(input);
|
||||
return m.find();
|
||||
}
|
||||
catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,407 @@
|
||||
package com.treezor.sca;
|
||||
|
||||
import static com.treezor.NativeModuleBase.serializeAntelopError;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import fr.antelop.sdk.AntelopError;
|
||||
import fr.antelop.sdk.authentication.CustomCustomerAuthenticatedProcessCallback;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticatedProcess;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationCredentials;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationMethod;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationMethodType;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationPasscode;
|
||||
import fr.antelop.sdk.authentication.DefaultCustomerAuthenticatedProcessCallback;
|
||||
import fr.antelop.sdk.authentication.LocalAuthenticationErrorReason;
|
||||
import fr.antelop.sdk.authentication.prompt.CustomerAuthenticationFailureReason;
|
||||
import fr.antelop.sdk.authentication.prompt.CustomerAuthenticationPrompt;
|
||||
import fr.antelop.sdk.authentication.prompt.CustomerAuthenticationPromptBuilder;
|
||||
import fr.antelop.sdk.authentication.prompt.CustomerAuthenticationPromptCallback;
|
||||
import fr.antelop.sdk.authentication.prompt.DeviceBiometricCustomerAuthenticationPrompt;
|
||||
import fr.antelop.sdk.authentication.prompt.DeviceBiometricCustomerAuthenticationPromptBuilder;
|
||||
import fr.antelop.sdk.exception.WalletValidationException;
|
||||
import fr.antelop.sdk.sca.CustomerAuthenticatedSignature;
|
||||
|
||||
import fr.antelop.sdk.settings.WalletSettings;
|
||||
import io.flutter.embedding.engine.plugins.FlutterPlugin;
|
||||
import io.flutter.plugin.common.MethodCall;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
import io.flutter.plugin.common.MethodChannel.Result;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
|
||||
public class CustomerAuthenticatedSignatureModule implements MethodChannel.MethodCallHandler {
|
||||
static final String TAG = "CustomerAuthenticatedSignatureModule";
|
||||
static final String EVENT_CHANNEL_NAME = "customer_authenticated_signature_callback";
|
||||
private final Context context;
|
||||
|
||||
private EventChannel eventChannel;
|
||||
private EventChannel.EventSink eventSink;
|
||||
|
||||
private static CustomerAuthenticatedSignature instance = null;
|
||||
private static List<CustomerAuthenticationMethod> currentCustomerAuthenticationMethod = null;
|
||||
|
||||
public CustomerAuthenticatedSignatureModule(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
this.context = context;
|
||||
|
||||
eventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), EVENT_CHANNEL_NAME);
|
||||
eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
|
||||
@Override
|
||||
public void onListen(Object arguments, EventChannel.EventSink events) {
|
||||
eventSink = events;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(Object arguments) {
|
||||
eventSink = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
|
||||
switch (call.method) {
|
||||
case "_initialize":
|
||||
_initialize(call, result);
|
||||
break;
|
||||
case "signWithDefaultAuthentication":
|
||||
signWithDefaultAuthentication(result);
|
||||
break;
|
||||
case "signWithCustomAuthentication":
|
||||
signWithCustomAuthentication(result);
|
||||
break;
|
||||
/*case "getAuthenticatedMethods":
|
||||
getAuthenticatedMethods(result);
|
||||
break;*/
|
||||
case "setPinCustomerCredentials":
|
||||
setPinCustomerCredentials(
|
||||
call.argument("passcode"),
|
||||
result
|
||||
);
|
||||
break;
|
||||
case "setBioCustomerCredentials":
|
||||
setBioCustomerCredentials(
|
||||
call.argument("title"),
|
||||
call.argument("subTitle"),
|
||||
result);
|
||||
break;
|
||||
case "getAuthenticationPatternName":
|
||||
getAuthenticationPatternName(result);
|
||||
break;
|
||||
case "isOnline":
|
||||
isOnline(result);
|
||||
break;
|
||||
case "getMessage":
|
||||
getMessage(result);
|
||||
break;
|
||||
case "getType":
|
||||
getType(result);
|
||||
break;
|
||||
case "getResult":
|
||||
getResult(result);
|
||||
break;
|
||||
case "getInputData":
|
||||
getInputData(result);
|
||||
break;
|
||||
case "clean":
|
||||
clean(result);
|
||||
break;
|
||||
default:
|
||||
result.notImplemented();
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void _initialize(MethodCall call, MethodChannel.Result result) {
|
||||
String patternName = call.argument("patternName");
|
||||
String message = call.argument("message");
|
||||
String input = call.argument("input"); // assumed to be byte array here
|
||||
|
||||
byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);
|
||||
try {
|
||||
CustomerAuthenticatedSignature.SignatureType type = CustomerAuthenticatedSignature.SignatureType.LocalJws;
|
||||
instance = new CustomerAuthenticatedSignature(patternName, message, type, inputBytes);
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("INIT_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void signWithDefaultAuthentication(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Context context = this.context;
|
||||
instance.sign(context, new DefaultCustomerAuthenticatedProcessCallback() {
|
||||
@NonNull
|
||||
@Override
|
||||
public CustomerAuthenticationPrompt buildCustomerAuthenticationPrompt(@NonNull CustomerAuthenticationMethodType customerAuthenticationMethodType, @NonNull CustomerAuthenticationPromptBuilder customerAuthenticationPromptBuilder) {
|
||||
|
||||
return customerAuthenticationPromptBuilder.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProcessStart(@NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
sendEvent("onProcessStart", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProcessSuccess(@NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
sendEvent("onProcessSuccess", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull AntelopError antelopError, @NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("error", serializeAntelopError(antelopError));
|
||||
sendEvent("onError", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAuthenticationDeclined(@NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
sendEvent("onAuthenticationDeclined", null);
|
||||
}
|
||||
});
|
||||
result.success(null);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("SIGN_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void signWithCustomAuthentication(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
instance.sign(context, new CustomCustomerAuthenticatedProcessCallback() {
|
||||
@Override
|
||||
public void onCustomerCredentialsRequired(@NonNull List<CustomerAuthenticationMethod> list, @NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
/*List<String> methods = new ArrayList<>();
|
||||
for (CustomerAuthenticationMethod e : list) {
|
||||
listCustomerAuthenticationMethod.add(e.)
|
||||
}*/
|
||||
currentCustomerAuthenticationMethod = list;
|
||||
sendEvent("onCustomerCredentialsRequired", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCustomerCredentialsInvalid(@NonNull LocalAuthenticationErrorReason localAuthenticationErrorReason, @NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("reason", localAuthenticationErrorReason.name());
|
||||
sendEvent("onCustomerCredentialsInvalid", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProcessStart(@NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
sendEvent("onProcessStart", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProcessSuccess(@NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("signature", instance.getResult());
|
||||
sendEvent("onProcessSuccess", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull AntelopError antelopError, @NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("error", serializeAntelopError(antelopError));
|
||||
sendEvent("onError", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAuthenticationDeclined(@NonNull CustomerAuthenticatedProcess customerAuthenticatedProcess) {
|
||||
sendEvent("onAuthenticationDeclined", null);
|
||||
}
|
||||
});
|
||||
result.success(null);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("SIGN_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
/*private synchronized void getAuthenticatedMethods(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
List<CustomerAuthenticationMethodType> methods = instance.getAuthenticatedMethods();
|
||||
List<String> methodNames = methods.stream().map(Enum::name).collect(Collectors.toList());
|
||||
result.success(methodNames);
|
||||
} catch (Exception e) {
|
||||
result.error("METHODS_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}*/
|
||||
|
||||
private synchronized void setPinCustomerCredentials(String passcode, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
CustomerAuthenticationPasscode cred = new CustomerAuthenticationPasscode(passcode.getBytes());
|
||||
instance.setCustomerCredentials(context, cred);
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("SET_CREDENTIALS_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void setBioCustomerCredentials(String title, String subTitle, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
DeviceBiometricCustomerAuthenticationPromptBuilder deviceBioCustom = new DeviceBiometricCustomerAuthenticationPromptBuilder();
|
||||
deviceBioCustom.setTitle(title);
|
||||
deviceBioCustom.setSubtitle(subTitle);
|
||||
DeviceBiometricCustomerAuthenticationPrompt promptIK = deviceBioCustom.build();
|
||||
|
||||
CustomerAuthenticationMethod bioCustomerAuthenticationMethod = null;
|
||||
for(CustomerAuthenticationMethod customerAuthenticationMethod : currentCustomerAuthenticationMethod) {
|
||||
if (customerAuthenticationMethod.getType().equals(CustomerAuthenticationMethodType.DeviceBiometric)) {
|
||||
bioCustomerAuthenticationMethod = customerAuthenticationMethod;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
bioCustomerAuthenticationMethod.promptCustomer(context, promptIK, new CustomerAuthenticationPromptCallback() {
|
||||
|
||||
@Override
|
||||
public void onAuthenticationSuccess(@NonNull CustomerAuthenticationCredentials customerAuthenticationCredentials) {
|
||||
try {
|
||||
instance.setCustomerCredentials(context, customerAuthenticationCredentials);
|
||||
} catch (WalletValidationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
result.success(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAuthenticationFailure(@NonNull CustomerAuthenticationFailureReason customerAuthenticationFailureReason) {
|
||||
result.error("SET_CREDENTIALS_ERROR", "reason: " + customerAuthenticationFailureReason, null);
|
||||
}
|
||||
});
|
||||
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("SET_CREDENTIALS_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private synchronized void getAuthenticationPatternName(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
result.success(instance.getCustomerAuthenticationPatternName());
|
||||
} catch (Exception e) {
|
||||
result.error("GET_PATTERN_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void isOnline(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
result.success(instance.isOnline());
|
||||
} catch (Exception e) {
|
||||
result.error("ONLINE_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void getMessage(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
result.success(instance.getMessage());
|
||||
} catch (Exception e) {
|
||||
result.error("GET_MESSAGE_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void getType(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
result.success(instance.getType().name());
|
||||
} catch (Exception e) {
|
||||
result.error("GET_TYPE_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void getResult(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
result.success(instance.getResult());
|
||||
} catch (Exception e) {
|
||||
result.error("GET_RESULT_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void getInputData(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
byte[] inputData = instance.getInputData();
|
||||
result.success(inputData);
|
||||
} catch (Exception e) {
|
||||
result.error("INPUT_DATA_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void clean(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
instance = null;
|
||||
result.success(null);
|
||||
}
|
||||
|
||||
private void sendEvent(String eventName, Map<String, Object> params) {
|
||||
Map<String, Object> event = new HashMap<>();
|
||||
|
||||
// Add the event name under the "event" key
|
||||
event.put("event", eventName);
|
||||
|
||||
// Add the params under the "params" key
|
||||
if (params != null) {
|
||||
event.put("params", params);
|
||||
} else {
|
||||
event.put("params", null); // Explicitly handle the case when params is null
|
||||
}
|
||||
|
||||
// Pass the structured map to eventSink.success
|
||||
eventSink.success(event);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,419 @@
|
||||
package com.treezor.wallet;
|
||||
import static com.treezor.NativeModuleBase.serializeAntelopError;
|
||||
import static com.treezor.NativeModuleBase.serializeWalletValidationException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import fr.antelop.sdk.AntelopError;
|
||||
import fr.antelop.sdk.AsyncRequestType;
|
||||
import fr.antelop.sdk.Wallet;
|
||||
import fr.antelop.sdk.WalletLockReason;
|
||||
import fr.antelop.sdk.WalletManager;
|
||||
import fr.antelop.sdk.WalletManagerCallback;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationCredentials;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationMethodType;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationPasscode;
|
||||
import fr.antelop.sdk.authentication.CustomerAuthenticationPattern;
|
||||
import fr.antelop.sdk.authentication.CustomerCredentialsRequiredReason;
|
||||
import fr.antelop.sdk.authentication.LocalAuthenticationErrorReason;
|
||||
import fr.antelop.sdk.exception.WalletValidationException;
|
||||
import io.flutter.embedding.engine.plugins.FlutterPlugin;
|
||||
import io.flutter.plugin.common.MethodCall;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
import io.flutter.plugin.common.MethodChannel.Result;
|
||||
|
||||
public class WalletManagerModule implements MethodChannel.MethodCallHandler {
|
||||
static final String TAG = "WalletManagerModule";
|
||||
static final String EVENT_CHANNEL_NAME = "wallet_manager_callback";
|
||||
private final Context context;
|
||||
|
||||
private EventChannel eventChannel;
|
||||
private EventChannel.EventSink eventSink;
|
||||
|
||||
private static WalletManager instance = null;
|
||||
|
||||
public WalletManagerModule(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
this.context = context;
|
||||
|
||||
eventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), EVENT_CHANNEL_NAME);
|
||||
eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
|
||||
@Override
|
||||
public void onListen(Object arguments, EventChannel.EventSink events) {
|
||||
eventSink = events;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(Object arguments) {
|
||||
eventSink = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static synchronized WalletManager getInstance(Context context, WalletManagerCallback callback) throws WalletValidationException {
|
||||
if (instance == null) {
|
||||
instance = new WalletManager(context, callback, null);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
|
||||
switch (call.method) {
|
||||
case "_initialize":
|
||||
this._initialize(result);
|
||||
break;
|
||||
case "connect":
|
||||
this.connect(
|
||||
call.argument("loginCreds"),
|
||||
call.argument("newCreds"),
|
||||
result
|
||||
);
|
||||
break;
|
||||
case "logout":
|
||||
this.logout(result);
|
||||
break;
|
||||
case "lock":
|
||||
this.lock(call.argument("reason"), result);
|
||||
break;
|
||||
case "disconnect":
|
||||
this.disconnect(result);
|
||||
break;
|
||||
case "delete":
|
||||
this.delete(result);
|
||||
break;
|
||||
case "checkCredentials":
|
||||
this.checkCredentials(call.argument("credentials"), result);
|
||||
break;
|
||||
case "changeCredentials":
|
||||
this.changeCredentials(call.argument("currentCredentials"), call.argument("newCredentials"), result);
|
||||
break;
|
||||
case "activateAuthenticationMethod":
|
||||
this.activateAuthenticationMethod(call.argument("methodToActivated"), result);
|
||||
break;
|
||||
case "clean":
|
||||
this.clean(result);
|
||||
break;
|
||||
default:
|
||||
result.notImplemented();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void _initialize(Result result) {
|
||||
try {
|
||||
WalletManagerCallback walletManagerCallback = new WalletManagerCallback() {
|
||||
@Override
|
||||
public void onProvisioningRequired(@Nullable Object callbackData) {
|
||||
sendEvent("onProvisioningRequired", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCredentialsRequired(@NonNull CustomerCredentialsRequiredReason reason, @Nullable AntelopError error, @Nullable Object callbackData) {
|
||||
Log.d(TAG, "Android onCredentialsRequired - reason: " + reason + ", error: " + error);
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("reason", reason.name());
|
||||
if (error != null) {
|
||||
params.put("error", serializeAntelopError(error));
|
||||
}
|
||||
sendEvent("onCredentialsRequired", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionError(@NonNull AntelopError error, @Nullable Object callbackData) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("error", serializeAntelopError(error));
|
||||
sendEvent("onConnectionError", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionSuccess(@NonNull Wallet wallet, @Nullable Object callbackData) {// Adjust as needed
|
||||
sendEvent("onConnectionSuccess", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAsyncRequestSuccess(@NonNull AsyncRequestType asyncRequestType, @Nullable Object callbackData) {
|
||||
/*Map<String, Object> params = new HashMap<>();
|
||||
params.put("asyncRequestCode", asyncRequestType.name());
|
||||
sendEvent("onAsyncRequestSuccess", params);*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAsyncRequestError(@NonNull AsyncRequestType asyncRequestType, @NonNull AntelopError error, @Nullable Object callbackData) {
|
||||
/*Map<String, Object> params = new HashMap<>();
|
||||
params.put("asyncRequestCode", asyncRequestType.name());
|
||||
params.put("error", serializeAntelopError(error));
|
||||
sendEvent("onAsyncRequestError", params);*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocalAuthenticationSuccess(@NonNull CustomerAuthenticationMethodType type, @Nullable Object callbackData) {
|
||||
/*Map<String, Object> params = new HashMap<>();
|
||||
params.put("methodType", type.name());
|
||||
sendEvent("onLocalAuthenticationSuccess", params);*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocalAuthenticationError(@NonNull CustomerAuthenticationMethodType type, @NonNull LocalAuthenticationErrorReason reason, @Nullable String message, @Nullable Object callbackData) {
|
||||
/*Map<String, Object> params = new HashMap<>();
|
||||
params.put("reason", reason.name());
|
||||
params.put("methodType", type.name());
|
||||
sendEvent("onLocalAuthenticationError", params);*/
|
||||
}
|
||||
};
|
||||
|
||||
instance = new WalletManager(context, walletManagerCallback, null);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("INIT_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void connect(String loginCreds, String newCreds, Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Log.d(TAG, "Android connect - loginCreds: " + loginCreds + ", newCreds: " + newCreds);
|
||||
CustomerAuthenticationCredentials customerLoginCreds = null;
|
||||
CustomerAuthenticationCredentials customerNewCreds = null;
|
||||
|
||||
if (loginCreds != null) {
|
||||
customerLoginCreds = new CustomerAuthenticationPasscode(loginCreds.getBytes());
|
||||
}
|
||||
if (newCreds != null) {
|
||||
customerNewCreds = new CustomerAuthenticationPasscode(newCreds.getBytes());
|
||||
}
|
||||
|
||||
Log.d(TAG, "Android connect - customerLoginCreds: " + customerLoginCreds + ", customerNewCreds: " + customerNewCreds);
|
||||
|
||||
instance.connect(customerLoginCreds, customerNewCreds);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("CONNECT_ERROR", e.getMessage(), null);
|
||||
} catch (Exception e) {
|
||||
result.error("UNKNOWN_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void logout(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
instance.logout();
|
||||
result.success(null);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("LOGOUT_ERROR", e.getMessage(), null);
|
||||
} catch (Exception e) {
|
||||
result.error("UNKNOWN_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void lock(String reason, MethodChannel.Result result) {
|
||||
Log.d(TAG, "lock: " + reason);
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
WalletLockReason _reason = WalletLockReason.OtherReason;
|
||||
if (reason.equalsIgnoreCase("FraudulentUseSuspected")) {
|
||||
_reason = WalletLockReason.FraudulentUseSuspected;
|
||||
} else if (reason.equalsIgnoreCase("StopService")) {
|
||||
_reason = WalletLockReason.StopService;
|
||||
} else if (reason.equalsIgnoreCase("StrongestCvmAttemptCountExceeded")) {
|
||||
_reason = WalletLockReason.StrongestCvmAttemptCountExceeded;
|
||||
}
|
||||
Log.d("AntolopModule", "lock: _reason" + _reason.name());
|
||||
instance.lock(_reason);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
} catch (Exception e) {
|
||||
Log.d("AntolopModule", "lock error: " + e.getMessage());
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
result.success(null);
|
||||
}
|
||||
|
||||
public synchronized void disconnect(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
instance.disconnect();
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void delete(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
instance.delete();
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void checkCredentials(String credentials, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
CustomerAuthenticationPasscode _credentials = new CustomerAuthenticationPasscode(credentials.getBytes());
|
||||
try {
|
||||
instance.checkCredentials(_credentials);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException walletValidationException) {
|
||||
result.error("Error", walletValidationException.getMessage(), null);
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void changeCredentials(String currentCredentials, String newCredentials, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
CustomerAuthenticationPasscode _currentCredentials = new CustomerAuthenticationPasscode(currentCredentials.getBytes());
|
||||
CustomerAuthenticationPasscode _newCredentials = new CustomerAuthenticationPasscode(newCredentials.getBytes());
|
||||
try {
|
||||
instance.changeCredentials(_currentCredentials, _newCredentials);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException walletValidationException) {
|
||||
result.error("Error", walletValidationException.getMessage(), null);
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void activateAuthenticationMethod(String methodToActivated, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
CustomerAuthenticationMethodType _type = CustomerAuthenticationMethodType.None;
|
||||
|
||||
if (methodToActivated.equals("BIO")) {
|
||||
_type = CustomerAuthenticationMethodType.DeviceBiometric;
|
||||
} else if (methodToActivated.equals("PIN")) {
|
||||
_type = CustomerAuthenticationMethodType.Pin;
|
||||
}
|
||||
|
||||
instance.activateAuthenticationMethod(_type, null);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException walletValidationException) {
|
||||
result.error("Error", walletValidationException.getMessage(), null);
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
/*public synchronized void deactivateAuthenticationMethod(String type, @Nullable String credentialsInstanceKey, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
CustomerAuthenticationMethodType _type = CustomerAuthenticationMethodType.valueOf(type);
|
||||
CustomerAuthenticationCredentials credentials = null;
|
||||
|
||||
if(credentialsInstanceKey != null)
|
||||
credentials = Utils.getCustomerAuthenticationCredentialsFromInstanceKey(credentialsInstanceKey);
|
||||
|
||||
instance.deactivateAuthenticationMethod(_type, credentials);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException walletValidationException) {
|
||||
result.error("Error", serializeWalletValidationException(walletValidationException));
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e);
|
||||
}
|
||||
}*/
|
||||
|
||||
/*public synchronized void setCustomerCredentialsForTransaction(String credentialsInstanceKey, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
CustomerAuthenticationCredentials credentials = Utils.getCustomerAuthenticationCredentialsFromInstanceKey(credentialsInstanceKey);
|
||||
instance.setCustomerCredentialsForTransaction(credentials);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException walletValidationException) {
|
||||
result.error("Error", serializeWalletValidationException(walletValidationException));
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e);
|
||||
}
|
||||
}*/
|
||||
|
||||
/*public synchronized void synchronizeAuthenticationMethod(String type, @Nullable String credentialsInstanceKey, MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
CustomerAuthenticationMethodType _type = CustomerAuthenticationMethodType.valueOf(type);
|
||||
CustomerAuthenticationCredentials credentials = null;
|
||||
|
||||
if(credentialsInstanceKey != null)
|
||||
credentials = Utils.getCustomerAuthenticationCredentialsFromInstanceKey(credentialsInstanceKey);
|
||||
|
||||
instance.synchronizeAuthenticationMethod(_type, credentials);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException walletValidationException) {
|
||||
result.error("Error", serializeWalletValidationException(walletValidationException));
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e);
|
||||
}
|
||||
}*/
|
||||
|
||||
public synchronized void clean(MethodChannel.Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
instance.clean();
|
||||
instance = null;
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("Error", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendEvent(String eventName, Map<String, Object> params) {
|
||||
Map<String, Object> event = new HashMap<>();
|
||||
|
||||
// Add the event name under the "event" key
|
||||
event.put("event", eventName);
|
||||
|
||||
// Add the params under the "params" key
|
||||
if (params != null) {
|
||||
event.put("params", params);
|
||||
} else {
|
||||
event.put("params", null); // Explicitly handle the case when params is null
|
||||
}
|
||||
|
||||
eventSink.success(event);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
/*package com.treezor.wallet;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import io.flutter.embedding.engine.plugins.FlutterPlugin;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import fr.antelop.sdk.WalletLockReason;
|
||||
import fr.antelop.sdk.WalletNotificationServiceCallback;
|
||||
import fr.antelop.sdk.card.EmvApplicationActivationMethod;
|
||||
|
||||
public class WalletNotificationServiceModule implements WalletNotificationServiceCallback {
|
||||
static final String TAG = "WalletNotificationServiceModule";
|
||||
static final String EVENT_CHANNEL_NAME = "wallet_notification_service_events";
|
||||
|
||||
private final Context context;
|
||||
private final MethodChannel channel;
|
||||
private static EventChannel eventChannel;
|
||||
private static EventChannel.EventSink eventSink;
|
||||
|
||||
private static WalletNotificationServiceModule instance = null;
|
||||
|
||||
public WalletNotificationServiceModule(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
this.context = context;
|
||||
this.channel = channel;
|
||||
|
||||
eventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), EVENT_CHANNEL_NAME);
|
||||
eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
|
||||
@Override
|
||||
public void onListen(Object arguments, EventChannel.EventSink events) {
|
||||
eventSink = events;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(Object arguments) {
|
||||
eventSink = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static synchronized WalletNotificationServiceModule getInstance(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
if (instance == null) {
|
||||
instance = new WalletNotificationServiceModule(context, channel, flutterPluginBinding);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEmvApplicationActivationRequired(Context context, String emvAppId, List<EmvApplicationActivationMethod> methods) {
|
||||
sendEvent("onEmvApplicationActivationRequired", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEmvApplicationCredentialsUpdated(Context context) {
|
||||
sendEvent("onEmvApplicationCredentialsUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardsUpdated(Context context) {
|
||||
sendEvent("onCardsUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletLoaded(@NonNull Context context) {
|
||||
sendEvent("onWalletLoaded", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletLocked(@NonNull Context context, @NonNull WalletLockReason reason) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("reason", reason.name());
|
||||
sendEvent("onWalletLocked", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletUnlocked(@NonNull Context context) {
|
||||
sendEvent("onWalletUnlocked", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLogout(@NonNull Context context) {
|
||||
sendEvent("onLogout", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWalletDeleted(@NonNull Context context) {
|
||||
sendEvent("onWalletDeleted", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSettingsUpdated(@NonNull Context context) {
|
||||
sendEvent("onSettingsUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCountersUpdated(Context context) {
|
||||
sendEvent("onCountersUpdated", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCustomerCredentialsReset(Context context) {
|
||||
sendEvent("onCustomerCredentialsReset", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSunsetScheduled(@NonNull Context context, @NonNull Date sunsetDate) {
|
||||
sendEvent("onSunsetScheduled", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLostEligibility(@NonNull Context context) {
|
||||
sendEvent("onLostEligibility", null);
|
||||
}
|
||||
|
||||
private void sendEvent(String eventName, Map<String, Object> params) {
|
||||
Map<String, Object> event = new HashMap<>();
|
||||
|
||||
// Add the event name under the "event" key
|
||||
event.put("event", eventName);
|
||||
|
||||
// Add the params under the "params" key
|
||||
if (params != null) {
|
||||
event.put("params", params);
|
||||
} else {
|
||||
event.put("params", null); // Explicitly handle the case when params is null
|
||||
}
|
||||
|
||||
// Pass the structured map to eventSink.success
|
||||
eventSink.success(event);
|
||||
}
|
||||
}*/
|
||||
@@ -0,0 +1,260 @@
|
||||
package com.treezor.wallet;
|
||||
|
||||
import static com.treezor.globals.Utils.parseHexFormattedBinary;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
import androidx.annotation.NonNull;
|
||||
import fr.antelop.sdk.AntelopError;
|
||||
import fr.antelop.sdk.EligibilityDenialReason;
|
||||
import fr.antelop.sdk.Product;
|
||||
import fr.antelop.sdk.WalletProvisioning;
|
||||
import fr.antelop.sdk.WalletProvisioningCallback;
|
||||
import fr.antelop.sdk.exception.WalletValidationException;
|
||||
import io.flutter.embedding.engine.plugins.FlutterPlugin;
|
||||
import io.flutter.plugin.common.MethodCall;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
import io.flutter.plugin.common.MethodChannel.Result;
|
||||
import io.flutter.plugin.common.EventChannel;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class WalletProvisioningModule implements MethodChannel.MethodCallHandler {
|
||||
static final String TAG = "WProvisioningModule";
|
||||
static final String EVENT_CHANNEL_NAME = "wallet_provisioning_callback";
|
||||
private final Context context;
|
||||
|
||||
private EventChannel eventChannel;
|
||||
private EventChannel.EventSink eventSink;
|
||||
|
||||
private static WalletProvisioning instance = null;
|
||||
|
||||
public WalletProvisioningModule(Context context, MethodChannel channel, @NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
|
||||
this.context = context;
|
||||
|
||||
eventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), EVENT_CHANNEL_NAME);
|
||||
eventChannel.setStreamHandler(new EventChannel.StreamHandler() {
|
||||
@Override
|
||||
public void onListen(Object arguments, EventChannel.EventSink events) {
|
||||
eventSink = events;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(Object arguments) {
|
||||
eventSink = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
|
||||
switch (call.method) {
|
||||
case "_initialize":
|
||||
this._initialize(result);
|
||||
break;
|
||||
case "initialize":
|
||||
this.initialize(result);
|
||||
break;
|
||||
case "checkEligibility":
|
||||
this.checkEligibility(call.argument("rootedDeviceForbidden"), result);
|
||||
break;
|
||||
case "launch":
|
||||
this.launch(call.argument("activationCode"), result);
|
||||
break;
|
||||
case "clean":
|
||||
this.clean(result);
|
||||
break;
|
||||
default:
|
||||
result.notImplemented();
|
||||
}
|
||||
}
|
||||
|
||||
private void _initialize(Result result) {
|
||||
Log.d(TAG, "_initialize start");
|
||||
|
||||
WalletProvisioningCallback walletProvisioningCallback = new WalletProvisioningCallback() {
|
||||
@Override
|
||||
public void onInitializationSuccess(Object callbackData) {
|
||||
Log.d(TAG, "onInitializationSuccess");
|
||||
sendEvent("onInitializationSuccess", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitializationError(AntelopError error, Object callbackData) {
|
||||
Log.d(TAG, "onInitializationError: " + error.getCode().toString() + " - " + error.getMessage());
|
||||
Map<String, Object> errorData = new HashMap<>();
|
||||
errorData.put("message", error.getMessage());
|
||||
errorData.put("code", error.getCode().toString());
|
||||
sendEvent("onInitializationError", errorData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionNotGranted(String[] permissions, Object callbackData) {
|
||||
Log.d(TAG, "onPermissionNotGranted");
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
List<String> permissionsList = Arrays.asList(permissions);
|
||||
params.put("permissions", permissionsList);
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onPermissionNotGranted", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceEligible(boolean fingerprintAllowed, List<Product> eligibleProducts, Object callbackData) {
|
||||
Log.d(TAG, "onDeviceEligible");
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("fingerprintAllowed", fingerprintAllowed);
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onDeviceEligible", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceNotEligible(EligibilityDenialReason reason, Object callbackData, @Nullable String denialReference) {
|
||||
Log.d(TAG, "onDeviceNotEligible: " + reason.toString() + " - " + denialReference);
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("reason", reason.toString());
|
||||
params.put("denialReference", denialReference);
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onDeviceNotEligible", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckEligibilityError(AntelopError error, Object callbackData) {
|
||||
Log.d(TAG, "onCheckEligibilityError: " + error.getCode().toString() + " - " + error.getMessage());
|
||||
|
||||
Map<String, Object> errorMap = new HashMap<>();
|
||||
errorMap.put("message", error.getMessage());
|
||||
errorMap.put("code", error.getCode().toString());
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("error", errorMap);
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onCheckEligibilityError", params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProvisioningPending(Object callbackData) {
|
||||
Log.d(TAG, "onProvisioningPending");
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onProvisioningPending", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProvisioningSuccess(Object callbackData) {
|
||||
Log.d(TAG, "onProvisioningSuccess");
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onProvisioningSuccess", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProvisioningError(AntelopError error, Object callbackData) {
|
||||
Log.d(TAG, "onProvisioningError: " + error.getCode().toString() + " - " + error.getMessage());
|
||||
|
||||
Map<String, Object> errorMap = new HashMap<>();
|
||||
errorMap.put("message", error.getMessage());
|
||||
errorMap.put("code", error.getCode().toString());
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("error", errorMap);
|
||||
|
||||
// Send the event to Flutter using invokeMethod
|
||||
sendEvent("onProvisioningError", params);
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
instance = new WalletProvisioning(context, walletProvisioningCallback);
|
||||
result.success(null);
|
||||
} catch (WalletValidationException e) {
|
||||
result.error("INIT_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void initialize(Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletProvisioning instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
instance.initialize();
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("INIT_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void checkEligibility(boolean rootedDeviceForbidden, Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
instance.checkEligibility(rootedDeviceForbidden);
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("CHECK_ELIGIBILITY_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void launch(String activationCode, Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Log.d(TAG, "launch activationCode: " + activationCode);
|
||||
instance.launch(parseHexFormattedBinary(activationCode), null);
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("CHECK_ELIGIBILITY_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void clean(Result result) {
|
||||
if (instance == null) {
|
||||
result.error("INSTANCE_ERROR", "WalletManager instance is not initialized", null);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
instance.clean();
|
||||
instance = null;
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
result.error("CLEAN_ERROR", e.getMessage(), null);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendEvent(String eventName, Map<String, Object> params) {
|
||||
Map<String, Object> event = new HashMap<>();
|
||||
|
||||
// Add the event name under the "event" key
|
||||
event.put("event", eventName);
|
||||
|
||||
// Add the params under the "params" key
|
||||
if (params != null) {
|
||||
event.put("params", params);
|
||||
} else {
|
||||
event.put("params", null); // Explicitly handle the case when params is null
|
||||
}
|
||||
|
||||
// Pass the structured map to eventSink.success
|
||||
eventSink.success(event);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.treezor.flutter_treezor_entrust_sdk_bridge;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import io.flutter.plugin.common.MethodCall;
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* This demonstrates a simple unit test of the Java portion of this plugin's implementation.
|
||||
*
|
||||
* Once you have built the plugin's example app, you can run these tests from the command
|
||||
* line by running `./gradlew testDebugUnitTest` in the `example/android/` directory, or
|
||||
* you can run them directly from IDEs that support JUnit such as Android Studio.
|
||||
*/
|
||||
|
||||
public class FlutterTreezorEntrustSdkBridgePluginTest {
|
||||
@Test
|
||||
public void onMethodCall_getPlatformVersion_returnsExpectedValue() {
|
||||
FlutterTreezorEntrustSdkBridgePlugin plugin = new FlutterTreezorEntrustSdkBridgePlugin();
|
||||
|
||||
final MethodCall call = new MethodCall("getPlatformVersion", null);
|
||||
MethodChannel.Result mockResult = mock(MethodChannel.Result.class);
|
||||
plugin.onMethodCall(call, mockResult);
|
||||
|
||||
verify(mockResult).success("Android " + android.os.Build.VERSION.RELEASE);
|
||||
}
|
||||
}
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,31 @@
|
||||
Extension Discovery Cache
|
||||
=========================
|
||||
|
||||
This folder is used by `package:extension_discovery` to cache lists of
|
||||
packages that contains extensions for other packages.
|
||||
|
||||
DO NOT USE THIS FOLDER
|
||||
----------------------
|
||||
|
||||
* Do not read (or rely) the contents of this folder.
|
||||
* Do write to this folder.
|
||||
|
||||
If you're interested in the lists of extensions stored in this folder use the
|
||||
API offered by package `extension_discovery` to get this information.
|
||||
|
||||
If this package doesn't work for your use-case, then don't try to read the
|
||||
contents of this folder. It may change, and will not remain stable.
|
||||
|
||||
Use package `extension_discovery`
|
||||
---------------------------------
|
||||
|
||||
If you want to access information from this folder.
|
||||
|
||||
Feel free to delete this folder
|
||||
-------------------------------
|
||||
|
||||
Files in this folder act as a cache, and the cache is discarded if the files
|
||||
are older than the modification time of `.dart_tool/package_config.json`.
|
||||
|
||||
Hence, it should never be necessary to clear this cache manually, if you find a
|
||||
need to do please file a bug.
|
||||
@@ -0,0 +1 @@
|
||||
{"version":2,"entries":[{"package":"flutter_treezor_entrust_sdk_bridge","rootUri":"../../","packageUri":"lib/"},{"package":"flutter_treezor_entrust_sdk_bridge_example","rootUri":"../","packageUri":"lib/"}]}
|
||||
@@ -0,0 +1,274 @@
|
||||
{
|
||||
"configVersion": 2,
|
||||
"packages": [
|
||||
{
|
||||
"name": "async",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/async-2.11.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.18"
|
||||
},
|
||||
{
|
||||
"name": "boolean_selector",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.17"
|
||||
},
|
||||
{
|
||||
"name": "characters",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/characters-1.4.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "clock",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/clock-1.1.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "collection",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/collection-1.19.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "crypto",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/crypto-3.0.6",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "cupertino_icons",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "dio",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/dio-5.7.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.18"
|
||||
},
|
||||
{
|
||||
"name": "dio_web_adapter",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/dio_web_adapter-2.0.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "fake_async",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/fake_async-1.3.3",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "file",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/file-7.0.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.0"
|
||||
},
|
||||
{
|
||||
"name": "flutter",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "flutter_driver",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter_driver",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "flutter_lints",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/flutter_lints-4.0.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "flutter_test",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/flutter_test",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "flutter_treezor_entrust_sdk_bridge",
|
||||
"rootUri": "../../",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.5"
|
||||
},
|
||||
{
|
||||
"name": "fuchsia_remote_debug_protocol",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/fuchsia_remote_debug_protocol",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "http_parser",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/http_parser-4.0.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "integration_test",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/packages/integration_test",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/leak_tracker-11.0.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_flutter_testing",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.10",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_testing",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "lints",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/lints-4.0.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "matcher",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/matcher-0.12.17",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "material_color_utilities",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.17"
|
||||
},
|
||||
{
|
||||
"name": "meta",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/meta-1.16.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/path-1.9.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "platform",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/platform-3.1.5",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.2"
|
||||
},
|
||||
{
|
||||
"name": "plugin_platform_interface",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/plugin_platform_interface-2.1.8",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.0"
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/process-5.0.2",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.0"
|
||||
},
|
||||
{
|
||||
"name": "sky_engine",
|
||||
"rootUri": "file:///Users/juliandalcalaf/Development/flutter/bin/cache/pkg/sky_engine",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.8"
|
||||
},
|
||||
{
|
||||
"name": "source_span",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/source_span-1.10.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.18"
|
||||
},
|
||||
{
|
||||
"name": "stack_trace",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/stack_trace-1.12.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "stream_channel",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/stream_channel-2.1.4",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "string_scanner",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/string_scanner-1.3.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "sync_http",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/sync_http-0.3.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "term_glyph",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/term_glyph-1.2.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "test_api",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/test_api-0.7.6",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.5"
|
||||
},
|
||||
{
|
||||
"name": "typed_data",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/typed_data-1.4.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.5"
|
||||
},
|
||||
{
|
||||
"name": "vector_math",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/vector_math-2.2.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "vm_service",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/vm_service-14.3.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.3"
|
||||
},
|
||||
{
|
||||
"name": "web",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/web-1.1.0",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.4"
|
||||
},
|
||||
{
|
||||
"name": "webdriver",
|
||||
"rootUri": "file:///Users/juliandalcalaf/.pub-cache/hosted/pub.dev/webdriver-3.0.4",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.1"
|
||||
},
|
||||
{
|
||||
"name": "flutter_treezor_entrust_sdk_bridge_example",
|
||||
"rootUri": "../",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "3.5"
|
||||
}
|
||||
],
|
||||
"generator": "pub",
|
||||
"generatorVersion": "3.9.2",
|
||||
"flutterRoot": "file:///Users/juliandalcalaf/Development/flutter",
|
||||
"flutterVersion": "3.35.7",
|
||||
"pubCache": "file:///Users/juliandalcalaf/.pub-cache"
|
||||
}
|
||||
@@ -0,0 +1,371 @@
|
||||
{
|
||||
"roots": [
|
||||
"flutter_treezor_entrust_sdk_bridge_example"
|
||||
],
|
||||
"packages": [
|
||||
{
|
||||
"name": "flutter_treezor_entrust_sdk_bridge_example",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"crypto",
|
||||
"cupertino_icons",
|
||||
"dio",
|
||||
"flutter",
|
||||
"flutter_treezor_entrust_sdk_bridge"
|
||||
],
|
||||
"devDependencies": [
|
||||
"flutter_lints",
|
||||
"flutter_test",
|
||||
"integration_test"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flutter_treezor_entrust_sdk_bridge",
|
||||
"version": "1.0.2",
|
||||
"dependencies": [
|
||||
"flutter",
|
||||
"plugin_platform_interface"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flutter_lints",
|
||||
"version": "4.0.0",
|
||||
"dependencies": [
|
||||
"lints"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flutter_test",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"clock",
|
||||
"collection",
|
||||
"fake_async",
|
||||
"flutter",
|
||||
"leak_tracker_flutter_testing",
|
||||
"matcher",
|
||||
"meta",
|
||||
"path",
|
||||
"stack_trace",
|
||||
"stream_channel",
|
||||
"test_api",
|
||||
"vector_math"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "integration_test",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"flutter",
|
||||
"flutter_driver",
|
||||
"flutter_test",
|
||||
"path",
|
||||
"vm_service"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cupertino_icons",
|
||||
"version": "1.0.8",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "flutter",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"characters",
|
||||
"collection",
|
||||
"material_color_utilities",
|
||||
"meta",
|
||||
"sky_engine",
|
||||
"vector_math"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "dio",
|
||||
"version": "5.7.0",
|
||||
"dependencies": [
|
||||
"async",
|
||||
"dio_web_adapter",
|
||||
"http_parser",
|
||||
"meta",
|
||||
"path"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "crypto",
|
||||
"version": "3.0.6",
|
||||
"dependencies": [
|
||||
"typed_data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "plugin_platform_interface",
|
||||
"version": "2.1.8",
|
||||
"dependencies": [
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lints",
|
||||
"version": "4.0.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "stream_channel",
|
||||
"version": "2.1.4",
|
||||
"dependencies": [
|
||||
"async"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "meta",
|
||||
"version": "1.16.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "collection",
|
||||
"version": "1.19.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_flutter_testing",
|
||||
"version": "3.0.10",
|
||||
"dependencies": [
|
||||
"flutter",
|
||||
"leak_tracker",
|
||||
"leak_tracker_testing",
|
||||
"matcher",
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "vector_math",
|
||||
"version": "2.2.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "stack_trace",
|
||||
"version": "1.12.1",
|
||||
"dependencies": [
|
||||
"path"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "clock",
|
||||
"version": "1.1.2",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "fake_async",
|
||||
"version": "1.3.3",
|
||||
"dependencies": [
|
||||
"clock",
|
||||
"collection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
"version": "1.9.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "matcher",
|
||||
"version": "0.12.17",
|
||||
"dependencies": [
|
||||
"async",
|
||||
"meta",
|
||||
"stack_trace",
|
||||
"term_glyph",
|
||||
"test_api"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "test_api",
|
||||
"version": "0.7.6",
|
||||
"dependencies": [
|
||||
"async",
|
||||
"boolean_selector",
|
||||
"collection",
|
||||
"meta",
|
||||
"source_span",
|
||||
"stack_trace",
|
||||
"stream_channel",
|
||||
"string_scanner",
|
||||
"term_glyph"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "vm_service",
|
||||
"version": "14.3.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "flutter_driver",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"file",
|
||||
"flutter",
|
||||
"flutter_test",
|
||||
"fuchsia_remote_debug_protocol",
|
||||
"matcher",
|
||||
"meta",
|
||||
"path",
|
||||
"vm_service",
|
||||
"webdriver"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "sky_engine",
|
||||
"version": "0.0.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "material_color_utilities",
|
||||
"version": "0.11.1",
|
||||
"dependencies": [
|
||||
"collection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "characters",
|
||||
"version": "1.4.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "dio_web_adapter",
|
||||
"version": "2.0.0",
|
||||
"dependencies": [
|
||||
"dio",
|
||||
"http_parser",
|
||||
"meta",
|
||||
"web"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "http_parser",
|
||||
"version": "4.0.2",
|
||||
"dependencies": [
|
||||
"collection",
|
||||
"source_span",
|
||||
"string_scanner",
|
||||
"typed_data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "async",
|
||||
"version": "2.11.0",
|
||||
"dependencies": [
|
||||
"collection",
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "typed_data",
|
||||
"version": "1.4.0",
|
||||
"dependencies": [
|
||||
"collection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker_testing",
|
||||
"version": "3.0.2",
|
||||
"dependencies": [
|
||||
"leak_tracker",
|
||||
"matcher",
|
||||
"meta"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leak_tracker",
|
||||
"version": "11.0.2",
|
||||
"dependencies": [
|
||||
"clock",
|
||||
"collection",
|
||||
"meta",
|
||||
"path",
|
||||
"vm_service"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "term_glyph",
|
||||
"version": "1.2.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "string_scanner",
|
||||
"version": "1.3.0",
|
||||
"dependencies": [
|
||||
"source_span"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "source_span",
|
||||
"version": "1.10.0",
|
||||
"dependencies": [
|
||||
"collection",
|
||||
"path",
|
||||
"term_glyph"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "boolean_selector",
|
||||
"version": "2.1.1",
|
||||
"dependencies": [
|
||||
"source_span",
|
||||
"string_scanner"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "webdriver",
|
||||
"version": "3.0.4",
|
||||
"dependencies": [
|
||||
"matcher",
|
||||
"path",
|
||||
"stack_trace",
|
||||
"sync_http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fuchsia_remote_debug_protocol",
|
||||
"version": "0.0.0",
|
||||
"dependencies": [
|
||||
"meta",
|
||||
"process",
|
||||
"vm_service"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "file",
|
||||
"version": "7.0.0",
|
||||
"dependencies": [
|
||||
"meta",
|
||||
"path"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "web",
|
||||
"version": "1.1.0",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "sync_http",
|
||||
"version": "0.3.1",
|
||||
"dependencies": []
|
||||
},
|
||||
{
|
||||
"name": "process",
|
||||
"version": "5.0.2",
|
||||
"dependencies": [
|
||||
"file",
|
||||
"path",
|
||||
"platform"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "platform",
|
||||
"version": "3.1.5",
|
||||
"dependencies": []
|
||||
}
|
||||
],
|
||||
"configVersion": 1
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
3.35.7
|
||||
@@ -0,0 +1 @@
|
||||
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_treezor_entrust_sdk_bridge","path":"/Users/juliandalcalaf/Desktop/sf-app-platform/packages/flutter_treezor_entrust_sdk_bridge/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"integration_test","path":"/Users/juliandalcalaf/Development/flutter/packages/integration_test/","native_build":true,"dependencies":[],"dev_dependency":true}],"android":[{"name":"flutter_treezor_entrust_sdk_bridge","path":"/Users/juliandalcalaf/Desktop/sf-app-platform/packages/flutter_treezor_entrust_sdk_bridge/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"integration_test","path":"/Users/juliandalcalaf/Development/flutter/packages/integration_test/","native_build":true,"dependencies":[],"dev_dependency":true}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"flutter_treezor_entrust_sdk_bridge","dependencies":[]},{"name":"integration_test","dependencies":[]}],"date_created":"2026-01-21 11:38:45.748694","version":"3.35.7","swift_package_manager_enabled":{"ios":false,"macos":false}}
|
||||
@@ -0,0 +1,16 @@
|
||||
# flutter_treezor_entrust_sdk_bridge_example
|
||||
|
||||
Demonstrates how to use the flutter_treezor_entrust_sdk_bridge plugin.
|
||||
|
||||
## Getting Started
|
||||
|
||||
This project is a starting point for a Flutter application.
|
||||
|
||||
A few resources to get you started if this is your first Flutter project:
|
||||
|
||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
@@ -0,0 +1,28 @@
|
||||
# This file configures the analyzer, which statically analyzes Dart code to
|
||||
# check for errors, warnings, and lints.
|
||||
#
|
||||
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
|
||||
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
|
||||
# invoked from the command line by running `flutter analyze`.
|
||||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
# The lint rules applied to this project can be customized in the
|
||||
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
||||
# included above or to enable additional rules. A list of all available lints
|
||||
# and their documentation is published at https://dart.dev/lints.
|
||||
#
|
||||
# Instead of disabling a lint rule for the entire project in the
|
||||
# section below, it can also be suppressed for a single line of code
|
||||
# or a specific dart file by using the `// ignore: name_of_lint` and
|
||||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||
# producing the lint.
|
||||
rules:
|
||||
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/android/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/android/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,50 @@
|
||||
plugins {
|
||||
id "com.android.application"
|
||||
id "kotlin-android"
|
||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||
id "dev.flutter.flutter-gradle-plugin"
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.treezor.flutter_treezor_entrust_sdk_bridge_example"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "com.treezor.flutter_treezor_entrust_sdk_bridge_example"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = flutter.minSdkVersion
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig = signingConfigs.debug
|
||||
}
|
||||
}
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
keepDebugSymbols += "*/*/libscm.so"
|
||||
useLegacyPackaging = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
</manifest>
|
||||
@@ -0,0 +1,57 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
||||
<application
|
||||
android:label="flutter_treezor_entrust_sdk_bridge_example"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
android:launchMode="singleTop"
|
||||
android:taskAffinity=""
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:hardwareAccelerated="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
||||
the Android process has started. This theme is visible to the user
|
||||
while the Flutter UI initializes. After that, this theme continues
|
||||
to determine the Window background behind the Flutter UI. -->
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
|
||||
<meta-data
|
||||
android:name="fr.antelop.application_id"
|
||||
android:value="\4713640103500149457" />
|
||||
|
||||
<meta-data
|
||||
android:name="fr.antelop.issuer_id"
|
||||
android:value="treezor" />
|
||||
</application>
|
||||
<!-- Required to query activities that can process text, see:
|
||||
https://developer.android.com/training/package-visibility and
|
||||
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
|
||||
|
||||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
||||
<data android:mimeType="text/plain"/>
|
||||
</intent>
|
||||
</queries>
|
||||
</manifest>
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.treezor.flutter_treezor_entrust_sdk_bridge_example;
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity;
|
||||
|
||||
public class MainActivity extends FlutterActivity {
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package io.flutter.plugins;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import io.flutter.Log;
|
||||
|
||||
import io.flutter.embedding.engine.FlutterEngine;
|
||||
|
||||
/**
|
||||
* Generated file. Do not edit.
|
||||
* This file is generated by the Flutter tool based on the
|
||||
* plugins that support the Android platform.
|
||||
*/
|
||||
@Keep
|
||||
public final class GeneratedPluginRegistrant {
|
||||
private static final String TAG = "GeneratedPluginRegistrant";
|
||||
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
|
||||
try {
|
||||
flutterEngine.getPlugins().add(new com.treezor.flutter_treezor_entrust_sdk_bridge.FlutterTreezorEntrustSdkBridgePlugin());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error registering plugin flutter_treezor_entrust_sdk_bridge, com.treezor.flutter_treezor_entrust_sdk_bridge.FlutterTreezorEntrustSdkBridgePlugin", e);
|
||||
}
|
||||
try {
|
||||
flutterEngine.getPlugins().add(new dev.flutter.plugins.integration_test.IntegrationTestPlugin());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error registering plugin integration_test, dev.flutter.plugins.integration_test.IntegrationTestPlugin", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="?android:colorBackground" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
</layer-list>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
</layer-list>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 544 B |
Binary file not shown.
|
After Width: | Height: | Size: 442 B |
Binary file not shown.
|
After Width: | Height: | Size: 721 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
</manifest>
|
||||
@@ -0,0 +1,18 @@
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.buildDir = "../build"
|
||||
subprojects {
|
||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||
}
|
||||
subprojects {
|
||||
project.evaluationDependsOn(":app")
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="android" name="Android">
|
||||
<configuration>
|
||||
<option name="ALLOW_USER_CONFIGURATION" value="false" />
|
||||
<option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
|
||||
<option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
|
||||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" />
|
||||
<option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" />
|
||||
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" />
|
||||
<option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" />
|
||||
<option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Flutter for Android" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,3 @@
|
||||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/android/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/android/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
|
||||
160
packages/flutter_treezor_entrust_sdk_bridge/example/android/gradlew
vendored
Executable file
160
packages/flutter_treezor_entrust_sdk_bridge/example/android/gradlew
vendored
Executable file
@@ -0,0 +1,160 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||
90
packages/flutter_treezor_entrust_sdk_bridge/example/android/gradlew.bat
vendored
Normal file
90
packages/flutter_treezor_entrust_sdk_bridge/example/android/gradlew.bat
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@@ -0,0 +1,3 @@
|
||||
sdk.dir=/Users/juliandalcalaf/Library/Android/sdk
|
||||
flutter.sdk=/Users/juliandalcalaf/Development/flutter
|
||||
flutter.buildMode=debug
|
||||
@@ -0,0 +1,25 @@
|
||||
pluginManagement {
|
||||
def flutterSdkPath = {
|
||||
def properties = new Properties()
|
||||
file("local.properties").withInputStream { properties.load(it) }
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
return flutterSdkPath
|
||||
}()
|
||||
|
||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.1.0" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/.idea" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/example/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/example/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/example/build" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/integration_test_macos/.dart_tool" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/integration_test_macos/.pub" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/integration_test/integration_test_macos/build" />
|
||||
</content>
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Dart SDK" level="project" />
|
||||
<orderEntry type="library" name="Flutter Plugins" level="project" />
|
||||
<orderEntry type="library" name="Dart Packages" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,23 @@
|
||||
// This is a basic Flutter integration test.
|
||||
//
|
||||
// Since integration tests run in a full Flutter application, they can interact
|
||||
// with the host side of a plugin implementation, unlike Dart unit tests.
|
||||
//
|
||||
// For more information about Flutter integration tests, please see
|
||||
// https://flutter.dev/to/integration-testing
|
||||
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:integration_test/integration_test.dart';
|
||||
|
||||
import 'package:flutter_treezor_entrust_sdk_bridge/flutter_treezor_entrust_sdk_bridge.dart';
|
||||
|
||||
void main() {
|
||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
testWidgets('getPlatformVersion test', (WidgetTester tester) async {
|
||||
final FlutterTreezorEntrustSdkBridge plugin = FlutterTreezorEntrustSdkBridge();
|
||||
// The version string depends on the host platform running the test, so
|
||||
// just assert that some non-empty string is returned.
|
||||
});
|
||||
}
|
||||
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/ios/.DS_Store
vendored
Normal file
BIN
packages/flutter_treezor_entrust_sdk_bridge/example/ios/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>App</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>io.flutter.flutter.app</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>App</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>12.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,2 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||
#include "Generated.xcconfig"
|
||||
@@ -0,0 +1,14 @@
|
||||
// This is a generated file; do not edit or check into version control.
|
||||
FLUTTER_ROOT=/Users/juliandalcalaf/Development/flutter
|
||||
FLUTTER_APPLICATION_PATH=/Users/juliandalcalaf/Downloads/flutter_treezor_entrust_sdk_bridge/example
|
||||
COCOAPODS_PARALLEL_CODE_SIGN=true
|
||||
FLUTTER_TARGET=lib/main.dart
|
||||
FLUTTER_BUILD_DIR=build
|
||||
FLUTTER_BUILD_NAME=1.0.0
|
||||
FLUTTER_BUILD_NUMBER=1
|
||||
EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
|
||||
EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
|
||||
DART_OBFUSCATION=false
|
||||
TRACK_WIDGET_CREATION=true
|
||||
TREE_SHAKE_ICONS=false
|
||||
PACKAGE_CONFIG=.dart_tool/package_config.json
|
||||
@@ -0,0 +1,2 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||
#include "Generated.xcconfig"
|
||||
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Generated file, do not edit.
|
||||
#
|
||||
|
||||
import lldb
|
||||
|
||||
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
|
||||
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
|
||||
base = frame.register["x0"].GetValueAsAddress()
|
||||
page_len = frame.register["x1"].GetValueAsUnsigned()
|
||||
|
||||
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
|
||||
# first page to see if handled it correctly. This makes diagnosing
|
||||
# misconfiguration (e.g. missing breakpoint) easier.
|
||||
data = bytearray(page_len)
|
||||
data[0:8] = b'IHELPED!'
|
||||
|
||||
error = lldb.SBError()
|
||||
frame.GetThread().GetProcess().WriteMemory(base, data, error)
|
||||
if not error.Success():
|
||||
print(f'Failed to write into {base}[+{page_len}]', error)
|
||||
return
|
||||
|
||||
def __lldb_init_module(debugger: lldb.SBDebugger, _):
|
||||
target = debugger.GetDummyTarget()
|
||||
# Caveat: must use BreakpointCreateByRegEx here and not
|
||||
# BreakpointCreateByName. For some reasons callback function does not
|
||||
# get carried over from dummy target for the later.
|
||||
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
|
||||
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
|
||||
bp.SetAutoContinue(True)
|
||||
print("-- LLDB integration loaded --")
|
||||
@@ -0,0 +1,5 @@
|
||||
#
|
||||
# Generated file, do not edit.
|
||||
#
|
||||
|
||||
command script import --relative-to-command-file flutter_lldb_helper.py
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
# This is a generated file; do not edit or check into version control.
|
||||
export "FLUTTER_ROOT=/Users/juliandalcalaf/Development/flutter"
|
||||
export "FLUTTER_APPLICATION_PATH=/Users/juliandalcalaf/Downloads/flutter_treezor_entrust_sdk_bridge/example"
|
||||
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
|
||||
export "FLUTTER_TARGET=lib/main.dart"
|
||||
export "FLUTTER_BUILD_DIR=build"
|
||||
export "FLUTTER_BUILD_NAME=1.0.0"
|
||||
export "FLUTTER_BUILD_NUMBER=1"
|
||||
export "DART_OBFUSCATION=false"
|
||||
export "TRACK_WIDGET_CREATION=true"
|
||||
export "TREE_SHAKE_ICONS=false"
|
||||
export "PACKAGE_CONFIG=.dart_tool/package_config.json"
|
||||
@@ -0,0 +1,44 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
# platform :ios, '12.0'
|
||||
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
|
||||
project 'Runner', {
|
||||
'Debug' => :debug,
|
||||
'Profile' => :release,
|
||||
'Release' => :release,
|
||||
}
|
||||
|
||||
def flutter_root
|
||||
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
|
||||
unless File.exist?(generated_xcode_build_settings_path)
|
||||
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
|
||||
end
|
||||
|
||||
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||
return matches[1].strip if matches
|
||||
end
|
||||
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
|
||||
end
|
||||
|
||||
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||
|
||||
flutter_ios_podfile_setup
|
||||
|
||||
target 'Runner' do
|
||||
use_frameworks!
|
||||
use_modular_headers!
|
||||
|
||||
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
|
||||
target 'RunnerTests' do
|
||||
inherit! :search_paths
|
||||
end
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
flutter_additional_ios_build_settings(target)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,28 @@
|
||||
PODS:
|
||||
- Flutter (1.0.0)
|
||||
- flutter_treezor_entrust_sdk_bridge (0.0.1):
|
||||
- Flutter
|
||||
- integration_test (0.0.1):
|
||||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- Flutter (from `Flutter`)
|
||||
- flutter_treezor_entrust_sdk_bridge (from `.symlinks/plugins/flutter_treezor_entrust_sdk_bridge/ios`)
|
||||
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
Flutter:
|
||||
:path: Flutter
|
||||
flutter_treezor_entrust_sdk_bridge:
|
||||
:path: ".symlinks/plugins/flutter_treezor_entrust_sdk_bridge/ios"
|
||||
integration_test:
|
||||
:path: ".symlinks/plugins/integration_test/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||
flutter_treezor_entrust_sdk_bridge: acace23d4485490eb60fc35ca23559c4c1ab7e83
|
||||
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
|
||||
|
||||
PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
|
||||
|
||||
COCOAPODS: 1.16.2
|
||||
@@ -0,0 +1,746 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
|
||||
77F0FF292CE8E2AD000E5F12 /* AntelopRelease.plist in Resources */ = {isa = PBXBuildFile; fileRef = 77F0FF282CE8E2AD000E5F12 /* AntelopRelease.plist */; };
|
||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||
AFDAF82A7F1A542CC1AFAC6D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCA65477799FB49AB9AC8FFF /* Pods_Runner.framework */; };
|
||||
C4BF47E714B4722F39CB3F07 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FC648CE04F06E0C51808071 /* Pods_RunnerTests.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
|
||||
remoteInfo = Runner;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
77ECBD3E2DB93D6700EADBC1 /* Embed Foundation Extensions */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
);
|
||||
name = "Embed Foundation Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
02E7AC75B6A7BDEF145133FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
133BBA06A983F2C5040EC4DE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||
2DCA66A701932027209F694D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||
417F62AE62BF3D6744A452AE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
||||
6FC648CE04F06E0C51808071 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
77ECBD132DB92B6F00EADBC1 /* AntelopSDK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = AntelopSDK.xcframework; path = .symlinks/plugins/flutter_treezor_entrust_sdk_bridge/ios/../../../../../../ios/AntelopSDK.xcframework; sourceTree = "<group>"; };
|
||||
77ECBD172DB92B7200EADBC1 /* SecureCModule.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = SecureCModule.xcframework; path = .symlinks/plugins/flutter_treezor_entrust_sdk_bridge/ios/../../../../../../ios/SecureCModule.xcframework; sourceTree = "<group>"; };
|
||||
77F0FF282CE8E2AD000E5F12 /* AntelopRelease.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = AntelopRelease.plist; sourceTree = "<group>"; };
|
||||
77F0FF2A2CE8E300000E5F12 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
|
||||
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
|
||||
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
99C84349C0FFE6466CEC5675 /* Pods_PushExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PushExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
BCA65477799FB49AB9AC8FFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
EB83C806B041E697DB761E4E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
||||
F5B7333FE22DBFA78D8B43B3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
51D678D7D3128114E52E4BB8 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C4BF47E714B4722F39CB3F07 /* Pods_RunnerTests.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
97C146EB1CF9000F007C117D /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AFDAF82A7F1A542CC1AFAC6D /* Pods_Runner.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
331C8082294A63A400263BE5 /* RunnerTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
331C807B294A618700263BE5 /* RunnerTests.swift */,
|
||||
);
|
||||
path = RunnerTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9740EEB11CF90186004384FC /* Flutter */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */,
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
|
||||
9740EEB31CF90195004384FC /* Generated.xcconfig */,
|
||||
);
|
||||
name = Flutter;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146E51CF9000F007C117D = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9740EEB11CF90186004384FC /* Flutter */,
|
||||
97C146F01CF9000F007C117D /* Runner */,
|
||||
97C146EF1CF9000F007C117D /* Products */,
|
||||
331C8082294A63A400263BE5 /* RunnerTests */,
|
||||
AC109A7B3C0657D06DC46B41 /* Pods */,
|
||||
FBED2C9DDE0E6AC06441273A /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146EF1CF9000F007C117D /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
97C146EE1CF9000F007C117D /* Runner.app */,
|
||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146F01CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
77F0FF2A2CE8E300000E5F12 /* Runner.entitlements */,
|
||||
97C146FA1CF9000F007C117D /* Main.storyboard */,
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */,
|
||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
|
||||
97C147021CF9000F007C117D /* Info.plist */,
|
||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
|
||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
|
||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
|
||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
|
||||
77F0FF282CE8E2AD000E5F12 /* AntelopRelease.plist */,
|
||||
);
|
||||
path = Runner;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AC109A7B3C0657D06DC46B41 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
02E7AC75B6A7BDEF145133FE /* Pods-Runner.debug.xcconfig */,
|
||||
417F62AE62BF3D6744A452AE /* Pods-Runner.release.xcconfig */,
|
||||
2DCA66A701932027209F694D /* Pods-Runner.profile.xcconfig */,
|
||||
133BBA06A983F2C5040EC4DE /* Pods-RunnerTests.debug.xcconfig */,
|
||||
F5B7333FE22DBFA78D8B43B3 /* Pods-RunnerTests.release.xcconfig */,
|
||||
EB83C806B041E697DB761E4E /* Pods-RunnerTests.profile.xcconfig */,
|
||||
);
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
FBED2C9DDE0E6AC06441273A /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
77ECBD172DB92B7200EADBC1 /* SecureCModule.xcframework */,
|
||||
77ECBD132DB92B6F00EADBC1 /* AntelopSDK.xcframework */,
|
||||
BCA65477799FB49AB9AC8FFF /* Pods_Runner.framework */,
|
||||
6FC648CE04F06E0C51808071 /* Pods_RunnerTests.framework */,
|
||||
99C84349C0FFE6466CEC5675 /* Pods_PushExtension.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
331C8080294A63A400263BE5 /* RunnerTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
||||
buildPhases = (
|
||||
794191FBEC175AF37F9CE4C8 /* [CP] Check Pods Manifest.lock */,
|
||||
331C807D294A63A400263BE5 /* Sources */,
|
||||
331C807F294A63A400263BE5 /* Resources */,
|
||||
51D678D7D3128114E52E4BB8 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
331C8086294A63A400263BE5 /* PBXTargetDependency */,
|
||||
);
|
||||
name = RunnerTests;
|
||||
productName = RunnerTests;
|
||||
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
97C146ED1CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||
buildPhases = (
|
||||
F8D4F3EC164159763EDFD510 /* [CP] Check Pods Manifest.lock */,
|
||||
9740EEB61CF901F6004384FC /* Run Script */,
|
||||
97C146EA1CF9000F007C117D /* Sources */,
|
||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||
97C146EC1CF9000F007C117D /* Resources */,
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||
88FEBD599DB398AC59C0EE3F /* [CP] Embed Pods Frameworks */,
|
||||
77ECBD3E2DB93D6700EADBC1 /* Embed Foundation Extensions */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Runner;
|
||||
productName = Runner;
|
||||
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
97C146E61CF9000F007C117D /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastSwiftUpdateCheck = 1620;
|
||||
LastUpgradeCheck = 1510;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
331C8080294A63A400263BE5 = {
|
||||
CreatedOnToolsVersion = 14.0;
|
||||
TestTargetID = 97C146ED1CF9000F007C117D;
|
||||
};
|
||||
97C146ED1CF9000F007C117D = {
|
||||
CreatedOnToolsVersion = 7.3.1;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 97C146E51CF9000F007C117D;
|
||||
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
97C146ED1CF9000F007C117D /* Runner */,
|
||||
331C8080294A63A400263BE5 /* RunnerTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
331C807F294A63A400263BE5 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
97C146EC1CF9000F007C117D /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
||||
77F0FF292CE8E2AD000E5F12 /* AntelopRelease.plist in Resources */,
|
||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||
);
|
||||
name = "Thin Binary";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
|
||||
};
|
||||
794191FBEC175AF37F9CE4C8 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
88FEBD599DB398AC59C0EE3F /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
9740EEB61CF901F6004384FC /* Run Script */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Run Script";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
||||
};
|
||||
F8D4F3EC164159763EDFD510 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
331C807D294A63A400263BE5 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
97C146EA1CF9000F007C117D /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 97C146ED1CF9000F007C117D /* Runner */;
|
||||
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
97C146FB1CF9000F007C117D /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
97C147001CF9000F007C117D /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
249021D3217E4FDB00AE95B9 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
249021D4217E4FDB00AE95B9 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = A2XKAF4NGP;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = co.treezor.sca.integration;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
331C8088294A63A400263BE5 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 133BBA06A983F2C5040EC4DE /* Pods-RunnerTests.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.treezor.flutterTreezorEntrustSdkBridgeExample.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
331C8089294A63A400263BE5 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = F5B7333FE22DBFA78D8B43B3 /* Pods-RunnerTests.release.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.treezor.flutterTreezorEntrustSdkBridgeExample.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
331C808A294A63A400263BE5 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = EB83C806B041E697DB761E4E /* Pods-RunnerTests.profile.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.treezor.flutterTreezorEntrustSdkBridgeExample.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
97C147031CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
97C147041CF9000F007C117D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
97C147061CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = A2XKAF4NGP;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = co.treezor.sca.integration;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
97C147071CF9000F007C117D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = A2XKAF4NGP;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = co.treezor.sca.integration;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
331C8088294A63A400263BE5 /* Debug */,
|
||||
331C8089294A63A400263BE5 /* Release */,
|
||||
331C808A294A63A400263BE5 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
97C147031CF9000F007C117D /* Debug */,
|
||||
97C147041CF9000F007C117D /* Release */,
|
||||
249021D3217E4FDB00AE95B9 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
97C147061CF9000F007C117D /* Debug */,
|
||||
97C147071CF9000F007C117D /* Release */,
|
||||
249021D4217E4FDB00AE95B9 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 97C146E61CF9000F007C117D /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreviewsEnabled</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1510"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO"
|
||||
parallelizable = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "331C8080294A63A400263BE5"
|
||||
BuildableName = "RunnerTests.xctest"
|
||||
BlueprintName = "RunnerTests"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Profile"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>PushExtension.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
<key>Runner.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
10
packages/flutter_treezor_entrust_sdk_bridge/example/ios/Runner.xcworkspace/contents.xcworkspacedata
generated
Normal file
10
packages/flutter_treezor_entrust_sdk_bridge/example/ios/Runner.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Runner.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Pods/Pods.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreviewsEnabled</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>fr.antelop.alertLoggingEnabled</key>
|
||||
<string>The Antelop SDK is logging.</string>
|
||||
<key>fr.antelop.applicationGroupIdentifier</key>
|
||||
<string>group.com.treezor.scaintegration</string>
|
||||
<key>fr.antelop.initialConnectionTimeout</key>
|
||||
<integer>60</integer>
|
||||
<key>fr.antelop.application_id</key>
|
||||
<integer>1602804620702911917</integer>
|
||||
<key>fr.antelop.issuer_id</key>
|
||||
<string>treezor</string>
|
||||
<key>fr.antelop.teamIdentifier</key>
|
||||
<string>A2XKAF4NGP</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,46 @@
|
||||
import Flutter
|
||||
import UIKit
|
||||
import AntelopSDK
|
||||
|
||||
@main
|
||||
@objc class AppDelegate: FlutterAppDelegate {
|
||||
override func application(
|
||||
_ application: UIApplication,
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||
) -> Bool {
|
||||
GeneratedPluginRegistrant.register(with: self)
|
||||
AntelopAppDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||
}
|
||||
|
||||
override func applicationDidBecomeActive(_ application: UIApplication) {
|
||||
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
|
||||
AntelopAppDelegate.shared.applicationDidBecomeActive(application)
|
||||
}
|
||||
|
||||
override func applicationWillTerminate(_ application: UIApplication) {
|
||||
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
||||
AntelopAppDelegate.shared.applicationWillTerminate(application)
|
||||
}
|
||||
|
||||
override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
|
||||
//you can retreive the deviceToken for you own Server side push
|
||||
|
||||
//Link to AntelopSDK
|
||||
AntelopAppDelegate.shared.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
|
||||
}
|
||||
|
||||
override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
|
||||
guard !AntelopAppDelegate.shared.didReceiveRemoteNotification(userInfo, fetchCompletionHandler: completionHandler) else {
|
||||
// Notification is directed to the Antelop SDK, it will take responsability for calling the Completion Handler.
|
||||
return
|
||||
}
|
||||
// This notification is yours, you must call the Completion Handler at some point.
|
||||
// Your processing ...
|
||||
//completionHandler(...)
|
||||
}
|
||||
|
||||
override func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
|
||||
AntelopAppDelegate.shared.application(application, performFetchWithCompletionHandler: completionHandler)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "83.5x83.5",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "1024x1024",
|
||||
"idiom" : "ios-marketing",
|
||||
"filename" : "Icon-App-1024x1024@1x.png",
|
||||
"scale" : "1x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user