Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
e651c57
update project for BlinkID v7 update
mipar52 Apr 7, 2025
b5ae0e0
add initial ios implementation
mipar52 Apr 8, 2025
d0969d0
add inital deserialization utils
mipar52 Apr 10, 2025
ffbdd51
add document info filter
mipar52 Apr 10, 2025
f3cb8a5
add result serialization utils
mipar52 Apr 14, 2025
4b52d6d
add serialization utils
mipar52 Apr 15, 2025
b7d0b4f
add DirectAPI method of scanning
mipar52 Apr 16, 2025
66821bf
update BlinkidFlutterPlugin
mipar52 Apr 22, 2025
11e4f31
add Android serialization utils
mipar52 Apr 22, 2025
d4ff890
add Android deserialization utils
mipar52 Apr 22, 2025
092f020
minor changes to build.gradle
mipar52 Apr 22, 2025
49b74fc
additional changes to BlinkidFlutterPlugin
mipar52 Apr 22, 2025
a0a2313
update blinkid_flutter interface
mipar52 Apr 23, 2025
6cfd203
add blinkid settings
mipar52 Apr 23, 2025
45fc53a
add blinkid results
mipar52 Apr 23, 2025
92e89ab
add blinkid v7 sample app
mipar52 Apr 23, 2025
e5e10d8
add comments with explanation for method channels
mipar52 Apr 23, 2025
05fae46
update gitignore
mipar52 Apr 23, 2025
7114c6b
update platform interface with comments
mipar52 Apr 23, 2025
17a423d
add comments for blinkid_result
mipar52 Apr 23, 2025
31a8378
add missing comments in blinkid_result
mipar52 Apr 24, 2025
ba84516
add additional modifications in blinkid_settings
mipar52 Apr 24, 2025
64ce687
add missing enums
mipar52 Apr 24, 2025
95fc10d
update README.md
mipar52 Apr 29, 2025
199a241
remove unnecessary dart files
mipar52 Apr 29, 2025
1cb3ec8
update changelog
mipar52 Apr 29, 2025
94c8d62
update pubspec.yaml
mipar52 Apr 29, 2025
613e56a
fix naming
mipar52 Apr 29, 2025
813efe6
update default values
mipar52 Apr 29, 2025
dd33544
add missing resourceRequestTimeout
mipar52 Apr 29, 2025
87bb9c2
improve sample application
mipar52 Apr 29, 2025
9e798ee
Merge pull request #82 from BlinkID/feature/android-platform-channel
mparadina May 5, 2025
c3862ad
minor changes to documentation
mipar52 May 5, 2025
db7e4b5
Merge pull request #83 from BlinkID/feature/dart-types
mparadina May 5, 2025
406aee9
minor changes to naming and serialization utils
mipar52 May 5, 2025
1edebde
minor changes to location implementation
mipar52 May 5, 2025
cb8a1f1
add additional instructions to init script
mipar52 May 6, 2025
11fa7b1
add missing document types for v7.1 release
mipar52 May 6, 2025
aad0595
Merge branch 'feature/blinkid-v7' into feature/ios-platform-channel
mparadina May 6, 2025
611a7fe
Merge pull request #81 from BlinkID/feature/ios-platform-channel
mparadina May 6, 2025
bc953e6
minor changes to ios setup
mipar52 May 6, 2025
db59b2f
additional modification to init script
mipar52 May 6, 2025
f22d9d5
fix issues with constructors and enums
mipar52 May 7, 2025
795291a
additional changes to sample app
mipar52 May 7, 2025
adbdc18
add release notes
mipar52 May 7, 2025
0c7d244
add SPM note in README.md
mipar52 May 7, 2025
ecbc915
fix imports
mipar52 May 7, 2025
3f8fbcf
fix issue with class filter on android
mipar52 May 7, 2025
9efad49
additional modifications to sample app
mipar52 May 7, 2025
1fd4c02
bump SDK to v7.2.0
mipar52 May 8, 2025
e089b8e
minor changes to sample app
mipar52 May 8, 2025
88c3a3d
add missing document number anonymization settings
mipar52 May 8, 2025
441e213
add missing results in sample app
mipar52 May 8, 2025
bed88b5
add missing images
mipar52 May 8, 2025
8131ac3
additional changes to image results in sample app
mipar52 May 8, 2025
3dc175b
add remaining results in sample app builder
mipar52 May 9, 2025
18ba518
minor changes to release notes
mipar52 May 9, 2025
a0cacb0
fix issue with dateResult
mipar52 May 9, 2025
5851f01
add alphabet type strings to sample app
mipar52 May 9, 2025
59f1659
modify default values for settings
mipar52 May 9, 2025
2878d6c
simplify DocumentNumberAnonymizationSettings
mipar52 May 9, 2025
ed99eb6
minor changes to blinkid_settings
mipar52 May 12, 2025
9a0c078
simplify sample app
mipar52 May 12, 2025
a65ba7d
update release notes
mipar52 May 12, 2025
ec67443
update podspec
mipar52 May 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update BlinkidFlutterPlugin
  • Loading branch information
mipar52 committed Apr 22, 2025
commit 66821bf5ae2dfe107c373b34de8625bf45597971
12 changes: 7 additions & 5 deletions BlinkID/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ group = "com.microblink.blinkid_flutter"
version = "1.0-SNAPSHOT"

buildscript {
ext.kotlin_version = "2.1.0"
ext.kotlin_version = "2.0.21"
repositories {
google()
mavenCentral()
Expand All @@ -13,7 +13,6 @@ buildscript {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
}
}

allprojects {
repositories {
google()
Expand All @@ -23,6 +22,7 @@ allprojects {

apply plugin: "com.android.library"
apply plugin: "kotlin-android"
apply plugin: 'kotlin-parcelize'

android {
namespace = "com.microblink.blinkid.flutter"
Expand All @@ -35,7 +35,7 @@ android {
}

kotlinOptions {
jvmTarget = JavaVersion.VERSION_17
jvmTarget = "17"
}

sourceSets {
Expand All @@ -45,12 +45,14 @@ android {

defaultConfig {
minSdk = 24
targetSdk = 35
}

dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.mockito:mockito-core:5.0.0")
implementation("com.microblink:blinkid-ux:7.0.0")
testImplementation("org.mockito:mockito-core:5.1.1")
implementation("com.microblink:blinkid-ux:7.1.0")

}

testOptions {
Expand Down
2 changes: 1 addition & 1 deletion BlinkID/android/settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
rootProject.name = 'blinkid_flutter'
rootProject.name = 'blinkid_flutter'
Original file line number Diff line number Diff line change
@@ -1,33 +1,228 @@
package com.microblink.blinkid.flutter

import android.app.Activity
import android.content.Context
import android.content.Intent
import com.microblink.blinkid.core.BlinkIdSdk
import com.microblink.blinkid.core.session.BlinkIdProcessResult
import com.microblink.blinkid.ux.contract.BlinkIdScanActivityResultStatus
import com.microblink.blinkid.ux.contract.BlinkIdScanActivitySettings
import com.microblink.blinkid.ux.contract.MbBlinkIdScan
import com.microblink.core.LicenseLockedException
import com.microblink.core.image.InputImage
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
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
import io.flutter.plugin.common.PluginRegistry.ActivityResultListener
import kotlinx.coroutines.*

/** BlinkidFlutterPlugin */
class BlinkidFlutterPlugin: FlutterPlugin, MethodCallHandler {
/// The MethodChannel that will the communication between Flutter and native Android
///
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity
private lateinit var channel : MethodChannel

override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "blinkid_flutter")
channel.setMethodCallHandler(this)
}

override fun onMethodCall(call: MethodCall, result: Result) {
if (call.method == "getPlatformVersion") {
result.success("Android ${android.os.Build.VERSION.RELEASE}")
} else {
result.notImplemented()
}
}

override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
}
class BlinkidFlutterPlugin() : FlutterPlugin, MethodCallHandler, ActivityAware,
ActivityResultListener {

private lateinit var channel: MethodChannel
private lateinit var context: Context

private var flutterPluginActivity: Activity? = null
private var flutterResult: Result? = null

override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "blinkid_flutter")
channel.setMethodCallHandler(this)
context = flutterPluginBinding.applicationContext
}

override fun onMethodCall(call: MethodCall, result: Result) {
flutterResult = result
when (call.method) {
"performScan" -> (performScan(call, result))
"performDirectApiScan" -> {
CoroutineScope(Dispatchers.Main).launch {
performDirectApiScan(call)
}
}

else -> {
result.notImplemented()
}
}
}


override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}

private fun performScan(call: MethodCall, result: Result) {
try {
val blinkIdSdkSettings = call.argument<Map<String, Any>>("blinkidSdkSettings")
val blinkidSessionSettings = call.argument<Map<String, Any>>("blinkidSessionSettings")
val classFilterMap = call.argument<Map<String, Any>>("blinkidClassFilter")
val sdkSettings = BlinkidDeserializationUtils
.deserializeBlinkidSdkSettings(blinkIdSdkSettings)
?: return result.error("", "Incorrect SDK Settings", null)

flutterPluginActivity?.let {
val intent = MbBlinkIdScan().createIntent(
it,
BlinkIdScanActivitySettings(
sdkSettings = sdkSettings,
scanningSessionSettings = BlinkidDeserializationUtils.deserializeBlinkidSessionSettings(
blinkidSessionSettings,
false
),
uxSettings = BlinkidDeserializationUtils.deserializeBlinkidUxSettings(
blinkidSessionSettings,
classFilterMap
)
)
)
it.startActivityForResult(intent, 100)
} ?: result.error("blinkid_android", "Activity not found", null)
} catch (error: Exception) {
when (error) {
is LicenseLockedException -> {
result.error("blinkid_android", error.message, null)
}

else -> {
result.error("blinkid_android", error.message, null)
}
}
}
}

private suspend fun performDirectApiScan(call: MethodCall) {
try {
val blinkIdSdkSettings = call.argument<Map<String, Any>>("blinkidSdkSettings")
val blinkidSessionSettings = call.argument<Map<String, Any>>("blinkidSessionSettings")
val firstImage = call.argument<String>("firstImage")
val secondImage = call.argument<String>("secondImage")

BlinkidDeserializationUtils.deserializeBlinkidSdkSettings(blinkIdSdkSettings)?.let {
val blinkidInstance = BlinkIdSdk.initializeSdk(context, it)

when {
blinkidInstance.isSuccess -> {

blinkidInstance.getOrNull()?.let { instance ->
val session = instance.createScanningSession(
BlinkidDeserializationUtils.deserializeBlinkidSessionSettings(
blinkidSessionSettings,
true
)
)
var result: kotlin.Result<BlinkIdProcessResult>? = null

firstImage?.let { firstImageBase64 ->
BlinkidDeserializationUtils.base64ToBitmap(firstImageBase64)
?.let { image ->
result = session.process(InputImage.createFromBitmap(image))
}
}

secondImage?.let { secondImageBase64 ->
BlinkidDeserializationUtils.base64ToBitmap(secondImageBase64)
?.let { image ->
result = session.process(InputImage.createFromBitmap(image))
}
}

if (result?.isSuccess == true) {
val scanningResult = session.getResult()
flutterResult?.success(
BlinkidSerializationUtils.serializeBlinkIdScanningResult(
scanningResult
)
)
} else {
flutterResult?.error(
"blinkid_android",
"Could not get the results.",
null
)
}
instance.close()
}
}

blinkidInstance.isFailure -> {
flutterResult?.error(
"blinkid_android",
blinkidInstance.exceptionOrNull()?.message,
null
)
}

else -> {
flutterResult?.error(
"blinkid_android",
"Could not initialize the SDK.",
null
)
}
}

}

} catch (error: Exception) {
flutterResult?.error("blinkid_android", error.message, null)
}
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
if (requestCode == 100) {

val blinkIdResult = MbBlinkIdScan().parseResult(resultCode, data)
when (blinkIdResult.status) {

BlinkIdScanActivityResultStatus.DocumentScanned -> {
blinkIdResult.result?.let { scanningResult ->
val success = BlinkidSerializationUtils.serializeBlinkIdScanningResult(
scanningResult
)
flutterResult?.success(success)

} ?: flutterResult?.error("blinkid_android", "BlinkID result is empty.", null)
}

BlinkIdScanActivityResultStatus.Canceled -> {
flutterResult?.error("blinkid_android", "Scanning is canceled.", null)
}

BlinkIdScanActivityResultStatus.ErrorSdkInit -> {
flutterResult?.error(
"blinkid_android",
"Could not initialize the SDK.",
null
)
}
}
}
return true
}

override fun onAttachedToActivity(binding: ActivityPluginBinding) {
flutterPluginActivity = binding.activity
binding.addActivityResultListener { requestCode, resultCode, data ->
onActivityResult(requestCode, resultCode, data)
true
}
}

override fun onDetachedFromActivityForConfigChanges() {
flutterPluginActivity = null
}

override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
flutterPluginActivity = binding.activity
}

override fun onDetachedFromActivity() {
flutterPluginActivity = null
}
}