├── .gitignore ├── COPYRIGHT.md ├── README.md ├── blinkid-ui-lib ├── .gitignore ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── com │ │ └── microblink │ │ └── documentscanflow │ │ ├── BaseDocumentScanActivity.kt │ │ ├── CameraErrorHandler.kt │ │ ├── ScanFlowListener.kt │ │ ├── ScanFlowState.kt │ │ ├── Utils.kt │ │ ├── country │ │ ├── Country.kt │ │ ├── CountryFactory.kt │ │ ├── GenericCountry.kt │ │ └── SupportedCountry.kt │ │ ├── document │ │ ├── Document.kt │ │ ├── DocumentType.kt │ │ └── RecognitionsBuilder.kt │ │ ├── recognition │ │ ├── BaseRecognition.kt │ │ ├── ExtractionExt.kt │ │ ├── RecognitionError.kt │ │ ├── RecognitionResult.kt │ │ ├── RecognizerManager.kt │ │ ├── RecognizerProvider.kt │ │ ├── ResultMergeException.kt │ │ ├── ResultValidator.kt │ │ ├── config │ │ │ ├── DefaultRecognitionConfig.kt │ │ │ └── RecognitionConfig.kt │ │ ├── framelistener │ │ │ ├── FrameGrabberMode.kt │ │ │ └── FrameListener.java │ │ ├── implementations │ │ │ ├── AustriaDlRecognition.kt │ │ │ ├── AustriaIdRecognition.kt │ │ │ ├── AustriaPassportRecognition.kt │ │ │ ├── BelgiumIdRecognition.kt │ │ │ ├── BruneiIdRecognition.kt │ │ │ ├── BruneiMilitaryIdRecognition.kt │ │ │ ├── BruneiResidencePermitRecognition.kt │ │ │ ├── BruneiTemporaryResidencePermitRecognition.kt │ │ │ ├── ColombiaDlRecognition.kt │ │ │ ├── ColombiaIdRecognition.kt │ │ │ ├── CroatiaIdRecognition.kt │ │ │ ├── CyprusIdRecognition.kt │ │ │ ├── CyprusOldIdRecognition.kt │ │ │ ├── CzechIdRecognition.kt │ │ │ ├── EgyptIdRecognition.kt │ │ │ ├── EudlRecognition.kt │ │ │ ├── GermanyDlRecognition.kt │ │ │ ├── GermanyIdRecognition.kt │ │ │ ├── GermanyOldIdRecognition.kt │ │ │ ├── HongKongIdRecognition.kt │ │ │ ├── IndonesiaIdRecognition.kt │ │ │ ├── IrelandDlRecognition.kt │ │ │ ├── ItalyDlRecognition.kt │ │ │ ├── JordanIdRecognition.kt │ │ │ ├── KuwaitIdRecognition.kt │ │ │ ├── MalaysiaDlRecognition.kt │ │ │ ├── MalaysiaIkadRecognition.kt │ │ │ ├── MalaysiaKasRecognition.kt │ │ │ ├── MalaysiaMyKadRecognition.kt │ │ │ ├── MalaysiaPrRecognition.kt │ │ │ ├── MalaysiaTenteraRecognition.kt │ │ │ ├── MexicoIdRecognition.kt │ │ │ ├── MoroccoIdRecognition.kt │ │ │ ├── NewZealandDlRecognition.kt │ │ │ ├── NigeriaDlRecognition.kt │ │ │ ├── NigeriaVoterIdRecognition.kt │ │ │ ├── PolandIdRecognition.kt │ │ │ ├── RomaniaIdRecognition.kt │ │ │ ├── SingaporeDlRecognition.kt │ │ │ ├── SingaporeIdRecognition.kt │ │ │ ├── SlovakiaIdRecognition.kt │ │ │ ├── SloveniaIdRecognition.kt │ │ │ ├── SpainDlRecognition.kt │ │ │ ├── SwedenDlRecognition.kt │ │ │ ├── SwitzerlandDlRecognition.kt │ │ │ ├── SwitzerlandIdRecognition.kt │ │ │ ├── SwitzerlandPassportRecognition.kt │ │ │ ├── UnitedArabEmiratesDlRecognition.kt │ │ │ ├── UnitedArabEmiratesIdRecognition.kt │ │ │ ├── UsdlRecognition.kt │ │ │ ├── UsdlUnder21Recognition.kt │ │ │ └── VictoriaDlRecognition.kt │ │ ├── resultentry │ │ │ ├── DateResultEntry.kt │ │ │ ├── ResultEntry.kt │ │ │ ├── ResultKey.kt │ │ │ └── StringResultEntry.kt │ │ └── util │ │ │ ├── FormattingUtils.kt │ │ │ ├── ImageStorage.kt │ │ │ └── StringCombiner.kt │ │ └── ui │ │ ├── InstructionsHandler.kt │ │ ├── TorchButtonHandler.kt │ │ ├── documentchooser │ │ ├── DefaultDocumentChooser.kt │ │ ├── DocumentChooser.kt │ │ ├── countryfilter │ │ │ ├── AllowAllCountryFilter.kt │ │ │ ├── BlacklistCountryFilter.kt │ │ │ ├── CountryFilter.kt │ │ │ └── WhitelistCountryFilter.kt │ │ └── defaultimplementation │ │ │ ├── ChooseCountryActivity.kt │ │ │ ├── adapters │ │ │ ├── AlphabeticListAdapter.kt │ │ │ └── FilterListAdapter.kt │ │ │ └── fragments │ │ │ ├── CountryFindFragment.kt │ │ │ ├── CountryListFragment.kt │ │ │ └── Delegates.kt │ │ ├── localization │ │ ├── DefaultLocalizationManager.kt │ │ └── LocalizationManager.kt │ │ ├── scanlineanimator │ │ └── EmptyScanLineAnimator.kt │ │ ├── scansoundplayer │ │ ├── EmptyScanSuccessPlayer.kt │ │ ├── ScanSuccessPlayer.kt │ │ └── SoundPoolScanSuccessPlayer.kt │ │ ├── scantimeouthandler │ │ ├── DefaultScanTimeoutHandler.kt │ │ └── ScanTimeoutHandler.kt │ │ └── splashoverlay │ │ ├── InvisibleSplashOverlaySettings.kt │ │ └── SplashOverlaySettings.kt │ └── res │ ├── anim │ ├── mb_hide_text.xml │ └── mb_show_text.xml │ ├── drawable-hdpi │ ├── mb_ic_arrow_right.png │ ├── mb_ic_checkmark.png │ ├── mb_ic_flip_card.png │ ├── mb_ic_torch_off.png │ └── mb_ic_torch_on.png │ ├── drawable-mdpi │ ├── mb_ic_arrow_right.png │ ├── mb_ic_checkmark.png │ ├── mb_ic_flip_card.png │ ├── mb_ic_torch_off.png │ └── mb_ic_torch_on.png │ ├── drawable-xhdpi │ ├── mb_ic_arrow_right.png │ ├── mb_ic_checkmark.png │ ├── mb_ic_flip_card.png │ ├── mb_ic_torch_off.png │ └── mb_ic_torch_on.png │ ├── drawable-xxhdpi │ ├── mb_ic_arrow_right.png │ ├── mb_ic_checkmark.png │ ├── mb_ic_flip_card.png │ ├── mb_ic_torch_off.png │ └── mb_ic_torch_on.png │ ├── drawable-xxxhdpi │ ├── mb_ic_arrow_right.png │ ├── mb_ic_checkmark.png │ ├── mb_ic_flip_card.png │ ├── mb_ic_torch_off.png │ └── mb_ic_torch_on.png │ ├── drawable │ └── mb_bg_choose_country.xml │ ├── layout │ ├── mb_activity_choose_country.xml │ ├── mb_activity_scan_document.xml │ ├── mb_fragment_country_list.xml │ ├── mb_include_scan_bottom_container.xml │ ├── mb_include_splash_overlay.xml │ └── mb_list_item_country.xml │ ├── menu │ ├── mb_menu_choose_country.xml │ └── mb_menu_scan.xml │ ├── raw │ └── beep.mp3 │ ├── values-de │ ├── result_entry_keys.xml │ └── strings.xml │ ├── values-es │ ├── result_entry_keys.xml │ └── strings.xml │ ├── values-fr │ ├── result_entry_keys.xml │ └── strings.xml │ ├── values-hdpi │ └── dimens.xml │ ├── values-ldrtl │ └── integers.xml │ ├── values-v19 │ └── dimens.xml │ ├── values-xhdpi │ └── dimens.xml │ └── values │ ├── attrs_choose_country.xml │ ├── attrs_scan.xml │ ├── colors.xml │ ├── dimens.xml │ ├── integers.xml │ ├── result_entry_keys.xml │ ├── strings.xml │ ├── styles_text.xml │ └── styles_theme.xml ├── blinkid-ui-sample-app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── com.microblink.blinkidui.sample.mblic │ ├── java │ └── com │ │ └── microblink │ │ ├── ResultsActivity.java │ │ ├── SampleApp.java │ │ └── ScanActivity.java │ └── res │ ├── drawable │ └── custom_bg_choose_country.xml │ ├── layout │ ├── activity_result.xml │ └── mb_include_splash_overlay.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .idea 5 | .DS_Store 6 | /build 7 | /captures 8 | -------------------------------------------------------------------------------- /COPYRIGHT.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016. Microblink LLC -------------------------------------------------------------------------------- /blinkid-ui-lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /blinkid-ui-lib/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | apply plugin: 'com.github.dcendents.android-maven' 5 | 6 | group='com.github.BlinkID' 7 | 8 | ext.altDependencyProperty = "ALTERNATIVE_BLINK_ID_DEPENDENCY" 9 | ext.isAltDependencyProjectProperty = "IS_ALTERNATIVE_BLINK_ID_DEPENDENCY_PROJECT" 10 | 11 | ext.missingDimensionProperty = "MISSING_DIMENSION" 12 | ext.missingDimensionRequestedValueProperty = "MISSING_DIMENSION_REQUESTED_VALUE" 13 | 14 | android { 15 | compileSdkVersion 28 16 | buildToolsVersion "28.0.3" 17 | 18 | defaultConfig { 19 | minSdkVersion 16 20 | targetSdkVersion 28 21 | versionCode 1 22 | versionName "1.0" 23 | 24 | if (project.hasProperty(missingDimensionProperty)) { 25 | missingDimensionStrategy project.property(missingDimensionProperty), project.property(missingDimensionRequestedValueProperty) 26 | } 27 | } 28 | 29 | buildTypes { 30 | release { 31 | minifyEnabled false 32 | } 33 | distribute { 34 | minifyEnabled false 35 | } 36 | } 37 | 38 | sourceSets { 39 | main.java.srcDirs += 'src/main/kotlin' 40 | } 41 | } 42 | 43 | ext.kotlin_version = '1.3.10' 44 | ext.appCompatVersion = "28.0.0" 45 | 46 | dependencies { 47 | implementation fileTree(include: ['*.jar'], dir: 'libs') 48 | 49 | implementation "com.android.support:appcompat-v7:$appCompatVersion" 50 | implementation "com.android.support:design:$appCompatVersion" 51 | 52 | implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 53 | implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" 54 | 55 | if (isBlinkIdDependencyProject()) { 56 | implementation project(getBlinkIdDependency()) 57 | } else { 58 | api(getBlinkIdDependency()) { 59 | transitive = true 60 | } 61 | } 62 | } 63 | 64 | String getBlinkIdDependency() { 65 | if (project.hasProperty(altDependencyProperty)) { 66 | return project.property(altDependencyProperty) 67 | } else { 68 | return "com.microblink:blinkid:4.11.1@aar" 69 | } 70 | } 71 | 72 | boolean isBlinkIdDependencyProject() { 73 | if (project.hasProperty(altDependencyProperty) 74 | && project.hasProperty(isAltDependencyProjectProperty)) { 75 | return project.property(isAltDependencyProjectProperty).toBoolean() 76 | } else { 77 | return false 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /blinkid-ui-lib/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /blinkid-ui-lib/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jul 26 08:54:52 CEST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip 7 | -------------------------------------------------------------------------------- /blinkid-ui-lib/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/CameraErrorHandler.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow 2 | 3 | import android.content.Context 4 | import android.support.annotation.StringRes 5 | import android.support.v7.app.AlertDialog 6 | import com.microblink.hardware.camera.AutoFocusRequiredButNotSupportedException 7 | import com.microblink.hardware.camera.CameraResolutionTooSmallException 8 | import com.microblink.recognition.FeatureNotSupportedException 9 | import com.microblink.recognition.RecognizerError 10 | import com.microblink.view.NotSupportedReason 11 | 12 | internal class CameraErrorHandler(private val context: Context, private val onUnrecoverableError: () -> Unit) { 13 | 14 | fun handleCameraError(exc: Throwable?) { 15 | when (exc) { 16 | is CameraResolutionTooSmallException -> handleNotSupportedError(getString(R.string.mb_feature_unsupported_device)) 17 | is RecognizerError -> { 18 | handleInitError(getString(R.string.mb_error_initializing)) 19 | } 20 | is UnsatisfiedLinkError -> handleInitError(getString(R.string.mb_error_initializing)) 21 | is AutoFocusRequiredButNotSupportedException -> handleNotSupportedError(getString(R.string.mb_feature_unsupported_autofocus)) 22 | is FeatureNotSupportedException -> handleNotSupportedError(getNotSupportedReasonDescription(exc.reason)) 23 | is SecurityException -> handleInitError(getString(R.string.mb_camera_not_allowed)) 24 | else -> handleInitError(getString(R.string.mb_camera_error)) 25 | } 26 | } 27 | 28 | private fun handleInitError(message: String) = AlertDialog.Builder(context, R.style.MbErrorAlertDialogTheme) 29 | .setTitle(getString(R.string.mb_title_error_starting)) 30 | .setMessage(message) 31 | .setNeutralButton(getString(R.string.mb_ok)) { _, _ -> onUnrecoverableError() } 32 | .setCancelable(false) 33 | .create() 34 | .show() 35 | 36 | private fun handleNotSupportedError(notSupportedReason: String?) = AlertDialog.Builder(context, R.style.MbErrorAlertDialogTheme) 37 | .setTitle(getString(R.string.mb_title_not_supported)) 38 | .setMessage(notSupportedReason) 39 | .setNeutralButton(getString(R.string.mb_ok)) { _, _ -> onUnrecoverableError() } 40 | .setCancelable(false) 41 | .create() 42 | .show() 43 | 44 | private fun getNotSupportedReasonDescription(reason: NotSupportedReason): String = when (reason) { 45 | NotSupportedReason.CUSTOM_UI_FORBIDDEN -> getString(com.microblink.library.R.string.mb_custom_ui_forbidden) 46 | NotSupportedReason.INVALID_OR_MISSING_LICENSE -> getString(com.microblink.library.R.string.mb_invalid_license) 47 | NotSupportedReason.UNSUPPORTED_ANDROID_VERSION -> getString(com.microblink.library.R.string.mb_feature_unsupported_android_version) 48 | else -> getString(com.microblink.library.R.string.mb_feature_unsupported_device) 49 | } 50 | 51 | private fun getString(@StringRes id: Int) = context.getString(id) 52 | 53 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ScanFlowListener.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow 2 | 3 | import com.microblink.documentscanflow.document.Document 4 | import com.microblink.documentscanflow.recognition.RecognitionResult 5 | import com.microblink.image.Image 6 | 7 | interface ScanFlowListener { 8 | 9 | fun onScanStarted() 10 | 11 | fun onFirstSideScanned(recognitionResult: RecognitionResult, successFrame: Image?) 12 | 13 | fun onEntireDocumentScanned(recognitionResult: RecognitionResult, successFrame: Image?) 14 | 15 | fun onSelectedDocumentChanged(oldDocument: Document, newDocument: Document) 16 | 17 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ScanFlowState.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow 2 | 3 | enum class ScanFlowState { 4 | 5 | NOT_STARTED, 6 | FRONT_SIDE_SCAN, 7 | BACK_SIDE_SCAN, 8 | ANY_SIDE_SCAN 9 | 10 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/Utils.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow 2 | 3 | import android.content.Context 4 | import android.support.annotation.AttrRes 5 | import android.support.annotation.ColorInt 6 | import android.support.annotation.LayoutRes 7 | import android.util.TypedValue 8 | import android.view.LayoutInflater 9 | import android.view.View 10 | import android.view.ViewGroup 11 | import android.view.animation.AlphaAnimation 12 | import android.view.animation.Animation 13 | import com.microblink.entities.detectors.quad.document.DocumentDetector 14 | import com.microblink.entities.detectors.quad.document.DocumentSpecification 15 | import com.microblink.entities.detectors.quad.document.DocumentSpecificationPreset 16 | import com.microblink.entities.processors.imageReturn.ImageReturnProcessor 17 | import com.microblink.entities.recognizers.Recognizer 18 | import com.microblink.entities.recognizers.blinkid.mrtd.MrzResult 19 | import com.microblink.entities.recognizers.detector.DetectorRecognizer 20 | import com.microblink.entities.recognizers.templating.ProcessorGroup 21 | import com.microblink.entities.recognizers.templating.TemplatingClass 22 | import com.microblink.entities.recognizers.templating.dewarpPolicies.DPIBasedDewarpPolicy 23 | import com.microblink.geometry.Rectangle 24 | import com.microblink.results.date.Date 25 | import java.util.* 26 | 27 | internal fun View.fadeOut(duration : Long) { 28 | val alpha = AlphaAnimation(1.0f, 0.0f) 29 | alpha.duration = duration 30 | alpha.setAnimationListener(object : Animation.AnimationListener { 31 | override fun onAnimationStart(animation: Animation) { 32 | } 33 | 34 | override fun onAnimationEnd(animation: Animation) { 35 | visibility = View.GONE 36 | } 37 | 38 | override fun onAnimationRepeat(animation: Animation) { 39 | } 40 | }) 41 | startAnimation(alpha) 42 | } 43 | 44 | internal fun View.setVisible(isVisible : Boolean) { 45 | visibility = if (isVisible) View.VISIBLE 46 | else View.GONE 47 | } 48 | 49 | /** 50 | * Compares current date with the given date and returns positive integer if current date is greater than 51 | * the given argument, negative integer if the given argument is greater than current date. If dates are the 52 | * same returns 0. 53 | */ 54 | internal fun Date.compareTo(other: Date): Int { 55 | if (this.year < other.year) { 56 | return -1 57 | } else if (this.year > other.year) { 58 | return 1 59 | } 60 | if (this.month < other.month) { 61 | return -1 62 | } else if (this.month > other.month) { 63 | return 1 64 | } 65 | if (this.day < other.day) { 66 | return -1 67 | } else if (this.day > other.day) { 68 | return 1 69 | } 70 | return 0 71 | } 72 | 73 | internal fun String.sanitizeMRZString(): String { 74 | return this.replace('<', ' ').trim() 75 | } 76 | 77 | internal fun ViewGroup.inflate(@LayoutRes layoutRes: Int, attachToRoot: Boolean = false): View { 78 | return LayoutInflater.from(context).inflate(layoutRes, this, attachToRoot) 79 | } 80 | 81 | internal fun Recognizer.Result.isEmpty() = this.resultState == Recognizer.Result.State.Empty 82 | 83 | internal fun Recognizer.Result.isNotEmpty() = this.resultState != Recognizer.Result.State.Empty 84 | 85 | internal fun MrzResult.buildTitle() = "$primaryId $secondaryId" 86 | 87 | internal fun Calendar.currentDate() = Date(get(Calendar.DAY_OF_MONTH), get(Calendar.MONTH) + 1, get(Calendar.YEAR)) 88 | 89 | 90 | @ColorInt 91 | internal fun Context.getThemeColor(@AttrRes id: Int): Int { 92 | val typedValue = TypedValue() 93 | val a = obtainStyledAttributes(typedValue.data, intArrayOf(id)) 94 | val color = a.getColor(0, 0) 95 | a.recycle() 96 | return color 97 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/country/Country.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.country 2 | 3 | import com.microblink.documentscanflow.R 4 | import com.microblink.documentscanflow.document.DocumentType 5 | import com.microblink.documentscanflow.recognition.BaseRecognition 6 | import java.util.* 7 | 8 | interface Country { 9 | 10 | val code: String 11 | val recognitionsByDocumentType: Map 12 | val documentNameOverrides: Map 13 | 14 | /** 15 | * Returns the name of this country, localized to the current locale (current app language). 16 | * Returns the empty string if this locale does not correspond to a specific 17 | * country. 18 | */ 19 | fun getLocalisedName(): String { 20 | val locale = Locale("", code) 21 | return locale.getDisplayCountry(CountryFactory.currentLocale) 22 | } 23 | 24 | fun getRecognition(documentType: DocumentType): BaseRecognition { 25 | return recognitionsByDocumentType[documentType] 26 | ?: throw IllegalArgumentException("This county does not support $documentType") 27 | } 28 | 29 | fun getSupportedDocumentTypes() = recognitionsByDocumentType.keys.toList() 30 | 31 | fun getDocumentNameStringId(documentType: DocumentType): Int { 32 | val overriddenName = documentNameOverrides[documentType] 33 | if (overriddenName != null) return overriddenName 34 | 35 | return when(documentType) { 36 | DocumentType.ID -> R.string.mb_id_card 37 | DocumentType.OLD_ID -> R.string.mb_old_id_card 38 | DocumentType.DL -> R.string.mb_driver_license 39 | DocumentType.PASSPORT -> R.string.mb_passport 40 | DocumentType.TRAVEL_DOCUMENT_VISA -> R.string.mb_visa 41 | DocumentType.RESIDENCE_PERMIT -> R.string.mb_residence_permit 42 | DocumentType.TEMPORARY_RESIDENCE_PERMIT -> R.string.mb_temporary_residence_permit 43 | DocumentType.IMMIGRATOR_ID -> R.string.mb_immigrator_id 44 | DocumentType.MILITARY_ID -> R.string.mb_military_id 45 | DocumentType.NEW_ID -> R.string.mb_new_id_card 46 | DocumentType.TEMPORARY_RESIDENT_ID -> R.string.mb_temporary_resident_id 47 | DocumentType.PERMANENT_RESIDENT_ID -> R.string.mb_permanent_resident_id 48 | DocumentType.VICTORIA_DL -> R.string.mb_victoria_dl 49 | DocumentType.WORK_PASS -> R.string.mb_work_pass 50 | DocumentType.UNDER_21_ID -> R.string.mb_under_21_id 51 | DocumentType.VOTER_ID -> R.string.mb_voter_id 52 | } 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/country/CountryFactory.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.country 2 | 3 | import com.microblink.documentscanflow.ui.documentchooser.countryfilter.CountryFilter 4 | import java.text.Collator 5 | import java.util.* 6 | 7 | object CountryFactory { 8 | 9 | var currentLocale: Locale = Locale.ENGLISH 10 | private set 11 | 12 | private val countriesByCode = HashMap() 13 | 14 | private lateinit var sortedCountries: List 15 | 16 | private var shouldSortCountries = true 17 | 18 | init { 19 | for (supportedCountry in SupportedCountry.values()) { 20 | countriesByCode[supportedCountry.code] = supportedCountry 21 | } 22 | 23 | val countryCodes: Array = Locale.getISOCountries() 24 | for (countryCode in countryCodes) { 25 | val countryCodeLowercase = countryCode.toLowerCase(Locale.US) 26 | if (!countriesByCode.containsKey(countryCodeLowercase)) { 27 | val country = GenericCountry(countryCodeLowercase) 28 | if (!country.getLocalisedName().isEmpty()) { 29 | countriesByCode[countryCodeLowercase] = country 30 | } 31 | } 32 | } 33 | } 34 | 35 | fun getCountryForCode(countryCode: String): Country? { 36 | val lowercaseCode = countryCode.toLowerCase(Locale.US) 37 | return countriesByCode[lowercaseCode] 38 | } 39 | 40 | fun getSortedCountries(countryFilter: CountryFilter): List { 41 | if (shouldSortCountries) { 42 | sortedCountries = createSortedCountriesList() 43 | shouldSortCountries = false 44 | } 45 | return countryFilter.filter(sortedCountries) 46 | } 47 | 48 | internal fun setLocale(newLocale: Locale) { 49 | if (currentLocale.language != newLocale.language) { 50 | shouldSortCountries = true 51 | } 52 | currentLocale = newLocale 53 | } 54 | 55 | private fun createSortedCountriesList(): List { 56 | val coll = Collator.getInstance() 57 | coll.strength = Collator.SECONDARY 58 | return countriesByCode.values 59 | .sortedWith( 60 | Comparator { 61 | country1, country2 -> 62 | val name1 = country1.getLocalisedName() 63 | val name2 = country2.getLocalisedName() 64 | if (name1.isNotEmpty() && name2.isNotEmpty() && name1[0] != name2[0]) { 65 | coll.compare(name1.substring(0, 1), name2.substring(0, 1)) 66 | } else { 67 | coll.compare(name1, name2) 68 | } 69 | }) 70 | } 71 | 72 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/country/GenericCountry.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.country 2 | 3 | import com.microblink.documentscanflow.document.RecognitionsBuilder 4 | import com.microblink.documentscanflow.document.DocumentType 5 | import com.microblink.documentscanflow.recognition.BaseRecognition 6 | 7 | class GenericCountry(override val code: String) : Country { 8 | 9 | override val documentNameOverrides: Map = LinkedHashMap() 10 | 11 | override val recognitionsByDocumentType: Map = RecognitionsBuilder().build() 12 | 13 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/document/Document.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.document 2 | 3 | import android.content.Context 4 | import android.support.v4.util.ObjectsCompat 5 | import com.microblink.documentscanflow.country.Country 6 | 7 | class Document(val country: Country, val documentType: DocumentType) { 8 | 9 | init { 10 | if (documentType !in country.getSupportedDocumentTypes()) { 11 | throw IllegalArgumentException("${country.getLocalisedName()} does not support $documentType") 12 | } 13 | } 14 | 15 | fun isFullySupported() = getRecognition().isFullySupported 16 | 17 | fun getRecognition() = country.getRecognition(documentType) 18 | 19 | fun getTitle(context : Context): String { 20 | return country.getLocalisedName() + ", " + context.getString(getDocumentNameStringId()) 21 | } 22 | 23 | private fun getDocumentNameStringId() = country.getDocumentNameStringId(documentType) 24 | 25 | override fun equals(other: Any?): Boolean { 26 | return other is Document && other.country == this.country && other.documentType == this.documentType 27 | } 28 | 29 | override fun hashCode() = ObjectsCompat.hash(documentType, country) 30 | 31 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/document/DocumentType.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.document 2 | 3 | enum class DocumentType { 4 | 5 | ID, 6 | OLD_ID, 7 | DL, 8 | PASSPORT, 9 | TRAVEL_DOCUMENT_VISA, 10 | RESIDENCE_PERMIT, 11 | TEMPORARY_RESIDENCE_PERMIT, 12 | IMMIGRATOR_ID, 13 | MILITARY_ID, 14 | NEW_ID, 15 | TEMPORARY_RESIDENT_ID, 16 | PERMANENT_RESIDENT_ID, 17 | VOTER_ID, 18 | 19 | // country specific: 20 | 21 | // Australia 22 | VICTORIA_DL, 23 | 24 | // Singapore 25 | WORK_PASS, 26 | 27 | // USA 28 | UNDER_21_ID 29 | 30 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/ExtractionExt.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition 2 | 3 | import com.microblink.documentscanflow.isEmpty 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey 5 | import com.microblink.entities.recognizers.blinkbarcode.usdl.UsdlKeys 6 | import com.microblink.entities.recognizers.blinkbarcode.usdl.UsdlRecognizer 7 | import com.microblink.entities.recognizers.blinkid.mrtd.MrtdDocumentType 8 | import com.microblink.entities.recognizers.blinkid.mrtd.MrzResult 9 | 10 | fun BaseRecognition.extract(backResult: UsdlRecognizer.Result) { 11 | if (backResult.isEmpty()) return 12 | 13 | add(ResultKey.FIRST_NAME, backResult.firstName) 14 | add(ResultKey.LAST_NAME, backResult.lastName) 15 | add(ResultKey.FULL_NAME, backResult.fullName) 16 | add(ResultKey.DATE_OF_BIRTH, backResult.dateOfBirth) 17 | add(ResultKey.DATE_OF_ISSUE, backResult.dateOfIssue) 18 | addDateOfExpiry(backResult.dateOfExpiry.date) 19 | add(ResultKey.DOCUMENT_NUMBER, backResult.getField(UsdlKeys.CustomerIdNumber)) 20 | add(ResultKey.ADDRESS, backResult.address) 21 | add(ResultKey.SEX, backResult.sex) 22 | add(ResultKey.VEHICLE_CLASS, backResult.vehicleClass) 23 | add(ResultKey.ENDORSEMENTS, backResult.endorsements) 24 | add(ResultKey.DRIVER_RESTRICTIONS, backResult.restrictions) 25 | add(ResultKey.BARCODE_DATA, backResult.rawStringData) 26 | } 27 | 28 | fun BaseRecognition.extract(mrzResult: MrzResult) { 29 | add(ResultKey.PRIMARY_ID, mrzResult.primaryId) 30 | add(ResultKey.SECONDARY_ID, mrzResult.secondaryId) 31 | add(ResultKey.DATE_OF_BIRTH, mrzResult.dateOfBirth.date) 32 | add(ResultKey.SEX, mrzResult.gender) 33 | add(ResultKey.NATIONALITY, mrzResult.nationality) 34 | add(ResultKey.DOCUMENT_CODE, mrzResult.documentCode) 35 | add(ResultKey.ISSUER, mrzResult.issuer) 36 | addDateOfExpiry(mrzResult.dateOfExpiry.date) 37 | add(ResultKey.OPTIONAL_FIELD_2, mrzResult.opt2) 38 | add(ResultKey.MRZ_TEXT, mrzResult.mrzText) 39 | 40 | if (mrzResult.documentType == MrtdDocumentType.MRTD_TYPE_GREEN_CARD) { 41 | add(ResultKey.ALIEN_NUMBER, mrzResult.alienNumber) 42 | add(ResultKey.APPLICATION_RECEIPT_NUMBER, mrzResult.applicationReceiptNumber) 43 | add(ResultKey.IMMIGRANT_CASE_NUMBER, mrzResult.immigrantCaseNumber) 44 | } else { 45 | add(ResultKey.DOCUMENT_NUMBER, mrzResult.documentNumber) 46 | add(ResultKey.OPTIONAL_FIELD_1, mrzResult.opt1) 47 | } 48 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/RecognitionError.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition 2 | 3 | internal enum class RecognitionError { 4 | 5 | NONE, 6 | SIDES_NOT_MATCHING 7 | 8 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/RecognitionResult.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultEntry 4 | import com.microblink.image.Image 5 | 6 | data class RecognitionResult(val resultTitle: String, 7 | val resultEntries: List>, 8 | val frontSideDocumentImage: Image? = null, 9 | val backSideDocumentImage: Image? = null, 10 | val faceImage: Image? = null, 11 | val signatureImage: Image? = null) { 12 | 13 | fun getResultEntriesAsMap() = resultEntries.associateBy { it.key } 14 | 15 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/RecognizerProvider.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition 2 | 3 | import com.microblink.entities.recognizers.Recognizer 4 | 5 | abstract class RecognizerProvider { 6 | 7 | val recognizers by lazy { createRecognizers()} 8 | 9 | protected abstract fun createRecognizers(): List> 10 | 11 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/ResultMergeException.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition 2 | 3 | class ResultMergeException: Throwable() -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/ResultValidator.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition 2 | 3 | import com.microblink.documentscanflow.compareTo 4 | import com.microblink.documentscanflow.recognition.util.StringCombiner 5 | import com.microblink.entities.recognizers.blinkid.CombinedResult 6 | import com.microblink.results.date.Date 7 | import com.microblink.results.date.DateResult 8 | 9 | internal class ResultValidator { 10 | 11 | private val stringCombiner = StringCombiner(null) 12 | var isResultValid = true 13 | private set 14 | 15 | fun match(combinedResult: CombinedResult?): ResultValidator { 16 | isResultValid = combinedResult?.isDocumentDataMatch ?: false 17 | return this 18 | } 19 | 20 | fun match(str1: String?, str2: String?, maxAllowedDistance: Int = 1): ResultValidator { 21 | val isValid = validateString(str1, str2, maxAllowedDistance) 22 | if (!isValid) { 23 | isResultValid = false 24 | } 25 | return this 26 | } 27 | 28 | fun match(date1: DateResult?, date2: DateResult?): ResultValidator { 29 | return match(date1?.date, date2?.date) 30 | } 31 | 32 | fun match(date1: Date?, date2: Date?): ResultValidator { 33 | val isValid = validateDate(date1, date2) 34 | if (!isValid) { 35 | isResultValid = false 36 | } 37 | 38 | return this 39 | } 40 | 41 | private fun validateString(str1: String?, str2: String?, maxAllowedDistance: Int): Boolean { 42 | if (str1 == null || str2 == null) { 43 | if (str1 != str2) { 44 | return false 45 | } 46 | } else if (stringCombiner.calcDistance(str1, str2, false) > maxAllowedDistance) { 47 | return false 48 | } 49 | return true 50 | } 51 | 52 | private fun validateDate(d1: Date?, d2: Date?): Boolean { 53 | if (d1 == null || d2 == null) { 54 | if (d1 != d2) { 55 | return false 56 | } 57 | } else if (d1.compareTo(d1) != 0){ 58 | return false 59 | } 60 | return true 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/config/DefaultRecognitionConfig.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.config 2 | 3 | class DefaultRecognitionConfig: RecognitionConfig { 4 | 5 | override fun getRecognitionTimeoutSeconds() = 10 6 | 7 | override fun isPartialResultAllowed() = false 8 | 9 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/config/RecognitionConfig.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.config 2 | 3 | interface RecognitionConfig { 4 | 5 | /** 6 | * Returns timeout after which partial results will be returned or scanning will be reset 7 | * depending on isPartialResultAllowed(). 8 | * Timeout starts when the first field is read from the card and resets when document side is changed. 9 | */ 10 | fun getRecognitionTimeoutSeconds(): Int 11 | 12 | /** 13 | * Returns true if scanning will finish on timeout even if not all fields were read, 14 | * false if scanning will restart until all fields were read. 15 | */ 16 | fun isPartialResultAllowed(): Boolean 17 | 18 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/framelistener/FrameGrabberMode.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.framelistener 2 | 3 | enum class FrameGrabberMode { 4 | 5 | NOTHING, 6 | SUCCESS_FRAMES, 7 | ALL_FRAMES 8 | 9 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/framelistener/FrameListener.java: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.framelistener; 2 | 3 | import android.support.annotation.Nullable; 4 | import com.microblink.image.Image; 5 | 6 | public interface FrameListener { 7 | 8 | void onFrameAvailable(@Nullable Image frame); 9 | 10 | FrameListener EMPTY = new FrameListener() { 11 | @Override 12 | public void onFrameAvailable(@Nullable Image frame) { 13 | } 14 | }; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/AustriaDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.austria.AustriaDlFrontRecognizer 7 | 8 | class AustriaDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { AustriaDlFrontRecognizer() } 11 | 12 | override fun extractData(result: AustriaDlFrontRecognizer.Result): String? { 13 | result.apply { 14 | add(LAST_NAME, name) 15 | add(FIRST_NAME, firstName) 16 | add(DATE_OF_BIRTH, dateOfBirth) 17 | add(PLACE_OF_BIRTH, placeOfBirth) 18 | add(DATE_OF_ISSUE, dateOfIssue) 19 | addDateOfExpiry(dateOfExpiry.date) 20 | add(ISSUING_AUTHORITY, issuingAuthority) 21 | add(LICENCE_NUMBER, licenceNumber) 22 | add(VEHICLE_CATEGORIES, vehicleCategories) 23 | } 24 | 25 | return FormattingUtils.formatResultTitle(result.firstName, result.name) 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/AustriaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.austria.AustriaCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.austria.AustriaIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.austria.AustriaIdFrontRecognizer 11 | 12 | class AustriaIdRecognition 13 | : CombinedRecognition() { 14 | 15 | override val frontRecognizer by lazy { AustriaIdFrontRecognizer() } 16 | override val backRecognizer by lazy { AustriaIdBackRecognizer() } 17 | override val combinedRecognizer by lazy { AustriaCombinedRecognizer() } 18 | 19 | override fun extractCombinedResult(combinedResult: AustriaCombinedRecognizer.Result): String? { 20 | add(LAST_NAME, combinedResult.surname) 21 | add(FIRST_NAME, combinedResult.givenName) 22 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 23 | add(SEX, combinedResult.sex) 24 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 25 | add(HEIGHT, combinedResult.height) 26 | add(EYE_COLOR, combinedResult.eyeColour) 27 | add(PLACE_OF_BIRTH, combinedResult.placeOfBirth) 28 | add(NATIONALITY, combinedResult.nationality) 29 | add(ISSUING_AUTHORITY, combinedResult.issuingAuthority) 30 | add(DATE_OF_ISSUE, combinedResult.dateOfIssuance) 31 | add(PRINCIPAL_RESIDENCE_AT_ISSUANCE, combinedResult.principalResidence) 32 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 33 | return FormattingUtils.formatResultTitle(combinedResult.givenName, combinedResult.surname) 34 | } 35 | 36 | override fun extractFrontResult(frontResult: AustriaIdFrontRecognizer.Result): String? { 37 | add(LAST_NAME, frontResult.surname) 38 | add(FIRST_NAME, frontResult.givenName) 39 | add(DOCUMENT_NUMBER, frontResult.documentNumber) 40 | add(SEX, frontResult.sex) 41 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 42 | return FormattingUtils.formatResultTitle(frontResult.givenName, frontResult.surname) 43 | } 44 | 45 | override fun extractBackResult(backResult: AustriaIdBackRecognizer.Result): String? { 46 | extract(backResult.mrzResult) 47 | add(PLACE_OF_BIRTH, backResult.placeOfBirth) 48 | add(ISSUING_AUTHORITY, backResult.issuingAuthority) 49 | add(DATE_OF_ISSUE, backResult.dateOfIssuance) 50 | return backResult.mrzResult.buildTitle() 51 | } 52 | 53 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/AustriaPassportRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.documentscanflow.recognition.util.StringCombiner 7 | import com.microblink.entities.recognizers.blinkid.austria.AustriaPassportRecognizer 8 | 9 | class AustriaPassportRecognition : SingleSideRecognition() { 10 | 11 | override val recognizer by lazy { AustriaPassportRecognizer() } 12 | 13 | override fun extractData(result: AustriaPassportRecognizer.Result): String? { 14 | val stringCombiner = StringCombiner(StringCombiner.Country.AUSTRIA) 15 | val firstName = stringCombiner.combineMRZString(result.mrzResult.secondaryId, result.givenName) 16 | val lastName = stringCombiner.combineMRZString(result.mrzResult.primaryId, result.surname) 17 | 18 | add(FIRST_NAME, firstName) 19 | add(LAST_NAME, lastName) 20 | add(NATIONALITY, result.nationality) 21 | add(PLACE_OF_BIRTH, result.placeOfBirth) 22 | add(SEX, result.sex) 23 | add(DOCUMENT_NUMBER, result.passportNumber.removeSuffix("<")) 24 | add(DATE_OF_BIRTH, result.dateOfBirth) 25 | add(DATE_OF_ISSUE, result.dateOfIssue) 26 | add(ISSUER, result.issuingAuthority) 27 | addDateOfExpiry(result.dateOfExpiry.date) 28 | 29 | return FormattingUtils.formatResultTitle(firstName, lastName) 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/BelgiumIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.belgium.BelgiumCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.belgium.BelgiumIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.belgium.BelgiumIdFrontRecognizer 11 | 12 | class BelgiumIdRecognition 13 | : CombinedRecognition() { 14 | 15 | override val frontRecognizer by lazy { BelgiumIdFrontRecognizer() } 16 | override val backRecognizer by lazy { BelgiumIdBackRecognizer() } 17 | override val combinedRecognizer by lazy { BelgiumCombinedRecognizer() } 18 | 19 | override fun extractCombinedResult(combinedResult: BelgiumCombinedRecognizer.Result): String? { 20 | add(LAST_NAME, combinedResult.lastName) 21 | add(FIRST_NAME, combinedResult.firstName) 22 | add(DOCUMENT_NUMBER, combinedResult.cardNumber) 23 | add(SEX, combinedResult.sex) 24 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 25 | add(NATIONALITY, combinedResult.nationality) 26 | add(ISSUER, combinedResult.issuedBy) 27 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 28 | 29 | return FormattingUtils.formatResultTitle(combinedResult.firstName, combinedResult.lastName) 30 | } 31 | 32 | override fun extractFrontResult(frontResult: BelgiumIdFrontRecognizer.Result): String? { 33 | add(DOCUMENT_NUMBER, frontResult.cardNumber) 34 | return null 35 | } 36 | 37 | override fun extractBackResult(backResult: BelgiumIdBackRecognizer.Result): String? { 38 | extract(backResult.mrzResult) 39 | return backResult.mrzResult.buildTitle() 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/BruneiIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.extract 7 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 8 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiIdBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiIdFrontRecognizer 10 | 11 | class BruneiIdRecognition: TwoSideRecognition() { 12 | 13 | override val frontRecognizer by lazy { BruneiIdFrontRecognizer() } 14 | override val backRecognizer by lazy { BruneiIdBackRecognizer() } 15 | 16 | override fun extractFields() { 17 | if (frontResult.isNotEmpty()) { 18 | extractFront(frontResult) 19 | } 20 | if (backResult.isNotEmpty()) { 21 | extractBack(backResult) 22 | } 23 | } 24 | 25 | private fun extractFront(result: BruneiIdFrontRecognizer.Result) { 26 | add(FULL_NAME, result.fullName) 27 | add(DOCUMENT_NUMBER, result.documentNumber) 28 | add(DATE_OF_BIRTH, result.dateOfBirth) 29 | add(PLACE_OF_BIRTH, result.placeOfBirth) 30 | add(SEX, result.sex) 31 | } 32 | 33 | private fun extractBack(result: BruneiIdBackRecognizer.Result) { 34 | extract(result.mrzResult) 35 | add(DATE_OF_ISSUE, result.dateOfIssue) 36 | add(ADDRESS, result.address) 37 | add(RACE, result.race) 38 | } 39 | 40 | override fun getResultTitle(): String? { 41 | if (backResult.isNotEmpty()) { 42 | return backResult.mrzResult.buildTitle() 43 | } 44 | if (frontResult.isNotEmpty()) { 45 | return frontResult.fullName 46 | } 47 | return null 48 | } 49 | 50 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/BruneiMilitaryIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 6 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiMilitaryIdBackRecognizer 7 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiMilitaryIdFrontRecognizer 8 | 9 | class BruneiMilitaryIdRecognition: TwoSideRecognition() { 10 | 11 | override val frontRecognizer by lazy { BruneiMilitaryIdFrontRecognizer() } 12 | override val backRecognizer by lazy { BruneiMilitaryIdBackRecognizer() } 13 | 14 | override fun extractFields() { 15 | if (frontResult.isNotEmpty()) { 16 | extractFront(frontResult) 17 | } 18 | if (backResult.isNotEmpty()) { 19 | extractBack(backResult) 20 | } 21 | } 22 | 23 | private fun extractFront(result: BruneiMilitaryIdFrontRecognizer.Result) { 24 | add(FULL_NAME, result.fullName) 25 | add(DATE_OF_BIRTH, result.dateOfBirth) 26 | add(RANK, result.rank) 27 | } 28 | 29 | private fun extractBack(result: BruneiMilitaryIdBackRecognizer.Result) { 30 | add(ARMY_NUMBER, result.armyNumber) 31 | add(DATE_OF_ISSUE, result.dateOfIssue) 32 | addDateOfExpiry(result.dateOfExpiry.date) 33 | } 34 | 35 | override fun getResultTitle(): String? { 36 | if (frontResult.isNotEmpty()) { 37 | return frontResult.fullName 38 | } 39 | return null 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/BruneiResidencePermitRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.extract 7 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiResidencePermitBackRecognizer 8 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiResidencePermitFrontRecognizer 9 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 10 | 11 | 12 | class BruneiResidencePermitRecognition : 13 | TwoSideRecognition() { 14 | 15 | override val frontRecognizer by lazy { BruneiResidencePermitFrontRecognizer() } 16 | override val backRecognizer by lazy { BruneiResidencePermitBackRecognizer() } 17 | 18 | override fun extractFields() { 19 | if (frontResult.isNotEmpty()) { 20 | extractFront(frontResult) 21 | } 22 | if (backResult.isNotEmpty()) { 23 | extractBack(backResult) 24 | } 25 | } 26 | 27 | private fun extractFront(result: BruneiResidencePermitFrontRecognizer.Result) { 28 | add(FULL_NAME, result.fullName) 29 | add(DOCUMENT_NUMBER, result.documentNumber) 30 | add(DATE_OF_BIRTH, result.dateOfBirth) 31 | add(PLACE_OF_BIRTH, result.placeOfBirth) 32 | add(SEX, result.sex) 33 | } 34 | 35 | private fun extractBack(result: BruneiResidencePermitBackRecognizer.Result) { 36 | extract(result.mrzResult) 37 | add(DATE_OF_ISSUE, result.dateOfIssue) 38 | add(ADDRESS, result.address) 39 | add(RACE, result.race) 40 | } 41 | 42 | override fun getResultTitle(): String? { 43 | if (backResult.isNotEmpty()) { 44 | return backResult.mrzResult.buildTitle() 45 | } 46 | if (frontResult.isNotEmpty()) { 47 | return frontResult.fullName 48 | } 49 | return null 50 | } 51 | 52 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/BruneiTemporaryResidencePermitRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.extract 7 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 8 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiTemporaryResidencePermitBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.brunei.BruneiTemporaryResidencePermitFrontRecognizer 10 | 11 | class BruneiTemporaryResidencePermitRecognition : 12 | TwoSideRecognition() { 13 | 14 | override val frontRecognizer by lazy { BruneiTemporaryResidencePermitFrontRecognizer() } 15 | override val backRecognizer by lazy { BruneiTemporaryResidencePermitBackRecognizer() } 16 | 17 | override fun extractFields() { 18 | if (frontResult.isNotEmpty()) { 19 | extractFront(frontResult) 20 | } 21 | if (backResult.isNotEmpty()) { 22 | extractBack(backResult) 23 | } 24 | } 25 | 26 | private fun extractFront(result: BruneiTemporaryResidencePermitFrontRecognizer.Result) { 27 | add(FULL_NAME, result.fullName) 28 | add(DOCUMENT_NUMBER, result.documentNumber) 29 | add(DATE_OF_BIRTH, result.dateOfBirth) 30 | add(PLACE_OF_BIRTH, result.placeOfBirth) 31 | add(SEX, result.sex) 32 | add(ADDRESS, result.address) 33 | } 34 | 35 | private fun extractBack(result: BruneiTemporaryResidencePermitBackRecognizer.Result) { 36 | extract(result.mrzResult) 37 | add(DATE_OF_ISSUE, result.dateOfIssue) 38 | add(PASSPORT_NUMBER, result.passportNumber) 39 | add(EMPLOYER_ADDRESS, result.address) 40 | } 41 | 42 | override fun getResultTitle(): String? { 43 | if (backResult.isNotEmpty()) { 44 | return backResult.mrzResult.buildTitle() 45 | } 46 | if (frontResult.isNotEmpty()) { 47 | return frontResult.fullName 48 | } 49 | return null 50 | } 51 | 52 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/ColombiaDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.entities.recognizers.blinkid.colombia.ColombiaDlFrontRecognizer 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 6 | 7 | class ColombiaDlRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { ColombiaDlFrontRecognizer() } 10 | 11 | override fun extractData(result: ColombiaDlFrontRecognizer.Result): String? { 12 | result.apply { 13 | add(LICENCE_NUMBER, licenceNumber) 14 | add(FULL_NAME, name) 15 | add(DATE_OF_BIRTH, dateOfBirth) 16 | add(DATE_OF_ISSUE, dateOfIssue) 17 | add(DRIVER_RESTRICTIONS, driverRestrictions) 18 | add(ISSUING_AGENCY, issuingAgency) 19 | } 20 | 21 | return result.name 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/ColombiaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.ResultValidator 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.colombia.ColombiaIdBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.colombia.ColombiaIdFrontRecognizer 10 | 11 | class ColombiaIdRecognition 12 | : TwoSideRecognition() { 13 | 14 | override val frontRecognizer by lazy { ColombiaIdFrontRecognizer() } 15 | override val backRecognizer by lazy { ColombiaIdBackRecognizer() } 16 | 17 | override fun createValidator(): ResultValidator { 18 | val frontDocNumberWithoutDots = frontResult.documentNumber.replace(".", "") 19 | return ResultValidator().match(frontDocNumberWithoutDots, backResult.documentNumber) 20 | } 21 | 22 | override fun extractFields() { 23 | if (frontResult.isNotEmpty()) { 24 | extractFront(frontResult) 25 | } 26 | 27 | if (backResult.isNotEmpty()) { 28 | extractBack(backResult) 29 | } 30 | } 31 | 32 | override fun getResultTitle(): String? { 33 | if (frontResult.isNotEmpty()) { 34 | return FormattingUtils.formatResultTitle(frontResult.firstName, frontResult.lastName) 35 | } else if (backResult.isNotEmpty()) { 36 | return FormattingUtils.formatResultTitle(backResult.firstName, backResult.lastName) 37 | } 38 | 39 | return null 40 | } 41 | 42 | private fun extractFront(result: ColombiaIdFrontRecognizer.Result) { 43 | add(FIRST_NAME, result.firstName) 44 | add(LAST_NAME, result.lastName) 45 | add(DOCUMENT_NUMBER, result.documentNumber) 46 | } 47 | 48 | private fun extractBack(result: ColombiaIdBackRecognizer.Result) { 49 | add(FIRST_NAME, result.firstName) 50 | add(LAST_NAME, result.lastName) 51 | add(DOCUMENT_NUMBER, result.documentNumber) 52 | add(SEX, result.sex) 53 | add(DATE_OF_BIRTH, result.birthDate) 54 | } 55 | 56 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/CroatiaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.CombinedRecognition 6 | import com.microblink.documentscanflow.recognition.extract 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.croatia.CroatiaCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.croatia.CroatiaIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.croatia.CroatiaIdFrontRecognizer 11 | 12 | class CroatiaIdRecognition 13 | : CombinedRecognition() { 14 | 15 | override val frontRecognizer by lazy { CroatiaIdFrontRecognizer() } 16 | override val backRecognizer by lazy { CroatiaIdBackRecognizer() } 17 | override val combinedRecognizer by lazy { CroatiaCombinedRecognizer() } 18 | 19 | override fun extractCombinedResult(combinedResult: CroatiaCombinedRecognizer.Result): String? { 20 | add(LAST_NAME, combinedResult.lastName) 21 | add(FIRST_NAME, combinedResult.firstName) 22 | add(PERSONAL_NUMBER, combinedResult.oib) 23 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 24 | add(SEX, combinedResult.sex) 25 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 26 | add(ADDRESS, combinedResult.residence) 27 | add(CITIZENSHIP, combinedResult.citizenship) 28 | add(ISSUING_AUTHORITY, combinedResult.issuedBy) 29 | add(DATE_OF_ISSUE, combinedResult.dateOfIssue) 30 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 31 | 32 | return FormattingUtils.formatResultTitle(combinedResult.firstName, combinedResult.lastName) 33 | } 34 | 35 | override fun extractFrontResult(frontResult: CroatiaIdFrontRecognizer.Result): String? { 36 | add(LAST_NAME, frontResult.lastName) 37 | add(FIRST_NAME, frontResult.firstName) 38 | add(DOCUMENT_NUMBER, frontResult.documentNumber) 39 | add(SEX, frontResult.sex) 40 | add(CITIZENSHIP, frontResult.citizenship) 41 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 42 | addDateOfExpiry(frontResult.dateOfExpiry.date) 43 | 44 | return FormattingUtils.formatResultTitle(frontResult.firstName, frontResult.lastName) 45 | } 46 | 47 | override fun extractBackResult(backResult: CroatiaIdBackRecognizer.Result): String? { 48 | add(ADDRESS, backResult.residence) 49 | add(ISSUING_AUTHORITY, backResult.issuedBy) 50 | add(DATE_OF_ISSUE, backResult.dateOfIssue) 51 | extract(backResult.mrzResult) 52 | 53 | return backResult.mrzResult.buildTitle() 54 | } 55 | 56 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/CyprusIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.extract 7 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.IDENTITY_NUMBER 8 | import com.microblink.entities.recognizers.blinkid.cyprus.CyprusIdBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.cyprus.CyprusIdFrontRecognizer 10 | 11 | class CyprusIdRecognition : TwoSideRecognition() { 12 | 13 | override val frontRecognizer by lazy { CyprusIdFrontRecognizer() } 14 | override val backRecognizer by lazy { CyprusIdBackRecognizer() } 15 | 16 | override fun extractFields() { 17 | if (frontResult.isNotEmpty()) { 18 | extractFront(frontResult) 19 | } 20 | 21 | if (backResult.isNotEmpty()) { 22 | extractBack(backResult) 23 | } 24 | } 25 | 26 | override fun getResultTitle(): String? { 27 | if (backResult.isNotEmpty()) { 28 | return backResult.mrzResult.buildTitle() 29 | } 30 | return null 31 | } 32 | 33 | private fun extractFront(result: CyprusIdFrontRecognizer.Result) { 34 | add(IDENTITY_NUMBER, result.idNumber) 35 | } 36 | 37 | private fun extractBack(result: CyprusIdBackRecognizer.Result) { 38 | extract(result.mrzResult) 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/CyprusOldIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 6 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 7 | import com.microblink.entities.recognizers.blinkid.cyprus.CyprusOldIdBackRecognizer 8 | import com.microblink.entities.recognizers.blinkid.cyprus.CyprusOldIdFrontRecognizer 9 | 10 | class CyprusOldIdRecognition : TwoSideRecognition() { 11 | 12 | override val frontRecognizer by lazy { CyprusOldIdFrontRecognizer() } 13 | override val backRecognizer by lazy { CyprusOldIdBackRecognizer() } 14 | 15 | override fun extractFields() { 16 | if (frontResult.isNotEmpty()) { 17 | extractFront(frontResult) 18 | } 19 | 20 | if (backResult.isNotEmpty()) { 21 | extractBack(backResult) 22 | } 23 | } 24 | 25 | override fun getResultTitle(): String? { 26 | if (frontResult.isNotEmpty()) { 27 | return FormattingUtils.formatResultTitle(frontResult.name, frontResult.surname) 28 | } 29 | return null 30 | } 31 | 32 | private fun extractFront(result: CyprusOldIdFrontRecognizer.Result) { 33 | add(IDENTITY_NUMBER, result.idNumber) 34 | add(DOCUMENT_NUMBER, result.documentNumber) 35 | add(FIRST_NAME, result.name) 36 | add(LAST_NAME, result.surname) 37 | } 38 | 39 | private fun extractBack(result: CyprusOldIdBackRecognizer.Result) { 40 | add(DATE_OF_BIRTH, result.dateOfBirth) 41 | add(SEX, result.sex) 42 | addDateOfExpiry(result.expiresOn.date) 43 | } 44 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/CzechIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 7 | import com.microblink.entities.recognizers.blinkid.czechia.CzechiaCombinedRecognizer 8 | import com.microblink.entities.recognizers.blinkid.czechia.CzechiaIdBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.czechia.CzechiaIdFrontRecognizer 10 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 11 | 12 | class CzechIdRecognition : CombinedRecognition() { 13 | 14 | override val frontRecognizer by lazy { CzechiaIdFrontRecognizer() } 15 | override val backRecognizer by lazy { CzechiaIdBackRecognizer() } 16 | override val combinedRecognizer by lazy { CzechiaCombinedRecognizer() } 17 | 18 | override fun extractCombinedResult(combinedResult: CzechiaCombinedRecognizer.Result): String? { 19 | add(LAST_NAME, combinedResult.surname) 20 | add(FIRST_NAME, combinedResult.givenNames) 21 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 22 | add(SEX, combinedResult.sex) 23 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 24 | add(PLACE_OF_BIRTH, combinedResult.placeOfBirth) 25 | add(ADDRESS, combinedResult.permanentStay) 26 | add(PERSONAL_NUMBER, combinedResult.personalNumber) 27 | add(AUTHORITY, combinedResult.authority) 28 | add(NATIONALITY, combinedResult.nationality) 29 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 30 | add(DATE_OF_ISSUE, combinedResult.dateOfIssue) 31 | return FormattingUtils.formatResultTitle(combinedResult.givenNames, combinedResult.surname) 32 | } 33 | 34 | override fun extractFrontResult(frontResult: CzechiaIdFrontRecognizer.Result): String? { 35 | add(LAST_NAME, frontResult.surname) 36 | add(FIRST_NAME, frontResult.givenNames) 37 | add(DOCUMENT_NUMBER, frontResult.documentNumber) 38 | add(SEX, frontResult.sex) 39 | add(PLACE_OF_BIRTH, frontResult.placeOfBirth) 40 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 41 | add(DATE_OF_ISSUE, frontResult.dateOfIssue) 42 | addDateOfExpiry(frontResult.dateOfExpiry.date) 43 | return FormattingUtils.formatResultTitle(frontResult.givenNames, frontResult.surname) 44 | } 45 | 46 | override fun extractBackResult(backResult: CzechiaIdBackRecognizer.Result): String? { 47 | extract(backResult.mrzResult) 48 | add(ADDRESS, backResult.permanentStay) 49 | add(PERSONAL_NUMBER, backResult.personalNumber) 50 | add(ISSUING_AUTHORITY, backResult.authority) 51 | return backResult.mrzResult.buildTitle() 52 | } 53 | 54 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/EgyptIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.DOCUMENT_NUMBER 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.NATIONAL_NUMBER 6 | import com.microblink.entities.recognizers.blinkid.egypt.EgyptIdFrontRecognizer 7 | 8 | class EgyptIdRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { EgyptIdFrontRecognizer() } 11 | 12 | override fun extractData(result: EgyptIdFrontRecognizer.Result): String? { 13 | add(DOCUMENT_NUMBER, result.documentNumber) 14 | add(NATIONAL_NUMBER, result.nationalNumber) 15 | return null 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/EudlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.eudl.EudlCountry 7 | import com.microblink.entities.recognizers.blinkid.eudl.EudlRecognizer 8 | 9 | class EudlRecognition(eudlCountry: EudlCountry) : SingleSideWithId1CardDetectorRecognition() { 10 | 11 | override val recognizer by lazy { EudlRecognizer(eudlCountry) } 12 | 13 | override fun extractData(result: EudlRecognizer.Result): String? { 14 | val firstName = result.firstName 15 | val lastName = result.lastName 16 | 17 | add(FIRST_NAME, firstName) 18 | add(LAST_NAME, lastName) 19 | add(ADDRESS, result.address) 20 | add(BIRTH_DATA, result.birthData) 21 | add(DATE_OF_ISSUE, result.issueDate.date) 22 | addDateOfExpiry(result.expiryDate.date) 23 | add(DRIVER_NUMBER, result.driverNumber) 24 | add(ISSUING_AUTHORITY, result.issuingAuthority) 25 | 26 | return FormattingUtils.formatResultTitle(firstName, lastName) 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/GermanyDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 7 | import com.microblink.entities.recognizers.blinkid.germany.GermanyDlBackRecognizer 8 | import com.microblink.entities.recognizers.blinkid.germany.GermanyDlFrontRecognizer 9 | 10 | class GermanyDlRecognition : TwoSideRecognition() { 11 | 12 | override val frontRecognizer by lazy { GermanyDlFrontRecognizer() } 13 | override val backRecognizer by lazy { GermanyDlBackRecognizer() } 14 | 15 | override fun extractFields() { 16 | if (frontResult.isNotEmpty()) { 17 | val firstName = frontResult.firstName 18 | val lastName = frontResult.lastName 19 | 20 | add(FIRST_NAME, firstName) 21 | add(LAST_NAME, lastName) 22 | add(LICENCE_NUMBER, frontResult.licenceNumber) 23 | add(LICENCE_CATEGORIES, frontResult.licenceCategories) 24 | add(PLACE_OF_BIRTH, frontResult.placeOfBirth) 25 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 26 | add(DATE_OF_ISSUE, frontResult.dateOfIssue) 27 | add(ISSUING_AUTHORITY, frontResult.issuingAuthority) 28 | addDateOfExpiry(frontResult.dateOfExpiry.date) 29 | } 30 | if (backResult.isNotEmpty()) { 31 | add(DATE_OF_ISSUE_FOR_B_CATEGORY, backResult.dateOfIssueB10) 32 | } 33 | } 34 | 35 | override fun getResultTitle(): String? { 36 | return if (frontResult.isNotEmpty()) FormattingUtils.formatResultTitle(frontResult.firstName, frontResult.lastName) 37 | else null 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/GermanyIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.germany.GermanyCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.germany.GermanyIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.germany.GermanyIdFrontRecognizer 11 | 12 | class GermanyIdRecognition : CombinedRecognition() { 13 | 14 | override val frontRecognizer by lazy { GermanyIdFrontRecognizer() } 15 | override val backRecognizer by lazy { GermanyIdBackRecognizer() } 16 | override val combinedRecognizer by lazy { GermanyCombinedRecognizer() } 17 | 18 | override fun extractCombinedResult(combinedResult: GermanyCombinedRecognizer.Result): String? { 19 | add(LAST_NAME, combinedResult.surname) 20 | add(FIRST_NAME, combinedResult.givenNames) 21 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 22 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 23 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 24 | add(NATIONALITY, combinedResult.nationality) 25 | add(PLACE_OF_BIRTH, combinedResult.placeOfBirth) 26 | add(EYE_COLOR, combinedResult.colourOfEyes) 27 | add(HEIGHT, combinedResult.height) 28 | add(ADDRESS, combinedResult.address) 29 | add(AUTHORITY, combinedResult.authority) 30 | add(DATE_OF_ISSUE, combinedResult.dateOfIssue) 31 | return FormattingUtils.formatResultTitle(combinedResult.givenNames, combinedResult.surname) 32 | } 33 | 34 | override fun extractFrontResult(frontResult: GermanyIdFrontRecognizer.Result): String? { 35 | add(LAST_NAME, frontResult.surname) 36 | add(FIRST_NAME, frontResult.givenNames) 37 | add(NATIONALITY, frontResult.nationality) 38 | add(PLACE_OF_BIRTH, frontResult.placeOfBirth) 39 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 40 | add(DOCUMENT_NUMBER, frontResult.documentNumber) 41 | addDateOfExpiry(frontResult.dateOfExpiry.date) 42 | return FormattingUtils.formatResultTitle(frontResult.givenNames, frontResult.surname) 43 | } 44 | 45 | override fun extractBackResult(backResult: GermanyIdBackRecognizer.Result): String? { 46 | extract(backResult.mrzResult) 47 | add(AUTHORITY, backResult.authority) 48 | add(DATE_OF_ISSUE, backResult.dateOfIssue) 49 | add(ADDRESS, backResult.fullAddress) 50 | return backResult.mrzResult.buildTitle() 51 | } 52 | 53 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/GermanyOldIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.buildId2VerticalCardDetectorRecognizer 7 | import com.microblink.documentscanflow.recognition.extract 8 | import com.microblink.entities.recognizers.blinkid.germany.GermanyIdOldRecognizer 9 | import com.microblink.entities.recognizers.detector.DetectorRecognizer 10 | 11 | class GermanyOldIdRecognition : TwoSideRecognition() { 12 | 13 | override val frontRecognizer by lazy { GermanyIdOldRecognizer() } 14 | override val backRecognizer by lazy { 15 | buildId2VerticalCardDetectorRecognizer() 16 | } 17 | 18 | override fun extractFields() { 19 | if (frontResult.isNotEmpty()) extract(frontResult.mrzResult) 20 | } 21 | 22 | override fun getResultTitle(): String? { 23 | return if (frontResult.isNotEmpty()) frontResult.mrzResult.buildTitle() 24 | else null 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/HongKongIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.entities.recognizers.blinkid.hongkong.HongKongIdFrontRecognizer 6 | 7 | class HongKongIdRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { HongKongIdFrontRecognizer() } 10 | 11 | override fun extractData(result: HongKongIdFrontRecognizer.Result): String? { 12 | val fullName = result.fullName 13 | 14 | add(FULL_NAME, fullName) 15 | add(DOCUMENT_NUMBER, result.documentNumber) 16 | add(SEX, result.sex) 17 | add(DATE_OF_BIRTH, result.dateOfBirth) 18 | add(DATE_OF_ISSUE, result.dateOfIssue) 19 | add(RESIDENTIAL_STATUS, result.residentialStatus) 20 | 21 | return fullName 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/IndonesiaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.entities.recognizers.blinkid.indonesia.IndonesiaIdFrontRecognizer 6 | 7 | class IndonesiaIdRecognition : SingleSideRecognition() { 8 | 9 | override val recognizer by lazy { IndonesiaIdFrontRecognizer() } 10 | 11 | override fun extractData(result: IndonesiaIdFrontRecognizer.Result): String? { 12 | add(PROVINCE, result.province) 13 | add(CITY, result.city) 14 | add(DOCUMENT_NUMBER, result.documentNumber) 15 | add(FULL_NAME, result.name) 16 | add(PLACE_OF_BIRTH, result.placeOfBirth) 17 | add(DATE_OF_BIRTH, result.dateOfBirth) 18 | add(SEX, result.sex) 19 | add(ADDRESS, result.address) 20 | add(RELIGION, result.religion) 21 | add(MARITAL_STATUS, result.maritalStatus) 22 | add(OCCUPATION, result.occupation) 23 | add(CITIZENSHIP, result.citizenship) 24 | addDateOfExpiry(result.dateOfExpiry.date) 25 | add(DATE_OF_EXPIRY_PERMANENT, result.isDateOfExpiryPermanent) 26 | 27 | return result.name 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/IrelandDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.ireland.IrelandDlFrontRecognizer 7 | 8 | class IrelandDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { IrelandDlFrontRecognizer() } 11 | 12 | override fun extractData(result: IrelandDlFrontRecognizer.Result): String? { 13 | result.apply { 14 | add(LAST_NAME, surname) 15 | add(FIRST_NAME, firstName) 16 | add(DATE_OF_BIRTH, dateOfBirth) 17 | add(PLACE_OF_BIRTH, placeOfBirth) 18 | add(DATE_OF_ISSUE, dateOfIssue) 19 | add(ISSUER, issuedBy) 20 | addDateOfExpiry(dateOfExpiry.date) 21 | add(LICENCE_NUMBER, licenceNumber) 22 | add(ADDRESS, address) 23 | add(LICENCE_CATEGORIES, licenceCategories) 24 | } 25 | 26 | return FormattingUtils.formatResultTitle(result.firstName, result.surname) 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/ItalyDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.italy.ItalyDlFrontRecognizer 7 | 8 | class ItalyDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { ItalyDlFrontRecognizer() } 11 | 12 | override fun extractData(result: ItalyDlFrontRecognizer.Result): String? { 13 | result.apply { 14 | add(LAST_NAME, surname) 15 | add(FIRST_NAME, givenName) 16 | add(DATE_OF_BIRTH, dateOfBirth) 17 | add(PLACE_OF_BIRTH, placeOfBirth) 18 | add(DATE_OF_ISSUE, dateOfIssue) 19 | add(ISSUING_AUTHORITY, issuingAuthority) 20 | addDateOfExpiry(dateOfExpiry.date) 21 | add(LICENCE_NUMBER, licenceNumber) 22 | add(LICENCE_CATEGORIES, licenceCategories) 23 | add(ADDRESS, address) 24 | } 25 | 26 | return FormattingUtils.formatResultTitle(result.givenName, result.surname) 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/JordanIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.CombinedRecognition 4 | import com.microblink.documentscanflow.recognition.extract 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 6 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 7 | import com.microblink.documentscanflow.sanitizeMRZString 8 | import com.microblink.entities.recognizers.blinkid.jordan.JordanCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.jordan.JordanIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.jordan.JordanIdFrontRecognizer 11 | 12 | class JordanIdRecognition : 13 | CombinedRecognition() { 14 | 15 | override val frontRecognizer by lazy { JordanIdFrontRecognizer() } 16 | override val backRecognizer by lazy { JordanIdBackRecognizer() } 17 | override val combinedRecognizer by lazy { JordanCombinedRecognizer() } 18 | 19 | override fun extractCombinedResult(combinedResult: JordanCombinedRecognizer.Result): String? { 20 | add(FULL_NAME, combinedResult.name) 21 | add(NATIONAL_NUMBER, combinedResult.nationalNumber) 22 | add(SEX, combinedResult.sex) 23 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 24 | add(NATIONALITY, combinedResult.nationality) 25 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 26 | add(ISSUER, combinedResult.issuedBy) 27 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 28 | return combinedResult.name 29 | } 30 | 31 | override fun extractFrontResult(frontResult: JordanIdFrontRecognizer.Result): String? { 32 | add(FULL_NAME, frontResult.name) 33 | add(NATIONAL_NUMBER, frontResult.nationalNumber) 34 | add(SEX, frontResult.sex) 35 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 36 | return frontResult.name 37 | } 38 | 39 | override fun extractBackResult(backResult: JordanIdBackRecognizer.Result): String? { 40 | add(NATIONALITY, backResult.mrzResult.nationality) 41 | add(DOCUMENT_NUMBER, backResult.mrzResult.documentNumber.sanitizeMRZString()) 42 | add(ISSUER, backResult.mrzResult.issuer) 43 | addDateOfExpiry(backResult.mrzResult.dateOfExpiry.date) 44 | extract(backResult.mrzResult) 45 | return FormattingUtils.formatResultTitle(backResult.mrzResult.primaryId, backResult.mrzResult.secondaryId) 46 | } 47 | 48 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/KuwaitIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.extract 7 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 8 | import com.microblink.entities.recognizers.blinkid.kuwait.KuwaitIdBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.kuwait.KuwaitIdFrontRecognizer 10 | 11 | class KuwaitIdRecognition : TwoSideRecognition() { 12 | 13 | override val frontRecognizer by lazy { KuwaitIdFrontRecognizer() } 14 | override val backRecognizer by lazy { KuwaitIdBackRecognizer() } 15 | 16 | override fun setupRecognizers() { 17 | backRecognizer.setExtractSerialNo(true) 18 | } 19 | 20 | override fun extractFields() { 21 | if (frontResult.isNotEmpty()) { 22 | extractFrontSide() 23 | } 24 | if (backResult.isNotEmpty()) { 25 | extractBackSide() 26 | } 27 | } 28 | 29 | override fun getResultTitle(): String? { 30 | if (frontResult.isNotEmpty()) { 31 | return frontResult.name 32 | } else if (backResult.isNotEmpty()) { 33 | return backResult.mrzResult.buildTitle() 34 | } 35 | 36 | return null 37 | } 38 | 39 | private fun extractBackSide() { 40 | extract(backResult.mrzResult) 41 | add(SERIAL_NUMBER, backResult.serialNo) 42 | } 43 | 44 | private fun extractFrontSide() { 45 | add(CIVIL_ID_NUMBER, frontResult.civilIdNumber) 46 | add(FULL_NAME, frontResult.name) 47 | add(NATIONALITY, frontResult.nationality) 48 | add(SEX, frontResult.sex) 49 | add(DATE_OF_BIRTH, frontResult.birthDate) 50 | addDateOfExpiry(frontResult.expiryDate.date) 51 | } 52 | 53 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MalaysiaDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaDlFrontRecognizer 6 | 7 | class MalaysiaDlRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { MalaysiaDlFrontRecognizer() } 10 | 11 | override fun extractData(result: MalaysiaDlFrontRecognizer.Result): String? { 12 | add(FULL_NAME, result.name) 13 | add(IDENTITY_NUMBER, result.identityNumber) 14 | add(NATIONALITY, result.nationality) 15 | add(CLASS, result.dlClass) 16 | add(DATE_OF_ISSUE, result.validFrom) 17 | addDateOfExpiry(result.validUntil.date) 18 | add(ADDRESS, result.fullAddress) 19 | 20 | return result.name 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MalaysiaIkadRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaIkadFrontRecognizer 6 | 7 | class MalaysiaIkadRecognition : SingleSideRecognition() { 8 | 9 | override val recognizer by lazy { MalaysiaIkadFrontRecognizer() } 10 | 11 | override fun extractData(result: MalaysiaIkadFrontRecognizer.Result): String? { 12 | add(FULL_NAME, result.name) 13 | add(ADDRESS, result.address) 14 | add(FACULTY_ADDRESS, result.facultyAddress) 15 | add(DATE_OF_BIRTH, result.dateOfBirth) 16 | add(EMPLOYER, result.employer) 17 | addDateOfExpiry(result.dateOfExpiry.date) 18 | add(NATIONALITY, result.nationality) 19 | add(SECTOR, result.sector) 20 | add(SEX, result.gender) 21 | 22 | return result.name 23 | } 24 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MalaysiaKasRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 6 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaMyKadBackRecognizer 7 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaMyKasFrontRecognizer 8 | 9 | class MalaysiaKasRecognition: TwoSideRecognition() { 10 | 11 | override val frontRecognizer by lazy { MalaysiaMyKasFrontRecognizer() } 12 | override val backRecognizer by lazy { MalaysiaMyKadBackRecognizer() } 13 | 14 | override fun extractFields() { 15 | if (frontResult.isNotEmpty()) { 16 | extractFrontSide() 17 | } 18 | if (backResult.isNotEmpty()) { 19 | extractBackSide() 20 | } 21 | } 22 | 23 | private fun extractFrontSide() { 24 | add(FULL_NAME, frontResult.fullName) 25 | add(NRIC_NUMBER, frontResult.nric) 26 | add(DATE_OF_BIRTH, frontResult.birthDate) 27 | add(ADDRESS, frontResult.fullAddress) 28 | add(SEX, frontResult.sex) 29 | add(RELIGION, frontResult.religion) 30 | } 31 | 32 | private fun extractBackSide() { 33 | add(NRIC_NUMBER, backResult.nric) 34 | add(DATE_OF_BIRTH, backResult.dateOfBirth) 35 | } 36 | 37 | override fun getResultTitle(): String? { 38 | if (frontResult.isNotEmpty()) { 39 | return frontResult.fullName 40 | } else if (backResult.isNotEmpty()) { 41 | return backResult.nric 42 | } 43 | return null 44 | } 45 | 46 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MalaysiaMyKadRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.ResultValidator 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaMyKadBackRecognizer 8 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaMyKadFrontRecognizer 9 | 10 | class MalaysiaMyKadRecognition 11 | : TwoSideRecognition() { 12 | 13 | override val frontRecognizer by lazy { MalaysiaMyKadFrontRecognizer() } 14 | override val backRecognizer by lazy { MalaysiaMyKadBackRecognizer() } 15 | 16 | override fun createValidator(): ResultValidator { 17 | return ResultValidator() 18 | .match(frontResult.nric, backResult.nric) 19 | .match(frontResult.birthDate.date, backResult.dateOfBirth.date) 20 | } 21 | 22 | override fun extractFields() { 23 | if (frontResult.isNotEmpty()) { 24 | extractFrontSide() 25 | } 26 | if (backResult.isNotEmpty()) { 27 | extractBackSide() 28 | } 29 | } 30 | 31 | override fun getResultTitle(): String? { 32 | return when { 33 | frontResult.isNotEmpty() -> frontResult.fullName 34 | backResult.isNotEmpty() -> backResult.nric 35 | else -> null 36 | } 37 | } 38 | 39 | private fun extractFrontSide() { 40 | add(FULL_NAME, frontResult.fullName) 41 | add(NRIC_NUMBER, frontResult.nric) 42 | add(DATE_OF_BIRTH, frontResult.birthDate) 43 | add(ADDRESS, frontResult.fullAddress) 44 | add(SEX, frontResult.sex) 45 | add(RELIGION, frontResult.religion) 46 | } 47 | 48 | private fun extractBackSide() { 49 | add(NRIC_NUMBER, backResult.nric) 50 | add(DATE_OF_BIRTH, backResult.dateOfBirth) 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MalaysiaPrRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaMyPrFrontRecognizer 6 | 7 | class MalaysiaPrRecognition: SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { MalaysiaMyPrFrontRecognizer() } 10 | 11 | override fun extractData(result: MalaysiaMyPrFrontRecognizer.Result): String? { 12 | add(FULL_NAME, result.fullName) 13 | add(DATE_OF_BIRTH, result.birthDate) 14 | add(SEX, result.sex) 15 | add(RELIGION, result.religion) 16 | add(NRIC_NUMBER, result.nric) 17 | add(ADDRESS, result.fullAddress) 18 | return result.fullName 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MalaysiaTenteraRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.entities.recognizers.blinkid.malaysia.MalaysiaMyTenteraFrontRecognizer 6 | 7 | class MalaysiaTenteraRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { MalaysiaMyTenteraFrontRecognizer() } 10 | 11 | override fun extractData(result: MalaysiaMyTenteraFrontRecognizer.Result): String? { 12 | add(FULL_NAME, result.fullName) 13 | add(ARMY_NUMBER, result.armyNumber) 14 | add(ADDRESS, result.fullAddress) 15 | add(DATE_OF_BIRTH, result.birthDate) 16 | add(SEX, result.sex) 17 | add(RELIGION, result.religion) 18 | add(NRIC_NUMBER, result.nric) 19 | 20 | return result.fullName 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MexicoIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.entities.recognizers.blinkid.mexico.MexicoVoterIdFrontRecognizer 6 | 7 | class MexicoIdRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { MexicoVoterIdFrontRecognizer() } 10 | 11 | override fun extractData(result: MexicoVoterIdFrontRecognizer.Result): String? { 12 | add(FULL_NAME, result.fullName) 13 | add(ADDRESS, result.address) 14 | add(CURP, result.curp) 15 | add(DATE_OF_BIRTH, result.dateOfBirth) 16 | add(SEX, result.sex) 17 | 18 | return result.fullName 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/MoroccoIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.ResultValidator 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.morocco.MoroccoIdBackRecognizer 9 | import com.microblink.entities.recognizers.blinkid.morocco.MoroccoIdFrontRecognizer 10 | 11 | class MoroccoIdRecognition : TwoSideRecognition() { 12 | 13 | override val frontRecognizer by lazy { MoroccoIdFrontRecognizer() } 14 | override val backRecognizer by lazy { MoroccoIdBackRecognizer() } 15 | 16 | override fun createValidator() = ResultValidator() 17 | .match(frontResult.documentNumber, backResult.documentNumber) 18 | .match(frontResult.dateOfExpiry, backResult.dateOfExpiry) 19 | .match(frontResult.sex, backResult.sex) 20 | 21 | override fun extractFields() { 22 | if (frontResult.isNotEmpty()) { 23 | extractFrontSide() 24 | } 25 | if (backResult.isNotEmpty()) { 26 | extractBackSide() 27 | } 28 | } 29 | 30 | override fun getResultTitle() = 31 | when { 32 | frontResult.isNotEmpty() -> FormattingUtils.formatResultTitle(frontResult.name, frontResult.surname) 33 | else -> null 34 | } 35 | 36 | private fun extractFrontSide() { 37 | frontResult.apply { 38 | add(FIRST_NAME, name) 39 | add(LAST_NAME, surname) 40 | add(DOCUMENT_NUMBER, documentNumber) 41 | add(SEX, sex) 42 | add(DATE_OF_BIRTH, dateOfBirth) 43 | add(PLACE_OF_BIRTH, placeOfBirth) 44 | addDateOfExpiry(dateOfExpiry.date) 45 | } 46 | } 47 | 48 | private fun extractBackSide() { 49 | backResult.apply { 50 | add(DOCUMENT_NUMBER, documentNumber) 51 | addDateOfExpiry(dateOfExpiry.date) 52 | add(ADDRESS, address) 53 | add(CIVIL_STATUS_NUMBER, civilStatusNumber) 54 | add(SEX, sex) 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/NewZealandDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.newzealand.NewZealandDlFrontRecognizer 7 | 8 | class NewZealandDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { NewZealandDlFrontRecognizer() } 11 | 12 | override fun extractData(result: NewZealandDlFrontRecognizer.Result): String? { 13 | val firstName = result.firstNames 14 | val lastName = result.surname 15 | 16 | add(FIRST_NAME, firstName) 17 | add(LAST_NAME, lastName) 18 | add(DATE_OF_BIRTH, result.dateOfBirth) 19 | add(DOCUMENT_NUMBER, result.licenseNumber) 20 | add(DATE_OF_ISSUE, result.dateOfIssue) 21 | addDateOfExpiry(result.dateOfExpiry.date) 22 | add(ADDRESS, result.address) 23 | 24 | return FormattingUtils.formatResultTitle(firstName, lastName) 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/NigeriaDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | class NigeriaDlRecognition: UsdlRecognition() -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/NigeriaVoterIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isEmpty 4 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey 6 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 7 | import com.microblink.entities.recognizers.blinkid.documentface.DocumentFaceRecognizer 8 | import com.microblink.entities.recognizers.blinkid.nigeria.NigeriaVoterIdBackRecognizer 9 | 10 | class NigeriaVoterIdRecognition: TwoSideRecognition() { 11 | 12 | override val frontRecognizer by lazy { DocumentFaceRecognizer() } 13 | override val backRecognizer by lazy { NigeriaVoterIdBackRecognizer() } 14 | 15 | override fun extractFields() { 16 | if (backResult.isEmpty()) return 17 | add(ResultKey.FIRST_NAME, backResult.firstName) 18 | add(ResultKey.LAST_NAME, backResult.surname) 19 | add(ResultKey.ADDRESS, backResult.address) 20 | add(ResultKey.SEX, backResult.sex) 21 | add(ResultKey.BARCODE_DATA, backResult.rawBarcodeData) 22 | } 23 | 24 | override fun getResultTitle() = 25 | if (backResult.isEmpty()) null 26 | else FormattingUtils.formatResultTitle(backResult.firstName, backResult.surname) 27 | 28 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/PolandIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.poland.PolandCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.poland.PolandIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.poland.PolandIdFrontRecognizer 11 | 12 | class PolandIdRecognition: CombinedRecognition() { 13 | 14 | override val frontRecognizer by lazy { PolandIdFrontRecognizer() } 15 | override val backRecognizer by lazy { PolandIdBackRecognizer() } 16 | override val combinedRecognizer by lazy { PolandCombinedRecognizer() } 17 | 18 | override fun extractCombinedResult(combinedResult: PolandCombinedRecognizer.Result): String? { 19 | add(LAST_NAME, combinedResult.surname) 20 | add(FIRST_NAME, combinedResult.givenNames) 21 | add(FAMILY_NAME, combinedResult.familyName) 22 | add(PARENT_NAMES, combinedResult.parentsGivenNames) 23 | add(PERSONAL_NUMBER, combinedResult.personalNumber) 24 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 25 | add(SEX, combinedResult.sex) 26 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 27 | add(NATIONALITY, combinedResult.nationality) 28 | add(ISSUER, combinedResult.issuedBy) 29 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 30 | return FormattingUtils.formatResultTitle(combinedResult.givenNames, combinedResult.surname) 31 | } 32 | 33 | override fun extractFrontResult(frontResult: PolandIdFrontRecognizer.Result): String? { 34 | add(LAST_NAME, frontResult.surname) 35 | add(FIRST_NAME, frontResult.givenNames) 36 | add(SEX, frontResult.sex) 37 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 38 | return FormattingUtils.formatResultTitle(frontResult.givenNames, frontResult.surname) 39 | } 40 | 41 | override fun extractBackResult(backResult: PolandIdBackRecognizer.Result): String? { 42 | extract(backResult.mrzResult) 43 | return backResult.mrzResult.buildTitle() 44 | } 45 | 46 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/RomaniaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.SingleSideRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.entities.recognizers.blinkid.romania.RomaniaIdFrontRecognizer 7 | 8 | class RomaniaIdRecognition: SingleSideRecognition() { 9 | 10 | override val recognizer by lazy { RomaniaIdFrontRecognizer() } 11 | 12 | override fun setupRecognizers() { 13 | recognizer.apply { 14 | setExtractAddress(false) 15 | setExtractFirstName(false) 16 | setExtractSurname(false) 17 | setExtractIssuedBy(false) 18 | setExtractPlaceOfBirth(false) 19 | setExtractDateOfIssue(false) 20 | setExtractDateOfExpiry(false) 21 | setExtractSex(false) 22 | } 23 | } 24 | 25 | override fun extractData(result: RomaniaIdFrontRecognizer.Result): String? { 26 | extract(result.mrzResult) 27 | return result.mrzResult.buildTitle() 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SingaporeDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.entities.recognizers.blinkid.singapore.SingaporeDlFrontRecognizer 6 | 7 | class SingaporeDlRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { SingaporeDlFrontRecognizer() } 10 | 11 | override fun extractData(result: SingaporeDlFrontRecognizer.Result): String? { 12 | add(DOCUMENT_NUMBER, result.licenceNumber) 13 | add(FULL_NAME, result.name) 14 | add(DATE_OF_BIRTH, result.birthDate) 15 | add(DATE_OF_ISSUE, result.issueDate) 16 | addDateOfExpiry(result.validTill.date) 17 | 18 | return result.name 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SingaporeIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.CombinedRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.entities.recognizers.blinkid.singapore.SingaporeCombinedRecognizer 6 | import com.microblink.entities.recognizers.blinkid.singapore.SingaporeIdBackRecognizer 7 | import com.microblink.entities.recognizers.blinkid.singapore.SingaporeIdFrontRecognizer 8 | 9 | class SingaporeIdRecognition: CombinedRecognition() { 10 | 11 | override val frontRecognizer by lazy { SingaporeIdFrontRecognizer() } 12 | override val backRecognizer by lazy { SingaporeIdBackRecognizer() } 13 | override val combinedRecognizer by lazy { SingaporeCombinedRecognizer() } 14 | 15 | override fun extractCombinedResult(combinedResult: SingaporeCombinedRecognizer.Result): String? { 16 | add(DOCUMENT_NUMBER, combinedResult.identityCardNumber) 17 | add(FULL_NAME, combinedResult.name) 18 | add(RACE, combinedResult.race) 19 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 20 | add(SEX, combinedResult.sex) 21 | add(COUNTRY_OF_BIRTH, combinedResult.countryOfBirth) 22 | add(BLOOD_GROUP, combinedResult.bloodGroup) 23 | add(DATE_OF_ISSUE, combinedResult.dateOfIssue) 24 | add(ADDRESS, combinedResult.address) 25 | return combinedResult.name 26 | } 27 | 28 | override fun extractFrontResult(frontResult: SingaporeIdFrontRecognizer.Result): String? { 29 | add(DOCUMENT_NUMBER, frontResult.identityCardNumber) 30 | add(FULL_NAME, frontResult.name) 31 | add(RACE, frontResult.race) 32 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 33 | add(SEX, frontResult.sex) 34 | add(COUNTRY_OF_BIRTH, frontResult.countryOfBirth) 35 | return frontResult.name 36 | } 37 | 38 | override fun extractBackResult(backResult: SingaporeIdBackRecognizer.Result): String? { 39 | add(DOCUMENT_NUMBER, backResult.cardNumber) 40 | add(DATE_OF_ISSUE, backResult.dateOfIssue) 41 | add(ADDRESS, backResult.address) 42 | return null 43 | } 44 | 45 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SlovakiaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.slovakia.SlovakiaCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.slovakia.SlovakiaIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.slovakia.SlovakiaIdFrontRecognizer 11 | 12 | class SlovakiaIdRecognition: 13 | CombinedRecognition() { 14 | 15 | override val frontRecognizer by lazy { SlovakiaIdFrontRecognizer() } 16 | override val backRecognizer by lazy { SlovakiaIdBackRecognizer() } 17 | override val combinedRecognizer by lazy { SlovakiaCombinedRecognizer() } 18 | 19 | override fun extractCombinedResult(combinedResult: SlovakiaCombinedRecognizer.Result): String? { 20 | add(LAST_NAME, combinedResult.lastName) 21 | add(FIRST_NAME, combinedResult.firstName) 22 | add(NATIONALITY, combinedResult.nationality) 23 | add(SEX, combinedResult.sex) 24 | add(DOCUMENT_NUMBER, combinedResult.documentNumber) 25 | add(SPECIAL_REMARKS, combinedResult.specialRemarks) 26 | add(PERSONAL_NUMBER, combinedResult.personalNumber) 27 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 28 | add(PLACE_OF_BIRTH, combinedResult.placeOfBirth) 29 | add(SURNAME_AT_BIRTH, combinedResult.surnameAtBirth) 30 | add(ADDRESS, combinedResult.address) 31 | add(ISSUING_AUTHORITY, combinedResult.issuedBy) 32 | add(DATE_OF_ISSUE, combinedResult.dateOfIssue) 33 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 34 | return FormattingUtils.formatResultTitle(combinedResult.firstName, combinedResult.lastName) 35 | } 36 | 37 | override fun extractFrontResult(frontResult: SlovakiaIdFrontRecognizer.Result): String? { 38 | add(LAST_NAME, frontResult.lastName) 39 | add(FIRST_NAME, frontResult.firstName) 40 | add(NATIONALITY, frontResult.nationality) 41 | add(SEX, frontResult.sex) 42 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 43 | add(PERSONAL_NUMBER, frontResult.personalNumber) 44 | add(DOCUMENT_NUMBER, frontResult.documentNumber) 45 | add(ISSUER, frontResult.issuedBy) 46 | addDateOfExpiry(frontResult.dateOfExpiry.date) 47 | add(DATE_OF_ISSUE, frontResult.dateOfIssue) 48 | return FormattingUtils.formatResultTitle(frontResult.firstName, frontResult.lastName) 49 | } 50 | 51 | override fun extractBackResult(backResult: SlovakiaIdBackRecognizer.Result): String? { 52 | add(ADDRESS, backResult.address) 53 | add(PLACE_OF_BIRTH, backResult.placeOfBirth) 54 | extract(backResult.mrzResult) 55 | return backResult.mrzResult.buildTitle() 56 | } 57 | 58 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SloveniaIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.recognition.CombinedRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 8 | import com.microblink.entities.recognizers.blinkid.slovenia.SloveniaCombinedRecognizer 9 | import com.microblink.entities.recognizers.blinkid.slovenia.SloveniaIdBackRecognizer 10 | import com.microblink.entities.recognizers.blinkid.slovenia.SloveniaIdFrontRecognizer 11 | 12 | class SloveniaIdRecognition: CombinedRecognition() { 13 | 14 | override val frontRecognizer by lazy { SloveniaIdFrontRecognizer() } 15 | override val backRecognizer by lazy { SloveniaIdBackRecognizer() } 16 | override val combinedRecognizer by lazy { SloveniaCombinedRecognizer() } 17 | 18 | override fun extractCombinedResult(combinedResult: SloveniaCombinedRecognizer.Result): String? { 19 | add(LAST_NAME, combinedResult.surname) 20 | add(FIRST_NAME, combinedResult.givenNames) 21 | add(IDENTITY_NUMBER, combinedResult.documentNumber) 22 | add(SEX, combinedResult.sex) 23 | add(SEX, combinedResult.sex) 24 | add(DATE_OF_BIRTH, combinedResult.dateOfBirth) 25 | add(ADDRESS, combinedResult.address) 26 | add(NATIONALITY, combinedResult.nationality) 27 | addDateOfExpiry(combinedResult.dateOfExpiry.date) 28 | add(DATE_OF_ISSUE, combinedResult.dateOfIssue) 29 | add(ISSUING_AUTHORITY, combinedResult.administrativeUnit) 30 | add(DATE_OF_EXPIRY_PERMANENT, combinedResult.isDateOfExpiryPermanent) 31 | return FormattingUtils.formatResultTitle(combinedResult.givenNames, combinedResult.surname) 32 | } 33 | 34 | override fun extractFrontResult(frontResult: SloveniaIdFrontRecognizer.Result): String? { 35 | add(LAST_NAME, frontResult.surname) 36 | add(FIRST_NAME, frontResult.givenNames) 37 | add(SEX, frontResult.sex) 38 | add(NATIONALITY, frontResult.nationality) 39 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 40 | addDateOfExpiry(frontResult.dateOfExpiry.date) 41 | add(DATE_OF_EXPIRY_PERMANENT, frontResult.isDateOfExpiryPermanent) 42 | return FormattingUtils.formatResultTitle(frontResult.givenNames, frontResult.surname) 43 | } 44 | 45 | override fun extractBackResult(backResult: SloveniaIdBackRecognizer.Result): String? { 46 | extract(backResult.mrzResult) 47 | add(ADDRESS, backResult.address) 48 | add(AUTHORITY, backResult.administrativeUnit) 49 | add(DATE_OF_ISSUE, backResult.dateOfIssue) 50 | return backResult.mrzResult.buildTitle() 51 | } 52 | 53 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SpainDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.spain.SpainDlFrontRecognizer 7 | 8 | class SpainDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { SpainDlFrontRecognizer() } 11 | 12 | override fun extractData(result: SpainDlFrontRecognizer.Result): String? { 13 | add(LAST_NAME, result.surname) 14 | add(FIRST_NAME, result.firstName) 15 | add(DATE_OF_BIRTH, result.dateOfBirth) 16 | add(PLACE_OF_BIRTH, result.placeOfBirth) 17 | add(DATE_OF_ISSUE, result.validFrom) 18 | addDateOfExpiry(result.validUntil.date) 19 | add(ISSUING_AUTHORITY, result.issuingAuthority) 20 | add(DOCUMENT_NUMBER, result.number) 21 | add(LICENCE_CATEGORIES, result.licenceCategories) 22 | 23 | return FormattingUtils.formatResultTitle(result.firstName, result.surname) 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SwedenDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.sweden.SwedenDlFrontRecognizer 7 | 8 | class SwedenDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { SwedenDlFrontRecognizer() } 11 | 12 | override fun extractData(result: SwedenDlFrontRecognizer.Result): String? { 13 | add(DOCUMENT_NUMBER, result.licenceNumber) 14 | add(FIRST_NAME, result.name) 15 | add(LAST_NAME, result.surname) 16 | add(DATE_OF_BIRTH, result.dateOfBirth) 17 | add(ISSUING_AUTHORITY, result.issuingAgency) 18 | add(DATE_OF_ISSUE, result.dateOfIssue) 19 | addDateOfExpiry(result.dateOfExpiry.date) 20 | 21 | return FormattingUtils.formatResultTitle(result.name, result.surname) 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SwitzerlandDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.entities.recognizers.blinkid.switzerland.SwitzerlandDlFrontRecognizer 7 | 8 | class SwitzerlandDlRecognition : SingleSideWithId1CardDetectorRecognition() { 9 | 10 | override val recognizer by lazy { SwitzerlandDlFrontRecognizer() } 11 | 12 | override fun extractData(result: SwitzerlandDlFrontRecognizer.Result): String? { 13 | add(FIRST_NAME, result.firstName) 14 | add(LAST_NAME, result.lastName) 15 | add(DATE_OF_BIRTH, result.dateOfBirth) 16 | add(PLACE_OF_BIRTH, result.placeOfBirth) 17 | add(DOCUMENT_NUMBER, result.licenseNumber) 18 | add(ISSUING_AUTHORITY, result.issuingAuthority) 19 | add(DATE_OF_ISSUE, result.dateOfIssue) 20 | addDateOfExpiry(result.dateOfExpiry.date) 21 | add(DATE_OF_EXPIRY_PERMANENT, result.isExpiryDatePermanent) 22 | add(LICENCE_CATEGORIES, result.vehicleCategories) 23 | 24 | return FormattingUtils.formatResultTitle(result.firstName, result.lastName) 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SwitzerlandIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.documentscanflow.recognition.ResultValidator 7 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 8 | import com.microblink.documentscanflow.recognition.extract 9 | import com.microblink.documentscanflow.recognition.util.StringCombiner 10 | import com.microblink.entities.recognizers.Recognizer 11 | import com.microblink.entities.recognizers.blinkid.switzerland.SwitzerlandIdBackRecognizer 12 | import com.microblink.entities.recognizers.blinkid.switzerland.SwitzerlandIdFrontRecognizer 13 | 14 | class SwitzerlandIdRecognition: TwoSideRecognition() { 15 | 16 | override val frontRecognizer by lazy { SwitzerlandIdFrontRecognizer() } 17 | override val backRecognizer by lazy { SwitzerlandIdBackRecognizer() } 18 | 19 | override fun createValidator() = ResultValidator().match(frontResult.dateOfBirth.date, backResult.mrzResult.dateOfBirth.date) 20 | 21 | override fun extractFields() { 22 | if (frontResult.isNotEmpty()) { 23 | extractFrontSide() 24 | } 25 | if (backResult.isNotEmpty()) { 26 | extractBackSide() 27 | } 28 | } 29 | 30 | private fun extractFrontSide() { 31 | add(LAST_NAME, frontResult.surname) 32 | add(FIRST_NAME, frontResult.givenName) 33 | add(DATE_OF_BIRTH, frontResult.dateOfBirth) 34 | } 35 | 36 | private fun extractBackSide() { 37 | extract(backResult.mrzResult) 38 | add(PLACE_OF_ORIGIN, backResult.placeOfOrigin) 39 | add(AUTHORITY, backResult.authority) 40 | add(DATE_OF_ISSUE, backResult.dateOfIssue) 41 | } 42 | 43 | override fun getResultTitle(): String? { 44 | var firstName: String? = "" 45 | var lastName: String? = "" 46 | when { 47 | isTwoSideScan(frontResult, backResult) -> { 48 | val stringCombiner = StringCombiner(StringCombiner.Country.SWITZERLAND) 49 | firstName = stringCombiner.combineMRZString(backResult.mrzResult.secondaryId, frontResult.givenName) 50 | lastName = stringCombiner.combineMRZString(backResult.mrzResult.primaryId, frontResult.surname) 51 | } 52 | frontResult.isNotEmpty() -> { 53 | firstName = frontResult.givenName 54 | lastName = frontResult.surname 55 | } 56 | backResult.isNotEmpty() -> { 57 | firstName = backResult.mrzResult.secondaryId 58 | lastName = backResult.mrzResult.primaryId 59 | } 60 | } 61 | return FormattingUtils.formatResultTitle(firstName, lastName) 62 | } 63 | 64 | private fun isTwoSideScan(frontResult: Recognizer.Result, backResult: Recognizer.Result) = 65 | frontResult.isNotEmpty() && backResult.isNotEmpty() 66 | 67 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/SwitzerlandPassportRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideRecognition 4 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 5 | import com.microblink.documentscanflow.recognition.util.FormattingUtils 6 | import com.microblink.documentscanflow.recognition.util.StringCombiner 7 | import com.microblink.entities.recognizers.blinkid.switzerland.SwitzerlandPassportRecognizer 8 | 9 | class SwitzerlandPassportRecognition: SingleSideRecognition() { 10 | 11 | private val mStringCombiner by lazy { StringCombiner(StringCombiner.Country.SWITZERLAND) } 12 | override val recognizer by lazy { SwitzerlandPassportRecognizer() } 13 | 14 | override fun extractData(result: SwitzerlandPassportRecognizer.Result): String? { 15 | val firstName = mStringCombiner.combineMRZString(result.mrzResult.secondaryId, result.givenName) 16 | val lastName = mStringCombiner.combineMRZString(result.mrzResult.primaryId, result.surname) 17 | 18 | add(FIRST_NAME, firstName) 19 | add(LAST_NAME, lastName) 20 | add(PASSPORT_NUMBER, result.passportNumber) 21 | add(NATIONALITY, result.mrzResult.nationality) 22 | add(DATE_OF_BIRTH, result.dateOfBirth) 23 | add(PLACE_OF_ORIGIN, result.placeOfOrigin) 24 | add(DATE_OF_ISSUE, result.dateOfIssue) 25 | addDateOfExpiry(result.dateOfExpiry.date) 26 | add(SEX, result.sex) 27 | add(AUTHORITY, result.authority) 28 | 29 | return FormattingUtils.formatResultTitle(firstName, lastName) 30 | } 31 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/UnitedArabEmiratesDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.recognition.SingleSideWithId1CardDetectorRecognition 4 | import com.microblink.entities.recognizers.blinkid.unitedArabEmirates.UnitedArabEmiratesDlFrontRecognizer 5 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 6 | 7 | class UnitedArabEmiratesDlRecognition : SingleSideWithId1CardDetectorRecognition() { 8 | 9 | override val recognizer by lazy { UnitedArabEmiratesDlFrontRecognizer() } 10 | 11 | override fun extractData(result: UnitedArabEmiratesDlFrontRecognizer.Result): String? { 12 | add(LICENCE_NUMBER, result.licenseNumber) 13 | add(AUTHORITY, result.licensingAuthority) 14 | add(FULL_NAME, result.name) 15 | add(NATIONALITY, result.nationality) 16 | add(DATE_OF_BIRTH, result.dateOfBirth) 17 | add(DATE_OF_ISSUE, result.issueDate) 18 | addDateOfExpiry(result.expiryDate.date) 19 | add(PLACE_OF_ISSUE, result.placeOfIssue) 20 | 21 | return result.name 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/UnitedArabEmiratesIdRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.buildTitle 4 | import com.microblink.documentscanflow.isNotEmpty 5 | import com.microblink.documentscanflow.recognition.ResultValidator 6 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 7 | import com.microblink.documentscanflow.recognition.extract 8 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 9 | import com.microblink.documentscanflow.sanitizeMRZString 10 | import com.microblink.entities.recognizers.blinkid.unitedArabEmirates.UnitedArabEmiratesIdBackRecognizer 11 | import com.microblink.entities.recognizers.blinkid.unitedArabEmirates.UnitedArabEmiratesIdFrontRecognizer 12 | 13 | class UnitedArabEmiratesIdRecognition: TwoSideRecognition() { 14 | 15 | override val frontRecognizer by lazy { UnitedArabEmiratesIdFrontRecognizer() } 16 | override val backRecognizer by lazy { UnitedArabEmiratesIdBackRecognizer() } 17 | 18 | override fun createValidator(): ResultValidator { 19 | val frontIdNumber = frontResult.idNumber.replace("-", "") 20 | val backIdNumber = backResult.mrzResult.opt1.sanitizeMRZString() 21 | return ResultValidator().match(frontIdNumber, backIdNumber) 22 | } 23 | 24 | override fun extractFields() { 25 | if (backResult.isNotEmpty()) { 26 | extract(backResult.mrzResult) 27 | } 28 | 29 | if (frontResult.isNotEmpty()) { 30 | add(FULL_NAME, frontResult.name.replace("\n", " ")) 31 | add(IDENTITY_NUMBER, frontResult.idNumber) 32 | add(NATIONALITY, frontResult.nationality) 33 | } 34 | } 35 | 36 | override fun getResultTitle(): String? { 37 | if (frontResult.isNotEmpty()) { 38 | return frontResult.name.replace("\n", " ") 39 | } 40 | if (backResult.isNotEmpty()) { 41 | return backResult.mrzResult.buildTitle() 42 | } 43 | return null 44 | } 45 | 46 | override fun setupRecognizers() { 47 | // glare detection is known to be causing issues, disable it 48 | frontRecognizer.setDetectGlare(false) 49 | backRecognizer.setDetectGlare(false) 50 | } 51 | 52 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/UsdlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 5 | import com.microblink.documentscanflow.recognition.extract 6 | import com.microblink.entities.recognizers.blinkbarcode.usdl.UsdlRecognizer 7 | import com.microblink.entities.recognizers.blinkid.documentface.DocumentFaceRecognizer 8 | 9 | open class UsdlRecognition : TwoSideRecognition() { 10 | 11 | override val frontRecognizer by lazy { DocumentFaceRecognizer() } 12 | override val backRecognizer by lazy { UsdlRecognizer() } 13 | 14 | override fun extractFields() = extract(backResult) 15 | 16 | override fun getResultTitle(): String? { 17 | return if (backResult.isNotEmpty()) backResult.fullName 18 | else null 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/UsdlUnder21Recognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.ScanFlowState 4 | 5 | class UsdlUnder21Recognition : UsdlRecognition() { 6 | 7 | override fun isForVerticalDocument(scanFlowState: ScanFlowState) = scanFlowState == ScanFlowState.FRONT_SIDE_SCAN 8 | 9 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/implementations/VictoriaDlRecognition.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.implementations 2 | 3 | import com.microblink.documentscanflow.isNotEmpty 4 | import com.microblink.documentscanflow.recognition.ResultValidator 5 | import com.microblink.documentscanflow.recognition.TwoSideRecognition 6 | import com.microblink.documentscanflow.recognition.resultentry.ResultKey.* 7 | import com.microblink.entities.recognizers.blinkid.australia.AustraliaDlBackRecognizer 8 | import com.microblink.entities.recognizers.blinkid.australia.AustraliaDlFrontRecognizer 9 | 10 | class VictoriaDlRecognition : TwoSideRecognition() { 11 | 12 | override val frontRecognizer by lazy { AustraliaDlFrontRecognizer() } 13 | override val backRecognizer by lazy { AustraliaDlBackRecognizer() } 14 | 15 | override fun createValidator() = ResultValidator().match(frontResult.licenceExpiry, backResult.licenceExpiry) 16 | 17 | override fun extractFields() { 18 | if (frontResult.isNotEmpty()) { 19 | frontResult.apply { 20 | add(ADDRESS, address) 21 | add(DATE_OF_BIRTH, dateOfBirth) 22 | add(FULL_NAME, fullName) 23 | addDateOfExpiry(licenceExpiry) 24 | add(LICENCE_NUMBER, licenceNumber) 25 | add(LICENCE_TYPE, licenceType) 26 | } 27 | } 28 | 29 | if (backResult.isNotEmpty()) { 30 | backResult.apply { 31 | add(LAST_NAME, lastName) 32 | add(ADDRESS, address) 33 | add(LICENCE_NUMBER, licenceNumber) 34 | addDateOfExpiry(licenceExpiry) 35 | } 36 | } 37 | } 38 | 39 | override fun getResultTitle(): String? { 40 | if (frontResult.isNotEmpty()) { 41 | return frontResult.fullName 42 | } 43 | if (backResult.isNotEmpty()) { 44 | return backResult.lastName 45 | } 46 | return null 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/resultentry/DateResultEntry.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.resultentry 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | import com.microblink.results.date.Date 6 | 7 | class DateResultEntry(key: ResultKey, value: Date) : ResultEntry(key, value) { 8 | 9 | constructor(source: Parcel) : this(source.readSerializable() as ResultKey, Date(source.readInt(), source.readInt(), source.readInt())) { 10 | readValidityFromParcel(source) 11 | } 12 | 13 | override fun describeContents() = 0 14 | 15 | override fun writeToParcel(dest: Parcel?, flags: Int) { 16 | dest?.writeSerializable(key) 17 | dest?.writeInt(value.day) 18 | dest?.writeInt(value.month) 19 | dest?.writeInt(value.year) 20 | writeValidityToParcel(dest) 21 | } 22 | 23 | companion object { 24 | @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { 25 | override fun createFromParcel(source: Parcel): DateResultEntry = DateResultEntry(source) 26 | override fun newArray(size: Int): Array = arrayOfNulls(size) 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/resultentry/ResultEntry.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.resultentry 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | import com.microblink.documentscanflow.compareTo 6 | import com.microblink.documentscanflow.currentDate 7 | import com.microblink.results.date.Date 8 | import java.util.* 9 | 10 | abstract class ResultEntry(val key: ResultKey, val value: T) : Parcelable { 11 | 12 | var isValid = true 13 | protected set 14 | 15 | override fun equals(other: Any?): Boolean { 16 | return other is ResultEntry<*> && other.key == this.key 17 | } 18 | 19 | override fun hashCode() = key.hashCode() 20 | 21 | protected fun writeValidityToParcel(dest: Parcel?) { 22 | dest?.writeInt((if (isValid) 1 else 0)) 23 | } 24 | 25 | protected fun readValidityFromParcel(source: Parcel) { 26 | isValid = source.readInt() == 1 27 | } 28 | 29 | internal class Builder { 30 | 31 | fun build(key: ResultKey, value: String?) = 32 | StringResultEntry(key, value ?: "") 33 | 34 | fun build(key: ResultKey, value: Date) = 35 | build(key, value, DateCheckType.NO_CHECK) 36 | 37 | fun build(key: ResultKey, amount: Int, unitName: String) = 38 | StringResultEntry(key, "$amount $unitName") 39 | 40 | fun build(key: ResultKey, value: Int) = 41 | StringResultEntry(key, value.toString()) 42 | 43 | fun build(key: ResultKey, value: Boolean) = 44 | StringResultEntry(key, value.toString()) 45 | 46 | fun build(key: ResultKey, value: Date, checkType: Builder.DateCheckType): ResultEntry<*> { 47 | val entry = DateResultEntry(key, value) 48 | val currentDate = GregorianCalendar.getInstance().currentDate() 49 | 50 | entry.isValid = checkType.check(currentDate, value) 51 | return entry 52 | } 53 | 54 | enum class DateCheckType { 55 | NO_CHECK { 56 | override fun check(currentDate: Date, dateToCheck: Date) = true 57 | }, 58 | IN_PAST { 59 | override fun check(currentDate: Date, dateToCheck: Date) = currentDate.compareTo(dateToCheck) > 0 60 | }, 61 | IN_FUTURE { 62 | override fun check(currentDate: Date, dateToCheck: Date) = currentDate.compareTo(dateToCheck) < 0 63 | }; 64 | 65 | abstract fun check(currentDate: Date, dateToCheck: Date): Boolean 66 | } 67 | } 68 | 69 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/resultentry/ResultKey.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.resultentry 2 | 3 | import com.microblink.documentscanflow.R 4 | 5 | enum class ResultKey(val stringResId: Int) { 6 | 7 | //Names 8 | FIRST_NAME(R.string.keyFirstName), 9 | SECONDARY_ID(R.string.keySecondaryId), 10 | LAST_NAME(R.string.keyLastName), 11 | PRIMARY_ID(R.string.keyPrimaryId), 12 | FAMILY_NAME(R.string.keyFamilyName), 13 | FULL_NAME(R.string.keyFullName), 14 | SURNAME_AT_BIRTH(R.string.keySurnameAtBirth), 15 | PARENT_NAMES(R.string.keyParentNames), 16 | 17 | //Birth date-place 18 | DATE_OF_BIRTH(R.string.keyDateOfBirth), 19 | BIRTH_DATA(R.string.keyBirthData), 20 | COUNTRY_OF_BIRTH(R.string.keyCountryOfBirth), 21 | PLACE_OF_BIRTH(R.string.keyPlaceOfBirth), 22 | PLACE_OF_ORIGIN(R.string.keyPlaceOfOrigin), 23 | 24 | //Issued-Expired 25 | DATE_OF_ISSUE(R.string.keyIssueDate), 26 | DATE_OF_ISSUE_FOR_B_CATEGORY(R.string.keyDateOfIssueBCategory), 27 | DATE_OF_EXPIRY(R.string.keyDateOfExpiry), 28 | DATE_OF_EXPIRY_PERMANENT(R.string.keyDateOfExpiryPermanent), 29 | 30 | //Document numbers 31 | ALIEN_NUMBER(R.string.keyAlienNumber), 32 | APPLICATION_RECEIPT_NUMBER(R.string.keyApplicationReceiptNumber), 33 | ARMY_NUMBER(R.string.keyArmyNumber), 34 | CIVIL_STATUS_NUMBER(R.string.keyCivilStatusNumber), 35 | CIVIL_ID_NUMBER(R.string.keyCivilIdNumber), 36 | CURP(R.string.keyCurp), 37 | DOCUMENT_NUMBER(R.string.keyDocumentNumber), 38 | DRIVER_NUMBER(R.string.keyDriverNumber), 39 | IMMIGRANT_CASE_NUMBER(R.string.keyImmigrantCaseNumber), 40 | IDENTITY_NUMBER(R.string.keyIdentityNumber), 41 | LICENCE_NUMBER(R.string.keyLicenceNumber), 42 | NATIONAL_NUMBER(R.string.keyNationalNumber), 43 | NRIC_NUMBER(R.string.keyNricNumber), 44 | SERIAL_NUMBER(R.string.keySerialNumber), 45 | PERSONAL_NUMBER(R.string.keyPersonalNumber), 46 | PASSPORT_NUMBER(R.string.keyPassportNumber), 47 | 48 | //Address 49 | CITY(R.string.keyCity), 50 | PROVINCE(R.string.keyProvince), 51 | ADDRESS(R.string.keyAddress), 52 | PRINCIPAL_RESIDENCE_AT_ISSUANCE(R.string.keyPrincipalResidenceAtIssuance), 53 | FACULTY_ADDRESS(R.string.keyFacultyAddress), 54 | RESIDENTIAL_STATUS(R.string.keyResidentialStatus), 55 | 56 | //Nationality 57 | NATIONALITY(R.string.keyNationality), 58 | CITIZENSHIP(R.string.keyCitizenship), 59 | 60 | //Issuer 61 | ISSUER(R.string.keyIssuer), 62 | AUTHORITY(R.string.keyAuthority), 63 | ISSUING_AGENCY(R.string.keyIssuingAgency), 64 | ISSUING_AUTHORITY(R.string.keyIssuingAuthority), 65 | PLACE_OF_ISSUE(R.string.keyPlaceOfIssue), 66 | 67 | //Personal details 68 | SEX(R.string.keySex), 69 | BLOOD_GROUP(R.string.keyBloodGroup), 70 | EYE_COLOR(R.string.keyEyeColor), 71 | HEIGHT(R.string.keyHeight), 72 | MARITAL_STATUS(R.string.keyMaritalStatus), 73 | RACE(R.string.keyRace), 74 | RELIGION(R.string.keyReligion), 75 | 76 | DOCUMENT_CODE(R.string.keyDocumentCode), 77 | LICENCE_CATEGORIES(R.string.keyLicenceCategories), 78 | CLASS(R.string.keyClass), 79 | VEHICLE_CLASS(R.string.keyVehicleClass), 80 | ENDORSEMENTS(R.string.keyEndorsements), 81 | DRIVER_RESTRICTIONS(R.string.keyDriverRestrictions), 82 | LICENCE_TYPE(R.string.keyLicenceType), 83 | VEHICLE_CATEGORIES(R.string.keyVehicleCategories), 84 | 85 | //Employment 86 | EMPLOYER(R.string.keyEmployer), 87 | EMPLOYER_ADDRESS(R.string.keyEmployerAddress), 88 | OCCUPATION(R.string.keyOccupation), 89 | 90 | //Other 91 | BARCODE_DATA(R.string.keyBarcodeString), 92 | MRZ_TEXT(R.string.keyMRZText), 93 | OPTIONAL_FIELD_1(R.string.keyOpt1), 94 | OPTIONAL_FIELD_2(R.string.keyOpt2), 95 | RANK(R.string.keyRank), 96 | SECTOR(R.string.keySector), 97 | SPECIAL_REMARKS(R.string.keySpecialRemarks), 98 | ; 99 | 100 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/resultentry/StringResultEntry.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.resultentry 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | 6 | class StringResultEntry(key: ResultKey, value: String) : ResultEntry(key, value) { 7 | 8 | constructor(source: Parcel) : this(source.readSerializable() as ResultKey, source.readString()) { 9 | readValidityFromParcel(source) 10 | } 11 | 12 | override fun describeContents() = 0 13 | 14 | override fun writeToParcel(dest: Parcel?, flags: Int) { 15 | dest?.writeSerializable(key) 16 | dest?.writeString(value) 17 | writeValidityToParcel(dest) 18 | } 19 | 20 | companion object { 21 | @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { 22 | override fun createFromParcel(source: Parcel): StringResultEntry = StringResultEntry(source) 23 | override fun newArray(size: Int): Array = arrayOfNulls(size) 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/util/FormattingUtils.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.util 2 | 3 | internal object FormattingUtils { 4 | 5 | fun formatResultTitle(firstName: String?, lastName: String?): String { 6 | val sb = StringBuilder() 7 | sb.append(lastName ?: "").append(" ").append(firstName ?: "") 8 | return sb.toString() 9 | } 10 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/recognition/util/ImageStorage.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.recognition.util 2 | 3 | import com.microblink.documentscanflow.recognition.RecognitionResult 4 | import com.microblink.image.Image 5 | 6 | /** 7 | * Utility you can use when you want to pass images to another activity but don't want to save them to storage 8 | */ 9 | object ImageStorage { 10 | 11 | @JvmStatic 12 | var frontSideDocumentImage: Image? = null 13 | set(value) { 14 | field?.dispose() 15 | field = value 16 | } 17 | 18 | @JvmStatic 19 | var backSideDocumentImage: Image? = null 20 | set(value) { 21 | field?.dispose() 22 | field = value 23 | } 24 | 25 | @JvmStatic 26 | var faceImage: Image? = null 27 | set(value) { 28 | field?.dispose() 29 | field = value 30 | } 31 | 32 | @JvmStatic 33 | var signatureImage: Image? = null 34 | set(value) { 35 | field?.dispose() 36 | field = value 37 | } 38 | 39 | @JvmStatic 40 | fun addImages(recognitionResult: RecognitionResult) { 41 | backSideDocumentImage = recognitionResult.backSideDocumentImage 42 | frontSideDocumentImage = recognitionResult.frontSideDocumentImage 43 | faceImage = recognitionResult.faceImage 44 | signatureImage = recognitionResult.signatureImage 45 | } 46 | 47 | @JvmStatic 48 | fun clearImages() { 49 | frontSideDocumentImage?.dispose() 50 | frontSideDocumentImage = null 51 | 52 | backSideDocumentImage?.dispose() 53 | backSideDocumentImage = null 54 | 55 | faceImage?.dispose() 56 | faceImage = null 57 | 58 | signatureImage?.dispose() 59 | signatureImage = null 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/TorchButtonHandler.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui 2 | 3 | import android.os.Handler 4 | import android.view.MenuItem 5 | import com.microblink.documentscanflow.R 6 | import com.microblink.view.recognition.RecognizerRunnerView 7 | 8 | internal class TorchButtonHandler { 9 | 10 | internal var torchItem: MenuItem? = null 11 | 12 | var isTorchEnabled = false 13 | set(isEnabled) { 14 | field = isEnabled 15 | updateIcon(isEnabled) 16 | } 17 | 18 | internal fun onTorchSupported() { 19 | torchItem?.isVisible = true 20 | } 21 | 22 | internal fun onTorchButtonClick(recognizerView: RecognizerRunnerView, mainThreadHandler : Handler) { 23 | recognizerView.setTorchState(!isTorchEnabled) { success -> 24 | if (success) { 25 | mainThreadHandler.post {isTorchEnabled = !isTorchEnabled} 26 | } 27 | } 28 | } 29 | 30 | private fun updateIcon(isEnabled: Boolean) { 31 | if (isEnabled) { 32 | torchItem?.setIcon(R.drawable.mb_ic_torch_on) 33 | } else { 34 | torchItem?.setIcon(R.drawable.mb_ic_torch_off) 35 | } 36 | } 37 | 38 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/DefaultDocumentChooser.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import com.microblink.documentscanflow.BaseDocumentScanActivity 6 | import com.microblink.documentscanflow.R 7 | import com.microblink.documentscanflow.country.Country 8 | import com.microblink.documentscanflow.country.CountryFactory 9 | import com.microblink.documentscanflow.document.Document 10 | import com.microblink.documentscanflow.ui.documentchooser.countryfilter.AllowAllCountryFilter 11 | import com.microblink.documentscanflow.ui.documentchooser.defaultimplementation.ChooseCountryActivity 12 | 13 | open class DefaultDocumentChooser(private val scanActivity: Activity) : DocumentChooser { 14 | 15 | override fun shouldShowDocumentTypeTabs() = true 16 | 17 | override fun shouldShowCountryChooser() = true 18 | 19 | override fun getAllowedDocumentTypes(country: Country) = country.getSupportedDocumentTypes() 20 | 21 | override fun geChooseCountryLabel() = 22 | scanActivity.getString(R.string.mb_supported_countries_label) 23 | 24 | override fun getDefaultDocumentTypeForCountry(country: Country) = 25 | country.getSupportedDocumentTypes()[0] 26 | 27 | override fun onChooseCountryClick(currentDocument : Document) { 28 | val intent = Intent(scanActivity, ChooseCountryActivity::class.java).apply { 29 | putExtra(ChooseCountryActivity.EXTRA_CURRENT_COUNTRY_CODE, currentDocument.country.code) 30 | putExtra(ChooseCountryActivity.EXTRA_COUNTRY_FILTER, getCountryFilter()) 31 | putExtra(ChooseCountryActivity.EXTRA_SHOW_INDEXER_SIDEBAR, shouldShowAlphabetIndexerSidebar()) 32 | putExtra(ChooseCountryActivity.EXTRA_THEME, getActivityTheme()) 33 | } 34 | scanActivity.startActivityForResult(intent, BaseDocumentScanActivity.REQ_CODE_CHOOSE_DOC) 35 | } 36 | 37 | protected open fun getActivityTheme() = R.style.MbChooseCountryLightTheme 38 | 39 | protected open fun getCountryFilter() = AllowAllCountryFilter() 40 | 41 | protected open fun shouldShowAlphabetIndexerSidebar() = 42 | CountryFactory.getSortedCountries(getCountryFilter()).size > 50 43 | 44 | } 45 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/DocumentChooser.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser 2 | 3 | import com.microblink.documentscanflow.country.Country 4 | import com.microblink.documentscanflow.document.Document 5 | import com.microblink.documentscanflow.document.DocumentType 6 | 7 | 8 | interface DocumentChooser { 9 | 10 | fun shouldShowCountryChooser() : Boolean 11 | 12 | fun shouldShowDocumentTypeTabs() : Boolean 13 | 14 | fun getDefaultDocumentTypeForCountry(country: Country) : DocumentType 15 | 16 | fun geChooseCountryLabel(): String 17 | 18 | fun onChooseCountryClick(currentDocument : Document) 19 | 20 | fun getAllowedDocumentTypes(country: Country): List 21 | 22 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/countryfilter/AllowAllCountryFilter.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.countryfilter 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | import com.microblink.documentscanflow.country.Country 6 | 7 | class AllowAllCountryFilter() : CountryFilter, Parcelable { 8 | 9 | override fun filter(countries: List) = countries 10 | 11 | constructor(source: Parcel) : this() 12 | 13 | override fun describeContents() = 0 14 | 15 | override fun writeToParcel(dest: Parcel, flags: Int) {} 16 | 17 | companion object { 18 | @JvmField 19 | val CREATOR: Parcelable.Creator = object : Parcelable.Creator { 20 | override fun createFromParcel(source: Parcel): AllowAllCountryFilter = AllowAllCountryFilter(source) 21 | override fun newArray(size: Int): Array = arrayOfNulls(size) 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/countryfilter/BlacklistCountryFilter.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.countryfilter 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | import com.microblink.documentscanflow.country.Country 6 | 7 | class BlacklistCountryFilter(private val blacklistedCountryCodes : Set) : CountryFilter { 8 | 9 | override fun filter(countries: List) = countries.filter { !blacklistedCountryCodes.contains(it.code) } 10 | 11 | constructor(parcel: Parcel) : this(mutableSetOf(*parcel.createStringArray())) 12 | 13 | override fun writeToParcel(dest: Parcel, flags: Int) { 14 | with(dest) { 15 | dest.writeStringArray(blacklistedCountryCodes.toTypedArray()) 16 | } 17 | } 18 | 19 | override fun describeContents(): Int { 20 | return 0 21 | } 22 | 23 | companion object CREATOR : Parcelable.Creator { 24 | override fun createFromParcel(parcel: Parcel): BlacklistCountryFilter { 25 | return BlacklistCountryFilter(parcel) 26 | } 27 | 28 | override fun newArray(size: Int): Array { 29 | return arrayOfNulls(size) 30 | } 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/countryfilter/CountryFilter.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.countryfilter 2 | 3 | import android.os.Parcelable 4 | import com.microblink.documentscanflow.country.Country 5 | 6 | interface CountryFilter : Parcelable { 7 | 8 | fun filter(countries: List): List 9 | 10 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/countryfilter/WhitelistCountryFilter.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.countryfilter 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | import com.microblink.documentscanflow.country.Country 6 | 7 | class WhitelistCountryFilter(private val whitelistedCountryCodes : Set) : CountryFilter { 8 | 9 | override fun filter(countries: List) = countries.filter { whitelistedCountryCodes.contains(it.code) } 10 | 11 | constructor(parcel: Parcel) : this(mutableSetOf(*parcel.createStringArray())) 12 | 13 | override fun writeToParcel(dest: Parcel, flags: Int) { 14 | dest.writeStringArray(whitelistedCountryCodes.toTypedArray()) 15 | } 16 | 17 | override fun describeContents(): Int { 18 | return 0 19 | } 20 | 21 | companion object CREATOR : Parcelable.Creator { 22 | override fun createFromParcel(parcel: Parcel): WhitelistCountryFilter { 23 | return WhitelistCountryFilter(parcel) 24 | } 25 | 26 | override fun newArray(size: Int): Array { 27 | return arrayOfNulls(size) 28 | } 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/defaultimplementation/adapters/FilterListAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.defaultimplementation.adapters 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import android.widget.BaseAdapter 6 | import com.microblink.documentscanflow.R 7 | import com.microblink.documentscanflow.country.Country 8 | import com.microblink.documentscanflow.inflate 9 | import com.microblink.documentscanflow.ui.documentchooser.countryfilter.CountryFilter 10 | import kotlinx.android.synthetic.main.mb_list_item_country.view.* 11 | 12 | class FilterListAdapter(private val elementList: List) : BaseAdapter() { 13 | 14 | private var mShownElements: List = elementList.toList() 15 | 16 | override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { 17 | val view: View = convertView ?: parent.inflate(R.layout.mb_list_item_country) 18 | view.countryName.text = mShownElements[position].getLocalisedName() 19 | return view 20 | } 21 | 22 | override fun getItem(position: Int): Country { 23 | return mShownElements[position] 24 | } 25 | 26 | override fun getItemId(position: Int): Long { 27 | return position.toLong() 28 | } 29 | 30 | override fun getCount(): Int { 31 | return mShownElements.size 32 | } 33 | 34 | fun filter(countryFilter: CountryFilter, matchStr: String) { 35 | mShownElements = countryFilter.filter(elementList) 36 | mShownElements = mShownElements.filter { isMatchingFilter(it.getLocalisedName(), matchStr) } 37 | notifyDataSetChanged() 38 | } 39 | 40 | private fun isMatchingFilter(countryName: String, filter: String): Boolean { 41 | val filterWords = filter.split(" ") 42 | val countryNameWords = countryName.split(" ") 43 | 44 | return filterWords.all { filterWord -> 45 | countryNameWords.any { 46 | it.startsWith(filterWord, true) 47 | } 48 | } 49 | } 50 | 51 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/defaultimplementation/fragments/CountryFindFragment.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.defaultimplementation.fragments 2 | 3 | import android.app.ListFragment 4 | import android.os.Bundle 5 | import android.view.View 6 | import android.widget.ListView 7 | import com.microblink.documentscanflow.country.CountryFactory 8 | import com.microblink.documentscanflow.ui.documentchooser.countryfilter.AllowAllCountryFilter 9 | import com.microblink.documentscanflow.ui.documentchooser.countryfilter.CountryFilter 10 | import com.microblink.documentscanflow.ui.documentchooser.defaultimplementation.adapters.FilterListAdapter 11 | 12 | class CountryFindFragment : ListFragment() { 13 | 14 | private val mAdapter: FilterListAdapter = FilterListAdapter(CountryFactory.getSortedCountries(AllowAllCountryFilter())) 15 | 16 | override fun onActivityCreated(savedInstanceState: Bundle?) { 17 | super.onActivityCreated(savedInstanceState) 18 | listView.divider = null 19 | listView.dividerHeight = 0 20 | listView.setDrawSelectorOnTop(true) 21 | listAdapter = mAdapter 22 | } 23 | 24 | override fun onListItemClick(list: ListView?, view: View?, position: Int, id: Long) { 25 | val countrySett = mAdapter.getItem(position) 26 | onCountryClick(activity, countrySett.code) 27 | } 28 | 29 | fun find(countryFilter: CountryFilter, matchStr: String) { 30 | mAdapter.filter(countryFilter, matchStr) 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/documentchooser/defaultimplementation/fragments/Delegates.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.documentchooser.defaultimplementation.fragments 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import com.microblink.documentscanflow.ui.documentchooser.defaultimplementation.ChooseCountryActivity 6 | 7 | fun onCountryClick(activity: Activity, countryCode: String) { 8 | val intent = Intent() 9 | intent.putExtra(ChooseCountryActivity.EXTRA_RESULT_COUNTRY_CODE, countryCode) 10 | activity.setResult(Activity.RESULT_OK, intent) 11 | activity.finish() 12 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/localization/DefaultLocalizationManager.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.localization 2 | 3 | internal class DefaultLocalizationManager: LocalizationManager { 4 | 5 | private val supportedLanguages = setOf("en", "es", "de", "fr") 6 | 7 | override fun isLanguageSupported(lang: String) = supportedLanguages.contains(lang) 8 | 9 | override fun getDefaultLanguage() = "en" 10 | 11 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/localization/LocalizationManager.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.localization 2 | 3 | /** 4 | * Determines to which languages will the country list be translated to 5 | * If you want to disable translations for all strings, see https://developer.android.com/studio/build/shrink-code#unused-alt-resources 6 | */ 7 | interface LocalizationManager { 8 | 9 | /** 10 | * returns true if passed in language is supported 11 | */ 12 | fun isLanguageSupported(lang: String): Boolean 13 | 14 | /** 15 | * returns language that should be used if device language is not supported 16 | */ 17 | fun getDefaultLanguage(): String 18 | 19 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/scanlineanimator/EmptyScanLineAnimator.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.scanlineanimator 2 | 3 | import com.microblink.view.animation.ScanLineAnimator 4 | 5 | class EmptyScanLineAnimator: ScanLineAnimator { 6 | 7 | override fun onScanStart() { 8 | } 9 | 10 | override fun onScanPause() { 11 | } 12 | 13 | override fun onScanResume() { 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/scansoundplayer/EmptyScanSuccessPlayer.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.scansoundplayer 2 | 3 | class EmptyScanSuccessPlayer : ScanSuccessPlayer { 4 | 5 | override var isSoundEnabled: Boolean 6 | get() = false 7 | set(value) {} 8 | 9 | override fun prepare() { 10 | } 11 | 12 | override fun play() { 13 | } 14 | 15 | override fun cleanup() { 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/scansoundplayer/ScanSuccessPlayer.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.scansoundplayer 2 | 3 | interface ScanSuccessPlayer { 4 | var isSoundEnabled : Boolean 5 | fun prepare() 6 | fun play() 7 | fun cleanup() 8 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/scansoundplayer/SoundPoolScanSuccessPlayer.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.scansoundplayer 2 | 3 | import android.content.Context 4 | import android.media.AudioAttributes 5 | import android.media.AudioManager 6 | import android.media.SoundPool 7 | import android.os.Build 8 | 9 | open class SoundPoolScanSuccessPlayer(private val context: Context, private val soundResourceId: Int) : ScanSuccessPlayer { 10 | 11 | private var soundPool: SoundPool? = null 12 | private var soundId : Int = 0 13 | override var isSoundEnabled : Boolean = true 14 | 15 | override fun prepare() { 16 | soundPool = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 17 | SoundPool.Builder().setMaxStreams(1).setAudioAttributes( 18 | AudioAttributes.Builder() 19 | .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 20 | .setUsage(AudioAttributes.USAGE_MEDIA) 21 | .build() 22 | ).build() 23 | } else { 24 | SoundPool(1, AudioManager.STREAM_MUSIC, 0) 25 | } 26 | soundId = soundPool!!.load(context, soundResourceId, 1) 27 | } 28 | 29 | override fun play() { 30 | if(isSoundEnabled) { 31 | soundPool?.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f) 32 | } 33 | } 34 | 35 | override fun cleanup() { 36 | soundPool?.release() 37 | soundPool = null 38 | soundId = -1 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/scantimeouthandler/DefaultScanTimeoutHandler.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.scantimeouthandler 2 | 3 | import android.os.CountDownTimer 4 | 5 | class DefaultScanTimeoutHandler(private var scanTimeoutMillis: Long): ScanTimeoutHandler { 6 | 7 | private var timeoutTimer : CountDownTimer? = null 8 | private var currentTimerTimeoutMillis = 0L 9 | private var listener: ScanTimeoutHandler.Listener? = null 10 | 11 | override fun registerListener(listener: ScanTimeoutHandler.Listener?) { 12 | this.listener = listener 13 | } 14 | 15 | override fun startTimer() { 16 | updateTimerIfTimeoutUpdated() 17 | timeoutTimer?.start() 18 | } 19 | 20 | override fun stopTimer() { 21 | timeoutTimer?.cancel() 22 | } 23 | 24 | private fun onTimeout() { 25 | listener?.onTimeout() 26 | 27 | // each next timeout should be longer 28 | scanTimeoutMillis *= 2 29 | 30 | // timeout duration has been updated so we want a new timer 31 | destroyCurrentTimeoutTimer() 32 | } 33 | 34 | private fun destroyCurrentTimeoutTimer() { 35 | timeoutTimer?.cancel() 36 | timeoutTimer = null 37 | } 38 | 39 | private fun updateTimerIfTimeoutUpdated() { 40 | if (currentTimerTimeoutMillis != scanTimeoutMillis) { 41 | currentTimerTimeoutMillis = scanTimeoutMillis 42 | timeoutTimer = createTimeoutTimer() 43 | } 44 | } 45 | 46 | private fun createTimeoutTimer() : CountDownTimer = object: CountDownTimer(scanTimeoutMillis, scanTimeoutMillis) { 47 | override fun onFinish() { 48 | onTimeout() 49 | } 50 | 51 | override fun onTick(millisUntilFinished: Long) { 52 | // don't care 53 | } 54 | } 55 | 56 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/scantimeouthandler/ScanTimeoutHandler.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.scantimeouthandler 2 | 3 | interface ScanTimeoutHandler { 4 | 5 | fun registerListener(listener: Listener?) 6 | 7 | fun startTimer() 8 | 9 | fun stopTimer() 10 | 11 | interface Listener { 12 | fun onTimeout() 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/splashoverlay/InvisibleSplashOverlaySettings.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.splashoverlay 2 | 3 | class InvisibleSplashOverlaySettings : SplashOverlaySettings { 4 | 5 | override fun isEnabled(): Boolean = false 6 | 7 | override fun getDurationMillis(): Long = 0 8 | 9 | override fun getBackgroundColorResource(): Int = 0 10 | 11 | override fun getLogoDrawableResource(): Int = 0 12 | 13 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/kotlin/com/microblink/documentscanflow/ui/splashoverlay/SplashOverlaySettings.kt: -------------------------------------------------------------------------------- 1 | package com.microblink.documentscanflow.ui.splashoverlay 2 | 3 | import android.support.annotation.ColorRes 4 | import android.support.annotation.DrawableRes 5 | 6 | interface SplashOverlaySettings { 7 | 8 | fun isEnabled() : Boolean 9 | fun getDurationMillis() : Long 10 | @ColorRes fun getBackgroundColorResource() : Int 11 | @DrawableRes fun getLogoDrawableResource() : Int 12 | 13 | } -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/anim/mb_hide_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/anim/mb_show_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_arrow_right.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_checkmark.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_flip_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_flip_card.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_torch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_torch_off.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_torch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-hdpi/mb_ic_torch_on.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_arrow_right.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_checkmark.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_flip_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_flip_card.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_torch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_torch_off.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_torch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-mdpi/mb_ic_torch_on.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_arrow_right.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_checkmark.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_flip_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_flip_card.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_torch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_torch_off.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_torch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xhdpi/mb_ic_torch_on.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_arrow_right.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_checkmark.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_flip_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_flip_card.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_torch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_torch_off.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_torch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxhdpi/mb_ic_torch_on.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_arrow_right.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_checkmark.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_flip_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_flip_card.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_torch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_torch_off.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_torch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/drawable-xxxhdpi/mb_ic_torch_on.png -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/drawable/mb_bg_choose_country.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/layout/mb_activity_choose_country.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 22 | 23 | 24 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/layout/mb_activity_scan_document.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 13 | 14 | 22 | 23 | 29 | 30 | 40 | 41 | 44 | 45 | 46 | 49 | 50 | 58 | 59 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/layout/mb_fragment_country_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | 19 | 23 | 24 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/layout/mb_include_splash_overlay.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/layout/mb_list_item_country.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 24 | 25 | 38 | 39 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/menu/mb_menu_choose_country.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/menu/mb_menu_scan.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/raw/beep.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-lib/src/main/res/raw/beep.mp3 -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Personalausweis 4 | Neuer Personalausweis 5 | Alter Personalausweis 6 | Führerschein 7 | Reisepass 8 | Aufenthaltsgenehmigung 9 | Befristete Aufenthaltsgenehmigung 10 | Visa 11 | Immigrationsausweis 12 | Militärischer Ausweis 13 | Permanenter Einwohnerausweis 14 | Temporärer Einwohnerausweis 15 | Victoria Fahrerlaubnis 16 | Scannen Sie die Vorderseite des ausgewählten Dokuments oder wählen Sie ein anderes aus. 17 | Scannen Sie die Rückseite. 18 | Scannen Sie das ausgewählte Dokument oder wählen Sie ein anderes aus. 19 | Blendung erkannt. Bewegen Sie die Karte leicht. 20 | Vorder- und Rückseite passen nicht zusammen. Bitte versuchen Sie es erneut. 21 | Haben Sie ein Problem mit dem Scanvorgang? 22 | Stellen Sie sicher, dass Sie über eine gute Beleuchtung verfügen und das richtige Dokument ausgewählt haben. 23 | Weiter 24 | Land wechseln 25 | Die Kamera ist beschäftigt, möglicherweise wird sie von einem anderen Programm verwendet. Schließen Sie andere Programme und / oder starten Sie Ihr Gerät neu. 26 | Fehler beim Starten 27 | Nicht unterstützt 28 | Wählen Sie zwischen mehr als 150 Dokumenten 29 | Suche 30 | Land auswählen 31 | Arbeitsgang 32 | ID (blau & rosa) 33 | Unter-21-ID 34 | Wähler-ID 35 | 36 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Documento de identidad 4 | Nuevo documento de identidad 5 | Antiguo documento de identidad 6 | Permiso de conducir 7 | Pasaporte 8 | Permiso de residencia 9 | Permiso de residencia temporal 10 | Visado 11 | Documento de inmigración 12 | Identificación militar 13 | Identificación de residente permanente 14 | Identificación de residente temporal 15 | Licencia de conducir de Victoria 16 | Escanee la parte frontal del documento seleccionado o escoja otro. 17 | Escanee la parte posterior. 18 | Escanee el documento seleccionado o escoja otro. 19 | Se ha detectado un reflejo. Mueva ligeramente la tarjeta. 20 | La parte frontal y la posterior no coinciden. Inténtelo de nuevo. 21 | ¿Tiene problemas para escanear? 22 | Asegúrese de tener una buena iluminación y de haber seleccionado el documento correcto. 23 | Continuar 24 | Cambiar país 25 | La cámara no está disponible, puede que la esté usando otro programa. Cierre los demás programas o reinicie su dispositivo. 26 | Error al iniciar 27 | No es compatible 28 | Elija entre más de 150 documentos 29 | Buscar 30 | Seleccionar país 31 | Pase de trabajo 32 | Id. (azul y rosa) 33 | ID de menor de 21 34 | ID del votante 35 | 36 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Carte d\'identité 4 | Nouvelle carte d\'identité 5 | Ancienne carte d\'identité 6 | Permis de conduire 7 | Passeport 8 | Permis de séjour 9 | Permis de séjour temporaire 10 | Visa 11 | Identifiant d\'immigrant 12 | Carte d\'identité militaire 13 | Carte de résident permanent 14 | Carte de résident temporaire 15 | Le permis de conduire de Victoria 16 | Numérisez le recto du document sélectionné ou choisissez-en un autre. 17 | Scannez le verso. 18 | Numérisez le document sélectionné ou choisissez-en un autre. 19 | Éblouissement détecté. Déplacez légèrement la carte. 20 | Le recto et le verso ne correspondent pas. Veuillez réessayer. 21 | Vous avez du mal à scanner ? 22 | Assurez-vous d\'avoir un bon éclairage et d\'avoir sélectionné le bon document. 23 | Continuer 24 | Changer de pays 25 | La caméra est occupée, un autre programme l’utilise peut-être. Fermez les autres programmes et / ou redémarrez votre appareil. 26 | Erreur de démarrage 27 | Non supporté 28 | Choisissez parmi plus de 150 documents 29 | Chercher 30 | Choisissez le pays 31 | Passe professionnel 32 | Identifiant (bleu et rose) 33 | Pièce d\'identité moins de 21 ans 34 | Carte d\'électeur 35 | 36 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-hdpi/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8dp 4 | 4dp 5 | 40dp 6 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-ldrtl/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 180 4 | 4 5 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-v19/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 80dp 4 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values-xhdpi/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 8dp 5 | 48dp 6 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/attrs_choose_country.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/attrs_scan.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #48B2E8 4 | #3A8EBA 5 | #48B2E8 6 | 7 | #FFFFFF 8 | #000000 9 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8dp 4 | 16dp 5 | 32dp 6 | 7 | 16dp 8 | 56dp 9 | 10 | 11 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0 4 | 3 5 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ID card 4 | New ID card 5 | Old ID card 6 | Driver\'s license 7 | Passport 8 | Residence permit 9 | Temporary residence permit 10 | Visa 11 | Immigrator ID 12 | Military ID 13 | Permanent resident ID 14 | Temporary resident ID 15 | Victoria driver\'s license 16 | Work pass 17 | Under 21 ID 18 | Voter ID 19 | MyKad 20 | iKad 21 | MyKAS 22 | MyPR 23 | MyTentera 24 | ID (blue & pink) 25 | Scan the front side of the selected document or choose another. 26 | Scan the back side. 27 | Scan the selected document or choose another. 28 | Glare detected. Slightly move the card. 29 | Front and back side do not match. Please try again. 30 | Having trouble scanning? 31 | Make sure you have good lighting and that you\'ve selected the correct document. 32 | Continue 33 | Change country 34 | Camera is busy, another program might be using it. Close other programs and/or restart your device. 35 | Error starting 36 | Not supported 37 | Choose between 150+ documents 38 | Search 39 | Select country 40 | 41 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/styles_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 15 | 16 | 21 | 22 | 26 | 27 | 28 | 32 | 33 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /blinkid-ui-lib/src/main/res/values/styles_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 25 | 26 | 38 | 39 | 51 | 52 | 54 | 55 | 58 | 59 | 62 | 63 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | 5 | android { 6 | signingConfigs { 7 | } 8 | compileSdkVersion 28 9 | defaultConfig { 10 | applicationId "com.microblink.blinkidui.sample" 11 | minSdkVersion 16 12 | targetSdkVersion 28 13 | versionCode 1 14 | versionName "1.0" 15 | } 16 | buildTypes { 17 | release { 18 | debuggable true 19 | minifyEnabled true 20 | shrinkResources true 21 | signingConfig signingConfigs.debug 22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 23 | } 24 | } 25 | } 26 | 27 | dependencies { 28 | implementation fileTree(include: ['*.jar'], dir: 'libs') 29 | implementation project(':blinkid-ui-lib') 30 | } 31 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | -keep class android.support.v7.widget.SearchView { *; } -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/assets/com.microblink.blinkidui.sample.mblic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-sample-app/src/main/assets/com.microblink.blinkidui.sample.mblic -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/java/com/microblink/ResultsActivity.java: -------------------------------------------------------------------------------- 1 | package com.microblink; 2 | 3 | import android.os.Bundle; 4 | import android.os.Parcelable; 5 | import android.support.annotation.IdRes; 6 | import android.support.annotation.Nullable; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | 11 | import com.microblink.documentscanflow.recognition.resultentry.ResultEntry; 12 | import com.microblink.documentscanflow.recognition.util.ImageStorage; 13 | import com.microblink.image.Image; 14 | 15 | import java.util.ArrayList; 16 | 17 | public class ResultsActivity extends AppCompatActivity { 18 | 19 | public static final String EXTRA_RESULT_ENTRIES = "com.microblink.resultEntries"; 20 | 21 | @Override 22 | protected void onCreate(@Nullable Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_result); 25 | setupResultFields(); 26 | setupImages(); 27 | } 28 | 29 | private void setupResultFields() { 30 | StringBuilder textBuilder = new StringBuilder(); 31 | Bundle extras = getIntent().getExtras(); 32 | if (extras == null) { 33 | return; 34 | } 35 | 36 | ArrayList entries = extras.getParcelableArrayList(EXTRA_RESULT_ENTRIES); 37 | if (entries == null) { 38 | return; 39 | } 40 | 41 | for (Parcelable entry : entries) { 42 | if (entry instanceof ResultEntry) { 43 | ResultEntry stringEntry = (ResultEntry) entry; 44 | textBuilder.append(getString(stringEntry.getKey().getStringResId())); 45 | textBuilder.append(" : "); 46 | textBuilder.append(stringEntry.getValue().toString()); 47 | textBuilder.append("\n"); 48 | } 49 | } 50 | 51 | TextView resultEntriesTv = findViewById(R.id.results); 52 | resultEntriesTv.setText(textBuilder.toString()); 53 | } 54 | 55 | private void setupImages() { 56 | setupImage(R.id.card_front_image, ImageStorage.getFrontSideDocumentImage()); 57 | setupImage(R.id.card_back_image, ImageStorage.getBackSideDocumentImage()); 58 | setupImage(R.id.face_image, ImageStorage.getFaceImage()); 59 | setupImage(R.id.signature_image, ImageStorage.getSignatureImage()); 60 | } 61 | 62 | private void setupImage(@IdRes int imageViewId, Image image) { 63 | ImageView imageView = findViewById(imageViewId); 64 | if (image != null) { 65 | imageView.setImageBitmap(image.convertToBitmap()); 66 | } 67 | } 68 | 69 | @Override 70 | protected void onDestroy() { 71 | ImageStorage.clearImages(); 72 | super.onDestroy(); 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/java/com/microblink/SampleApp.java: -------------------------------------------------------------------------------- 1 | package com.microblink; 2 | 3 | import android.app.Application; 4 | 5 | import com.microblink.MicroblinkSDK; 6 | import com.microblink.intent.IntentDataTransferMode; 7 | 8 | public class SampleApp extends Application { 9 | 10 | @Override 11 | public void onCreate() { 12 | super.onCreate(); 13 | MicroblinkSDK.setLicenseFile("com.microblink.blinkidui.sample.mblic", this); 14 | MicroblinkSDK.setIntentDataTransferMode(IntentDataTransferMode.PERSISTED_OPTIMISED); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/drawable/custom_bg_choose_country.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/layout/activity_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 20 | 21 | 27 | 28 | 34 | 35 | 41 | 42 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/layout/mb_include_splash_overlay.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-sample-app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-sample-app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-sample-app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/blinkid-ui-sample-app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #00796B 5 | #004D40 6 | #1DE9B6 7 | #00BFA5 8 | 9 | #424242 10 | 11 | #FFFFFF 12 | #AAFFFFFF 13 | 14 | 15 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | BlinkID UI Sample 3 | Change selected country 4 | 5 | -------------------------------------------------------------------------------- /blinkid-ui-sample-app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 21 | 25 | 34 | 35 | 36 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | dependencies { 7 | classpath 'com.android.tools.build:gradle:3.3.2' 8 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.10" 9 | classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' 10 | } 11 | } 12 | 13 | allprojects { 14 | repositories { 15 | google() 16 | jcenter() 17 | maven { url 'http://maven.microblink.com' } 18 | } 19 | } 20 | 21 | task clean(type: Delete) { 22 | delete rootProject.buildDir 23 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlinkID/blinkid-ui-android/0d6d388c816d2b340bad578ea3a5dc4986df3709/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jul 26 08:47:46 CEST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':blinkid-ui-sample-app', ':blinkid-ui-lib' 2 | --------------------------------------------------------------------------------