Skip to content

Commit 9519371

Browse files
Search SDK 2.9.0-rc.1 (#319)
* Search SDK 2.9.0-rc.1 * Bump maps to 11.11.0-rc.1
1 parent 4eebb0a commit 9519371

File tree

6 files changed

+94
-49
lines changed

6 files changed

+94
-49
lines changed

CHANGELOG.md

+11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Changelog for the Mapbox Search SDK for Android
22

3+
## 2.9.0-rc.1
4+
5+
### New features
6+
- Added support for the offline search in Taiwan.
7+
8+
### Mapbox dependencies
9+
- Search Native SDK `2.9.0-rc.1`
10+
- Common SDK `24.11.0-rc.1`
11+
12+
13+
314
## 2.9.0-beta.1
415

516
### New features

MapboxSearch/gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ android.enableJetifier=false
2121
kotlin.code.style=official
2222

2323
# SDK version attributes
24-
VERSION_NAME=2.9.0-beta.1
24+
VERSION_NAME=2.9.0-rc.1
2525

2626
# Artifact attributes
2727
mapboxArtifactUserOrg=mapbox

MapboxSearch/gradle/versions.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ ext {
4141

4242
pitest_version = '1.6.7'
4343

44-
mapbox_maps_version = '11.10.0'
44+
mapbox_maps_version = '11.11.0-rc.1'
4545
mapbox_turf_version = '6.15.0'
4646

47-
common_sdk_version = '24.11.0-beta.1'
47+
common_sdk_version = '24.11.0-rc.1'
4848
mapbox_base_version = '0.8.0'
4949

50-
search_native_version = '2.9.0-beta.1'
50+
search_native_version = '2.9.0-rc.1'
5151

5252
detekt_version = '1.19.0'
5353

MapboxSearch/sample/src/main/java/com/mapbox/search/sample/api/BaseKotlinExampleActivity.kt

+54-14
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,21 @@ package com.mapbox.search.sample.api
33
import android.annotation.SuppressLint
44
import android.os.Bundle
55
import android.util.Log
6+
import android.view.View
7+
import android.widget.ScrollView
68
import android.widget.TextView
79
import androidx.appcompat.app.AppCompatActivity
810
import androidx.appcompat.widget.AppCompatButton
911
import androidx.appcompat.widget.Toolbar
1012
import com.google.gson.GsonBuilder
13+
import com.mapbox.annotation.MapboxExperimental
14+
import com.mapbox.search.offline.OfflineSearchResult
1115
import com.mapbox.search.sample.R
1216

17+
@OptIn(MapboxExperimental::class)
1318
abstract class BaseKotlinExampleActivity : AppCompatActivity() {
1419

20+
private val logTextScroll: ScrollView by lazy { findViewById(R.id.logTextScroll) }
1521
private val toolbarView: Toolbar by lazy { findViewById(R.id.toolbar) }
1622
private val logTextView: TextView by lazy { findViewById(R.id.logText) }
1723
private val startButton: AppCompatButton by lazy { findViewById(R.id.startButton) }
@@ -42,28 +48,62 @@ abstract class BaseKotlinExampleActivity : AppCompatActivity() {
4248
startButton.isEnabled = true
4349
}
4450

45-
protected fun logI(tag: String, message: String, result: Any? = null) {
46-
logTextView.post {
47-
Log.i(tag, message.addToLog())
48-
result?.let { res -> printObjectToLog(res) }
51+
// TODO we probably shouldn't try to print in JSON format by default,
52+
// because it prints all the object structure, including internal stuff
53+
protected fun logI(tag: String = LOG_TAG, message: String, result: Any? = null) {
54+
runOnUiThread {
55+
Log.i(tag, message)
56+
appendToLogMsg(message)
57+
result?.let { res ->
58+
Log.i(tag, message)
59+
appendToLogMsg(prettify(res))
60+
}
4961
}
5062
}
5163

52-
protected fun logE(tag: String, message: String, error: Throwable? = null) {
53-
Log.i(tag, "$message: ${error?.message}".addToLog(), error)
64+
protected fun logE(tag: String = LOG_TAG, message: String, error: Throwable? = null) {
65+
runOnUiThread {
66+
Log.e(tag, message, error)
67+
appendToLogMsg("$message: ${error?.message}")
68+
}
5469
}
5570

56-
protected fun prettify(result: Any): String {
57-
val gson = GsonBuilder().setPrettyPrinting().serializeNulls().create()
58-
return gson.toJson(result).toString()
71+
protected fun printMessage(message: String) {
72+
runOnUiThread {
73+
Log.i(LOG_TAG, message)
74+
appendToLogMsg(message)
75+
}
5976
}
6077

61-
private fun printObjectToLog(results: Any) {
62-
prettify(results).addToLog()
78+
@SuppressLint("SetTextI18n")
79+
private fun appendToLogMsg(message: String) {
80+
logTextView.text = "${logTextView.text}\n$message"
81+
logTextScroll.post {
82+
logTextScroll.fullScroll(View.FOCUS_DOWN)
83+
}
6384
}
6485

65-
@SuppressLint("SetTextI18n")
66-
protected fun String.addToLog() = this.also {
67-
logTextView.text = "${logTextView.text}\n$this"
86+
protected companion object {
87+
88+
const val LOG_TAG = "SearchApiExample"
89+
90+
private val GSON = GsonBuilder().setPrettyPrinting().serializeNulls().create()
91+
92+
fun prettify(result: Any) = GSON.toJson(result).toString()
93+
94+
fun OfflineSearchResult.toPrettyString(): String {
95+
return "OfflineSearchResult(\n" +
96+
"\tid='$id',\n" +
97+
"\tmapboxId='$mapboxId',\n" +
98+
"\tname='$name',\n" +
99+
"\tdescriptionText=$descriptionText,\n" +
100+
"\taddress=$address,\n" +
101+
"\tcoordinate=$coordinate,\n" +
102+
"\troutablePoints=$routablePoints,\n" +
103+
"\tnewType=$newType,\n" +
104+
"\tdistanceMeters=$distanceMeters,\n" +
105+
"\tmetadata=$metadata\n" +
106+
")"
107+
}
68108
}
69109
}

MapboxSearch/sample/src/main/java/com/mapbox/search/sample/api/OfflineEvSearchKotlinExampleActivity.kt

+24-31
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.mapbox.search.sample.api
22

33
import android.os.Bundle
4-
import android.os.Handler
5-
import android.os.Looper
6-
import android.util.Log
74
import com.mapbox.annotation.MapboxExperimental
85
import com.mapbox.common.Cancelable
96
import com.mapbox.common.TileRegionLoadOptions
@@ -12,6 +9,9 @@ import com.mapbox.geojson.Point
129
import com.mapbox.search.common.AsyncOperationTask
1310
import com.mapbox.search.common.ev.EvConnectorType
1411
import com.mapbox.search.offline.OfflineEvSearchOptions
12+
import com.mapbox.search.offline.OfflineIndexChangeEvent
13+
import com.mapbox.search.offline.OfflineIndexChangeEvent.EventType
14+
import com.mapbox.search.offline.OfflineIndexErrorEvent
1515
import com.mapbox.search.offline.OfflineResponseInfo
1616
import com.mapbox.search.offline.OfflineSearchCallback
1717
import com.mapbox.search.offline.OfflineSearchEngine
@@ -20,7 +20,6 @@ import com.mapbox.search.offline.OfflineSearchOptions
2020
import com.mapbox.search.offline.OfflineSearchResult
2121
import com.mapbox.search.sample.R
2222
import java.net.URI
23-
import java.util.concurrent.TimeUnit
2423

2524
@OptIn(MapboxExperimental::class)
2625
class OfflineEvSearchKotlinExampleActivity : BaseKotlinExampleActivity() {
@@ -34,13 +33,26 @@ class OfflineEvSearchKotlinExampleActivity : BaseKotlinExampleActivity() {
3433
private val searchCallback = object : OfflineSearchCallback {
3534

3635
override fun onResults(results: List<OfflineSearchResult>, responseInfo: OfflineResponseInfo) {
37-
logI("SearchApiExample", "Results:", results)
38-
Log.d("Test.", "Test. results: $results")
36+
printMessage("Results:\n${results.joinToString(separator = "\n") { it.toPrettyString() }}")
3937
onFinished()
4038
}
4139

4240
override fun onError(e: Exception) {
43-
logI("SearchApiExample", "Search error", e)
41+
printMessage("Search error: $e")
42+
onFinished()
43+
}
44+
}
45+
46+
private val onIndexChangeListener = object : OfflineSearchEngine.OnIndexChangeListener {
47+
override fun onIndexChange(event: OfflineIndexChangeEvent) {
48+
if (event.regionId == tileRegionId && (event.type == EventType.ADD || event.type == EventType.UPDATE)) {
49+
printMessage("$tileRegionId was successfully added or updated")
50+
startSearch()
51+
}
52+
}
53+
54+
override fun onError(event: OfflineIndexErrorEvent) {
55+
printMessage("Offline index error: $event")
4456
onFinished()
4557
}
4658
}
@@ -70,18 +82,8 @@ class OfflineEvSearchKotlinExampleActivity : BaseKotlinExampleActivity() {
7082
}
7183

7284
override fun startExample() {
73-
tileStore.getAllTileRegions { regions ->
74-
regions.onValue { value ->
75-
logI("SearchApiExample", "Available regions: $value")
76-
downloadTiles()
77-
}.onError { error ->
78-
logI("SearchApiExample", "Unable to get tile regions: $error")
79-
downloadTiles()
80-
}
81-
}
82-
}
85+
searchEngine.addOnIndexChangeListener(onIndexChangeListener)
8386

84-
private fun downloadTiles() {
8587
val tileRegionLoadOptions = TileRegionLoadOptions
8688
.Builder()
8789
.descriptors(descriptors)
@@ -93,14 +95,13 @@ class OfflineEvSearchKotlinExampleActivity : BaseKotlinExampleActivity() {
9395
tileRegionId,
9496
tileRegionLoadOptions,
9597
{ progress ->
96-
logI("SearchApiExample", "Loading progress: $progress")
98+
printMessage("Loading progress: $progress")
9799
},
98100
{ result ->
99101
if (result.isValue) {
100-
logI("SearchApiExample", "Tiles successfully loaded: ${result.value}")
101-
startSearchDelayed()
102+
printMessage("Tiles successfully loaded: ${result.value}")
102103
} else {
103-
logI("SearchApiExample", "Tiles loading error: ${result.error}")
104+
printMessage("Tiles loading error: ${result.error}")
104105
}
105106
}
106107
)
@@ -133,16 +134,8 @@ class OfflineEvSearchKotlinExampleActivity : BaseKotlinExampleActivity() {
133134
)
134135
}
135136

136-
private fun startSearchDelayed() {
137-
// Workaround for an issue with OnIndexChangeListener
138-
// Allow time for the OfflineSearchEngine to initialize the downloaded tiles
139-
Handler(Looper.getMainLooper()).postDelayed(
140-
::startSearch,
141-
TimeUnit.SECONDS.toMillis(1)
142-
)
143-
}
144-
145137
override fun onDestroy() {
138+
searchEngine.removeOnIndexChangeListener(onIndexChangeListener)
146139
tilesLoadingTask?.cancel()
147140
searchRequestTask?.cancel()
148141
super.onDestroy()

MapboxSearch/sample/src/main/res/layout/activity_code_example.xml

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
/>
2929

3030
<ScrollView
31+
android:id="@+id/logTextScroll"
3132
android:layout_width="0dp"
3233
android:layout_height="0dp"
3334
android:layout_marginVertical="16dp"

0 commit comments

Comments
 (0)