Skip to content

Commit 7194627

Browse files
authored
Merge pull request #63 from what3words/staging
Integrate OCR component 2.0.0
2 parents 72e8018 + 6a8749c commit 7194627

File tree

12 files changed

+389
-361
lines changed

12 files changed

+389
-361
lines changed

multi-component-sample/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,13 @@ android {
8989

9090
dependencies {
9191
// W3W API Map Lib
92-
implementation "com.what3words:w3w-android-map-components:1.0.6"
92+
implementation "com.what3words:w3w-android-map-components:1.0.7"
9393

9494
// W3W Component Lib
9595
implementation "com.what3words:w3w-android-components:3.2.5"
9696

9797
// W3W OCR Lib
98-
implementation "com.what3words:w3w-android-ocr-components:1.1.1"
98+
implementation "com.what3words:w3w-android-ocr-components:2.0.0"
9999

100100
// Compose
101101
implementation platform("androidx.compose:compose-bom:2024.06.00")

multi-component-sample/src/main/java/com/what3words/samples/multiple/MultiComponentsActivity.kt

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,40 @@ import androidx.activity.compose.setContent
66
import androidx.activity.viewModels
77
import androidx.compose.runtime.collectAsState
88
import androidx.compose.runtime.getValue
9+
import com.google.mlkit.vision.text.TextRecognizerOptionsInterface.LATIN
910
import com.what3words.androidwrapper.What3WordsV3
10-
import com.what3words.ocr.components.models.W3WOcrMLKitWrapper
11-
import com.what3words.ocr.components.models.W3WOcrWrapper
11+
import com.what3words.androidwrapper.datasource.text.W3WApiTextDataSource
12+
import com.what3words.core.datasource.image.W3WImageDataSource
13+
import com.what3words.core.datasource.text.W3WTextDataSource
14+
import com.what3words.ocr.components.datasource.W3WMLKitImageDataSource
1215
import com.what3words.samples.multiple.ui.screen.MainAppScreen
1316

1417
class MultiComponentsActivity : ComponentActivity() {
1518
private val viewModel: MultiComponentsViewModel by viewModels()
16-
private lateinit var ocrWrapper: W3WOcrWrapper
17-
private val dataProvider by lazy {
18-
What3WordsV3(
19-
BuildConfig.W3W_API_KEY,
20-
this
21-
)
22-
}
19+
private lateinit var w3WImageDataSource: W3WImageDataSource
20+
private lateinit var w3WTextDataSource: W3WTextDataSource
21+
private lateinit var dataProvider: What3WordsV3
2322

2423
override fun onCreate(savedInstanceState: Bundle?) {
2524
super.onCreate(savedInstanceState)
26-
ocrWrapper = W3WOcrMLKitWrapper(context = this@MultiComponentsActivity)
25+
26+
w3WTextDataSource = W3WApiTextDataSource.create(this, BuildConfig.W3W_API_KEY)
27+
w3WImageDataSource = W3WMLKitImageDataSource.create(
28+
context = this,
29+
recognizerOptions = LATIN
30+
)
31+
dataProvider = What3WordsV3(
32+
BuildConfig.W3W_API_KEY,
33+
this
34+
)
2735

2836
setContent {
2937
val selectedSuggestion by viewModel.selectedSuggestion.collectAsState()
3038

3139
MainAppScreen(
40+
w3WTextDataSource,
41+
w3WImageDataSource,
3242
dataProvider,
33-
ocrWrapper,
3443
true,
3544
selectedSuggestion = selectedSuggestion,
3645
onSuggestionChanged = {
@@ -39,9 +48,4 @@ class MultiComponentsActivity : ComponentActivity() {
3948
)
4049
}
4150
}
42-
43-
override fun onDestroy() {
44-
super.onDestroy()
45-
if (::ocrWrapper.isInitialized) ocrWrapper.stop()
46-
}
4751
}

multi-component-sample/src/main/java/com/what3words/samples/multiple/ui/screen/MainAppScreen.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,21 @@ import androidx.constraintlayout.compose.Dimension
2525
import com.what3words.androidwrapper.What3WordsAndroidWrapper
2626
import com.what3words.components.maps.models.W3WMarkerColor
2727
import com.what3words.components.maps.wrappers.W3WMapWrapper
28+
import com.what3words.core.datasource.image.W3WImageDataSource
29+
import com.what3words.core.datasource.text.W3WTextDataSource
2830
import com.what3words.design.library.ui.theme.W3WTheme
2931
import com.what3words.javawrapper.response.SuggestionWithCoordinates
30-
import com.what3words.ocr.components.models.W3WOcrWrapper
3132
import com.what3words.samples.multiple.ui.screen.view.AutoTextField
3233
import com.what3words.samples.multiple.ui.screen.view.AutoTextFieldUIState
3334
import com.what3words.samples.multiple.ui.screen.view.MapWrapperView
3435
import com.what3words.samples.multiple.ui.screen.view.OcrView
36+
import com.what3words.samples.multiple.util.toSuggestionWithCoordinates
3537

3638
@Composable
3739
fun MainAppScreen(
40+
w3WTextDataSource: W3WTextDataSource,
41+
w3WImageDataSource: W3WImageDataSource,
3842
dataProvider: What3WordsAndroidWrapper,
39-
ocrWrapper: W3WOcrWrapper,
4043
isGoogleMapType: Boolean,
4144
selectedSuggestion: SuggestionWithCoordinates?,
4245
onSuggestionChanged: (SuggestionWithCoordinates?) -> (Unit)
@@ -75,11 +78,13 @@ fun MainAppScreen(
7578
val (w3wTextFieldRef, mapRef, ocrRef, mapTypeRef, addMarkerRef) = createRefs()
7679

7780
OcrView(
78-
ocrWrapper,
79-
dataProvider,
81+
w3WTextDataSource = w3WTextDataSource,
82+
w3WImageDataSource = w3WImageDataSource,
8083
scanScreenVisible = scanScreenVisible,
8184
onScanScreenVisibleChange = { scanScreenVisible = it },
82-
onSuggestionScanned = onSuggestionChanged
85+
onSuggestionScanned = { w3wSuggestion ->
86+
onSuggestionChanged(w3wSuggestion.toSuggestionWithCoordinates())
87+
}
8388
)
8489

8590
MapWrapperView(

multi-component-sample/src/main/java/com/what3words/samples/multiple/ui/screen/view/OCRView.kt

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,29 @@ import androidx.compose.animation.expandVertically
66
import androidx.compose.animation.shrinkVertically
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
9-
import androidx.compose.runtime.remember
109
import androidx.compose.ui.Modifier
1110
import androidx.compose.ui.res.stringResource
1211
import androidx.compose.ui.zIndex
13-
import com.what3words.androidwrapper.What3WordsAndroidWrapper
12+
import com.what3words.core.datasource.image.W3WImageDataSource
13+
import com.what3words.core.datasource.text.W3WTextDataSource
14+
import com.what3words.core.types.domain.W3WSuggestion
15+
import com.what3words.core.types.geometry.W3WCoordinates
16+
import com.what3words.core.types.options.W3WAutosuggestOptions
1417
import com.what3words.design.library.ui.components.What3wordsAddressListItemDefaults
1518
import com.what3words.design.library.ui.theme.w3wTypography
16-
import com.what3words.javawrapper.request.AutosuggestOptions
17-
import com.what3words.javawrapper.request.Coordinates
18-
import com.what3words.javawrapper.response.SuggestionWithCoordinates
1919
import com.what3words.ocr.components.R
20-
import com.what3words.ocr.components.models.W3WOcrWrapper
2120
import com.what3words.ocr.components.ui.W3WOcrScanner
2221
import com.what3words.ocr.components.ui.W3WOcrScannerDefaults
22+
import com.what3words.ocr.components.ui.rememberOcrScanManager
2323

2424

2525
@Composable
2626
fun OcrView(
27-
ocrWrapper: W3WOcrWrapper,
28-
dataProvider: What3WordsAndroidWrapper,
27+
w3WImageDataSource: W3WImageDataSource,
28+
w3WTextDataSource: W3WTextDataSource,
2929
scanScreenVisible: Boolean, onScanScreenVisibleChange: (Boolean) -> Unit,
30-
onSuggestionScanned: (SuggestionWithCoordinates) -> (Unit)
30+
onSuggestionScanned: (W3WSuggestion) -> (Unit)
3131
) {
32-
val options = remember {
33-
AutosuggestOptions().apply {
34-
focus = Coordinates(51.520847, -0.195521)
35-
}
36-
}
3732

3833
AnimatedVisibility(
3934
visible = scanScreenVisible,
@@ -50,10 +45,24 @@ fun OcrView(
5045
)
5146
) {
5247
W3WOcrScanner(
53-
ocrWrapper,
54-
dataProvider = dataProvider,
55-
options = options,
56-
returnCoordinates = true,
48+
ocrScanManager = rememberOcrScanManager(
49+
w3wImageDataSource = w3WImageDataSource,
50+
w3wTextDataSource = w3WTextDataSource,
51+
options = W3WAutosuggestOptions.Builder()
52+
.focus(W3WCoordinates(51.520847, -0.195521))
53+
.includeCoordinates(true)
54+
.build(),
55+
),
56+
onDismiss = {
57+
onScanScreenVisibleChange(false)
58+
},
59+
onSuggestionSelected = {
60+
onSuggestionScanned(it)
61+
onScanScreenVisibleChange(false)
62+
},
63+
onError = {
64+
onScanScreenVisibleChange(false)
65+
},
5766
//optional if you want to override any string of the scanner composable, to allow localisation and accessibility.
5867
scannerStrings = W3WOcrScannerDefaults.defaultStrings(
5968
scanStateFoundTitle = stringResource(id = R.string.scan_state_found),
@@ -74,15 +83,6 @@ fun OcrView(
7483
suggestionTextStyles = What3wordsAddressListItemDefaults.defaultTextStyles(
7584
wordsTextStyle = MaterialTheme.w3wTypography.titleMediumSemibold
7685
),
77-
onError = {
78-
onScanScreenVisibleChange(false)
79-
},
80-
onDismiss = {
81-
onScanScreenVisibleChange(false)
82-
},
83-
onSuggestionSelected = {
84-
onSuggestionScanned(it)
85-
onScanScreenVisibleChange(false)
86-
})
86+
)
8787
}
8888
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.what3words.samples.multiple.util
2+
3+
import com.what3words.core.types.domain.W3WSuggestion
4+
import com.what3words.core.types.geometry.km
5+
import com.what3words.javawrapper.response.Suggestion
6+
import com.what3words.javawrapper.response.SuggestionWithCoordinates
7+
8+
/**
9+
* Mapper from [W3WSuggestion] to [SuggestionWithCoordinates]. Throws an [IllegalArgumentException] if
10+
* [W3WSuggestion] does not have coordinates
11+
*/
12+
@Throws(IllegalArgumentException::class)
13+
fun W3WSuggestion.toSuggestionWithCoordinates(): SuggestionWithCoordinates {
14+
val w3wAddress = this.w3wAddress
15+
val center = w3wAddress.center
16+
?: throw IllegalArgumentException("W3WSuggestion does not have coordinates")
17+
val square = w3wAddress.square
18+
?: throw IllegalArgumentException("W3WSuggestion does not have coordinates")
19+
20+
return SuggestionWithCoordinates(
21+
Suggestion(
22+
w3wAddress.words,
23+
w3wAddress.nearestPlace,
24+
w3wAddress.country.twoLetterCode,
25+
this.distanceToFocus?.km()?.toInt() ?: 0,
26+
this.rank,
27+
w3wAddress.language.w3wCode
28+
),
29+
center.lat,
30+
center.lng,
31+
square.northeast.lat,
32+
square.northeast.lng,
33+
square.southwest.lat,
34+
square.southwest.lng,
35+
)
36+
}
37+

ocr-sample/build.gradle

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,18 +67,24 @@ android {
6767
dependencies {
6868
// compose
6969
implementation platform("androidx.compose:compose-bom:2024.06.00")
70-
7170
implementation "androidx.activity:activity-compose:1.9.1"
7271
implementation "androidx.compose.material3:material3"
7372
implementation "androidx.compose.ui:ui"
7473

7574
// W3W API OCR Lib
76-
implementation "com.what3words:w3w-android-ocr-components:1.1.1"
75+
implementation "com.what3words:w3w-android-ocr-components:2.0.0-SNAPSHOT"
7776

7877
// mlkit
79-
implementation "com.google.android.gms:play-services-mlkit-text-recognition:19.0.0"
80-
implementation "com.google.android.gms:play-services-mlkit-text-recognition-chinese:16.0.0"
81-
implementation "com.google.android.gms:play-services-mlkit-text-recognition-devanagari:16.0.0"
82-
implementation "com.google.android.gms:play-services-mlkit-text-recognition-japanese:16.0.0"
83-
implementation "com.google.android.gms:play-services-mlkit-text-recognition-korean:16.0.0"
78+
implementation "com.google.android.gms:play-services-mlkit-text-recognition:19.0.1"
79+
implementation "com.google.android.gms:play-services-mlkit-text-recognition-chinese:16.0.1"
80+
implementation "com.google.android.gms:play-services-mlkit-text-recognition-devanagari:16.0.1"
81+
implementation "com.google.android.gms:play-services-mlkit-text-recognition-japanese:16.0.1"
82+
implementation "com.google.android.gms:play-services-mlkit-text-recognition-korean:16.0.1"
83+
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.6'
84+
implementation 'androidx.compose.ui:ui-graphics'
85+
implementation 'androidx.compose.ui:ui-tooling-preview'
86+
androidTestImplementation platform('androidx.compose:compose-bom:2024.04.01')
87+
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
88+
debugImplementation 'androidx.compose.ui:ui-tooling'
89+
debugImplementation 'androidx.compose.ui:ui-test-manifest'
8490
}

ocr-sample/src/main/AndroidManifest.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
android:theme="@style/Theme.Ocrcomponentssample"
1616
tools:targetApi="31">
1717
<activity
18-
android:name="com.what3words.samples.ocr.ComposeOcrScanPopupSampleActivity"
18+
android:name=".OcrSampleActivity"
1919
android:exported="true"
20-
android:label="@string/title_activity_main2" >
20+
android:label="@string/title_activity_w3w_ocr_sample"
21+
android:theme="@style/Theme.Ocrcomponentssample">
2122
<intent-filter>
2223
<action android:name="android.intent.action.MAIN" />
2324

0 commit comments

Comments
 (0)