Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ Reads MRZ field for React Native (Both iOS and Android)

> **_NOTE:_** IOS Version only supports TD3 format Passport MRZ (doesn't support id cards), and only supports back camera.

> **_NOTE:_** Android Version only reads document number, expiry date, birth date, and fills rest of the fields empty.

## Installation

1. **Install the Plugin**:
Expand All @@ -31,14 +29,14 @@ Reads MRZ field for React Native (Both iOS and Android)
Add the following code in your app to request camera permission at runtime:

```ts
import { Platform} from 'react-native';
import { Platform } from 'react-native';
import * as Permissions from 'react-native-permissions';

async function requestCameraPermission() {
try {
const granted = await Permissions.request(
(() => {
switch(Platform.OS) {
switch (Platform.OS) {
case 'ios':
return Permissions.PERMISSIONS.IOS.CAMERA;
case 'android':
Expand All @@ -55,7 +53,7 @@ Reads MRZ field for React Native (Both iOS and Android)
buttonPositive: 'OK',
}
);
switch(granted) {
switch (granted) {
case Permissions.RESULTS.GRANTED:
case Permissions.RESULTS.LIMITED:
console.log('You can use the camera');
Expand All @@ -78,13 +76,14 @@ import MrzReader, { CameraSelector, DocType } from 'react-native-mrz-reader';
// ...

<MrzReader
style={{width: '100%', height: '100%'}}
style={{ width: '100%', height: '100%' }}
docType={DocType.Passport}
cameraSelector={CameraType.Back}
resizeMode={ResizeMode.CONTAIN}
onMRZRead={(mrz: string) => {
console.log(mrz)
console.log(mrz);
}}
/>
/>;
```

## Example
Expand All @@ -107,4 +106,4 @@ MIT

---

Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ dependencies {
implementation "androidx.camera:camera-view:1.3.3"

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
implementation 'cz.adaptech:tesseract4android:4.1.1'
implementation 'cz.adaptech.tesseract4android:tesseract4android-openmp:4.9.0'

implementation 'org.jmrtd:jmrtd:0.7.18'
}
Expand Down
22 changes: 22 additions & 0 deletions android/src/main/java/com/mrzreader/MrzReaderViewManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.mrzreader
import com.facebook.react.uimanager.SimpleViewManager
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.annotations.ReactProp
import com.mrzreader.types.PreviewViewType
import com.mrzreader.types.ResizeMode
import com.mrzreader.view.CameraPreviewView

class MrzReaderViewManager : SimpleViewManager<CameraPreviewView>() {
Expand All @@ -21,4 +23,24 @@ class MrzReaderViewManager : SimpleViewManager<CameraPreviewView>() {
fun setDocType(view: CameraPreviewView, cardType: String) {
view.setDocType(cardType)
}

@ReactProp(name = "resizeMode")
fun setResizeMode(view: CameraPreviewView, resizeMode: String?) {
if (resizeMode != null) {
val newMode = ResizeMode.fromValue(resizeMode)
view.resizeMode = newMode
} else {
view.resizeMode = ResizeMode.COVER
}
}

@ReactProp(name = "androidPreviewViewType")
fun setAndroidPreviewViewType(view: CameraPreviewView, previewViewType: String?) {
if (previewViewType != null) {
val newType = PreviewViewType.fromValue(previewViewType)
view.androidPreviewViewType = newType
} else {
view.androidPreviewViewType = PreviewViewType.SURFACE_VIEW
}
}
}
8 changes: 0 additions & 8 deletions android/src/main/java/com/mrzreader/dto/Coordinates.kt

This file was deleted.

3 changes: 0 additions & 3 deletions android/src/main/java/com/mrzreader/dto/Line.kt

This file was deleted.

3 changes: 0 additions & 3 deletions android/src/main/java/com/mrzreader/dto/Point.kt

This file was deleted.

19 changes: 19 additions & 0 deletions android/src/main/java/com/mrzreader/extensions/ViewGroup.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.mrzreader.extensions

import android.view.View
import android.view.ViewGroup

// React does not trigger onLayout events for dynamically added views (`addView`). This fixes that.
// https://github.com/facebook/react-native/issues/17968#issuecomment-633308615
fun ViewGroup.installHierarchyFitter() {
setOnHierarchyChangeListener(object : ViewGroup.OnHierarchyChangeListener {
override fun onChildViewRemoved(parent: View?, child: View?) = Unit
override fun onChildViewAdded(parent: View?, child: View?) {
parent?.measure(
View.MeasureSpec.makeMeasureSpec(measuredWidth, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(measuredHeight, View.MeasureSpec.EXACTLY)
)
parent?.layout(0, 0, parent.measuredWidth, parent.measuredHeight)
}
})
}
23 changes: 23 additions & 0 deletions android/src/main/java/com/mrzreader/types/PreviewViewType.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.mrzreader.types

import androidx.camera.view.PreviewView

enum class PreviewViewType(val value: String) {
SURFACE_VIEW("surface-view"),
TEXTURE_VIEW("texture-view");

fun toPreviewImplementationMode(): PreviewView.ImplementationMode =
when (this) {
SURFACE_VIEW -> PreviewView.ImplementationMode.PERFORMANCE
TEXTURE_VIEW -> PreviewView.ImplementationMode.COMPATIBLE
}

companion object {
fun fromValue(value: String): PreviewViewType =
when (value) {
SURFACE_VIEW.value -> SURFACE_VIEW
TEXTURE_VIEW.value -> TEXTURE_VIEW
else -> throw IllegalArgumentException("Unknown PreviewViewType value: $value")
}
}
}
23 changes: 23 additions & 0 deletions android/src/main/java/com/mrzreader/types/ResizeMode.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.mrzreader.types

import androidx.camera.view.PreviewView

enum class ResizeMode(val value: String) {
COVER("cover"),
CONTAIN("contain");

fun toScaleType(): PreviewView.ScaleType =
when (this) {
COVER -> PreviewView.ScaleType.FILL_CENTER
CONTAIN -> PreviewView.ScaleType.FIT_CENTER
}

companion object {
fun fromValue(value: String): ResizeMode =
when (value) {
COVER.value -> COVER
CONTAIN.value -> CONTAIN
else -> throw IllegalArgumentException("Unknown ResizeMode value: $value")
}
}
}
Loading