Skip to content

Commit

Permalink
Explicit Api Type; Query for Autofill; SDK release (#63)
Browse files Browse the repository at this point in the history
* Query type for Autofill

* Explicit Api Type

* Japan Search Examples

* Bump Search SDK version to 1.0.0-beta.34
  • Loading branch information
DzmitryFomchyn authored Jul 14, 2022
1 parent 2091664 commit 937c32d
Show file tree
Hide file tree
Showing 25 changed files with 446 additions and 36 deletions.
9 changes: 8 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# Changelog for the Mapbox Search SDK for Android

## 1.0.0-beta.34-SNAPSHOT
## 1.0.0-beta.34

### Breaking changes
- [CORE] Undocumented system property used to enable SBS API Type is deprecated. Use `MapboxSearchSdk.createSearchEngine(ApiType, SearchEngineSettings)`, and `MapboxSearchSdk.createSearchEngineWithBuiltInDataProviders(ApiType, SearchEngineSettings)` instead. Note that SBS Api Type is still in beta and not available publicly.
- [AUTOFILL] `AddressAutofill.suggestions(String, AddressAutofillOptions)` has been replaced with `AddressAutofill.suggestions(Query, AddressAutofillOptions)`. Call `Query.create()` to create an instance of `Query`.

### New features
- [CORE] `MapboxSearchSdk.createSearchEngine(ApiType, SearchEngineSettings)`, and `MapboxSearchSdk.createSearchEngineWithBuiltInDataProviders(ApiType, SearchEngineSettings)` functions are available that allow to choose API Type. Note that `ApiType.GEOCODING` is the only API Type available publicly.

### Mapbox dependencies
- Search Native SDK `0.57.0`
Expand Down
9 changes: 8 additions & 1 deletion MapboxSearch/autofill/api/api-metalava.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.mapbox.search.autofill {

public interface AddressAutofill {
method public suspend Object? suggestions(com.mapbox.geojson.Point point, com.mapbox.search.autofill.AddressAutofillOptions options, kotlin.coroutines.Continuation<? super com.mapbox.search.autofill.AddressAutofillResponse> p);
method public suspend Object? suggestions(String query, com.mapbox.search.autofill.AddressAutofillOptions options, kotlin.coroutines.Continuation<? super com.mapbox.search.autofill.AddressAutofillResponse> p);
method public suspend Object? suggestions(com.mapbox.search.autofill.Query query, com.mapbox.search.autofill.AddressAutofillOptions options, kotlin.coroutines.Continuation<? super com.mapbox.search.autofill.AddressAutofillResponse> p);
}

@kotlinx.parcelize.Parcelize public final class AddressAutofillOptions implements android.os.Parcelable {
Expand Down Expand Up @@ -78,6 +78,13 @@ package com.mapbox.search.autofill {
property public final String? street;
}

public final class Query {
method public static com.mapbox.search.autofill.Query? create(String query);
method public String getQuery();
property public final String query;
field public static final int MIN_QUERY_LENGTH = 3; // 0x3
}

}

package com.mapbox.search.autofill.ktx {
Expand Down
16 changes: 15 additions & 1 deletion MapboxSearch/autofill/api/autofill.api
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
public abstract interface class com/mapbox/search/autofill/AddressAutofill {
public static final field Companion Lcom/mapbox/search/autofill/AddressAutofill$Companion;
public abstract fun suggestions (Lcom/mapbox/geojson/Point;Lcom/mapbox/search/autofill/AddressAutofillOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun suggestions (Ljava/lang/String;Lcom/mapbox/search/autofill/AddressAutofillOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun suggestions (Lcom/mapbox/search/autofill/Query;Lcom/mapbox/search/autofill/AddressAutofillOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public final class com/mapbox/search/autofill/AddressAutofill$Companion {
Expand Down Expand Up @@ -119,3 +119,17 @@ public final class com/mapbox/search/autofill/BuildConfig {
public fun <init> ()V
}

public final class com/mapbox/search/autofill/Query {
public static final field Companion Lcom/mapbox/search/autofill/Query$Companion;
public static final field MIN_QUERY_LENGTH I
public static final fun create (Ljava/lang/String;)Lcom/mapbox/search/autofill/Query;
public fun equals (Ljava/lang/Object;)Z
public final fun getQuery ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class com/mapbox/search/autofill/Query$Companion {
public final fun create (Ljava/lang/String;)Lcom/mapbox/search/autofill/Query;
}

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mapbox.search.autofill

import com.mapbox.geojson.Point
import com.mapbox.search.ApiType
import com.mapbox.search.MapboxSearchSdk
import com.mapbox.search.SearchEngineSettings

Expand Down Expand Up @@ -29,7 +30,7 @@ public interface AddressAutofill {
* @return Result of the search request represented by [AddressAutofillResponse].
*/
public suspend fun suggestions(
query: String,
query: Query,
options: AddressAutofillOptions
): AddressAutofillResponse

Expand All @@ -48,7 +49,7 @@ public interface AddressAutofill {
public fun create(accessToken: String): AddressAutofill {
val settings = SearchEngineSettings(accessToken)
return AddressAutofillImpl(
MapboxSearchSdk.internalCreateAutofillSearchEngine(settings)
MapboxSearchSdk.createSearchEngine(ApiType.AUTOFILL, settings)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ internal class AddressAutofillImpl(private val searchEngine: SearchEngine) : Add
}
}

override suspend fun suggestions(query: String, options: AddressAutofillOptions): AddressAutofillResponse {
override suspend fun suggestions(query: Query, options: AddressAutofillOptions): AddressAutofillResponse {
val response = searchEngine.search(
query = query,
query = query.query,
options = SearchOptions(
countries = options.countries?.map { it.toCoreSdkType() },
languages = options.language?.let { listOf(it.toCoreSdkType()) },
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.mapbox.search.autofill

/**
* Text query used for autofill forward geocoding.
*/
public class Query internal constructor(

/**
* Query text.
*/
public val query: String
) {

init {
if (query.length < MIN_QUERY_LENGTH) {
throw IllegalArgumentException("Query must be at least $MIN_QUERY_LENGTH characters long")
}
}

/**
* @suppress
*/
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as Query

if (query != other.query) return false

return true
}

/**
* @suppress
*/
override fun hashCode(): Int {
return query.hashCode()
}

/**
* @suppress
*/
override fun toString(): String {
return "Query(query='$query')"
}

/**
* @suppress
*/
public companion object {

/**
* Minimal allowed query length for address autofill.
*/
public const val MIN_QUERY_LENGTH: Int = 3

/**
* Creates [Query] instance.
* @param query Query text.
* @return [Query] instance or `null` if [query]'s length is less than [MIN_QUERY_LENGTH].
*/
@JvmStatic
public fun create(query: String): Query? {
return when {
query.length >= MIN_QUERY_LENGTH -> Query(query)
else -> null
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.mapbox.search.autofill

import com.mapbox.search.common.tests.ToStringVerifier
import com.mapbox.test.dsl.TestCase
import nl.jqno.equalsverifier.EqualsVerifier
import org.junit.jupiter.api.TestFactory

internal class QueryTest {

@TestFactory
fun `Check Query's min length`() = TestCase {
Given("${Query::class.java.simpleName} class") {
When("MIN_QUERY_LENGTH accessed") {
Then("MIN_QUERY_LENGTH should be 3", 3, Query.MIN_QUERY_LENGTH)
}
}
}

@TestFactory
fun `Check Query's create() function`() = TestCase {
Given("${Query::class.java.simpleName} class") {
(0..Query.MIN_QUERY_LENGTH)
.map { length -> "a".repeat(length) }
.forEach { query ->
When("create($query) called") {
val value = if (query.length < 3) {
null
} else {
Query(query)
}
Then("Created value should be $value", value, Query.create(query))
}
}
}
}

@TestFactory
fun `Check Query's equals() and hashCode()`() = TestCase {
Given("${Query::class.java.simpleName} class") {
When("Call equals() and hashCode()") {
Then("equals() and hashCode() should be implemented correctly") {
EqualsVerifier.forClass(Query::class.java).verify()
}
}
}
}

@TestFactory
fun `Check Query's toString()`() = TestCase {
Given("${Query::class.java.simpleName} class") {
When("Call toString()") {
Then("toString() function should be implemented correctly") {
ToStringVerifier(clazz = Query::class).verify()
}
}
}
}
}
2 changes: 1 addition & 1 deletion MapboxSearch/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ android.enableJetifier=false
kotlin.code.style=official

# SDK version attributes
VERSION_NAME=1.0.0-beta.34-SNAPSHOT
VERSION_NAME=1.0.0-beta.34

# Artifact attributes
mapboxArtifactUserOrg=mapbox
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import com.mapbox.search.sample.api.ForwardGeocodingJavaExampleActivity
import com.mapbox.search.sample.api.ForwardGeocodingKotlinExampleActivity
import com.mapbox.search.sample.api.HistoryDataProviderJavaExample
import com.mapbox.search.sample.api.HistoryDataProviderKotlinExample
import com.mapbox.search.sample.api.JapanSearchJavaExampleActivity
import com.mapbox.search.sample.api.JapanSearchKotlinExampleActivity
import com.mapbox.search.sample.api.OfflineReverseGeocodingJavaExampleActivity
import com.mapbox.search.sample.api.OfflineReverseGeocodingKotlinExampleActivity
import com.mapbox.search.sample.api.OfflineSearchJavaExampleActivity
Expand Down Expand Up @@ -78,6 +80,9 @@ class ExampleActivitiesTest(private val clazz: Class<out Activity>) {
OfflineReverseGeocodingKotlinExampleActivity::class.java,
OfflineReverseGeocodingJavaExampleActivity::class.java,

JapanSearchKotlinExampleActivity::class.java,
JapanSearchJavaExampleActivity::class.java,

HistoryDataProviderKotlinExample::class.java,
HistoryDataProviderJavaExample::class.java,

Expand Down
2 changes: 2 additions & 0 deletions MapboxSearch/sample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@
<activity android:name=".api.FavoritesDataProviderKotlinExample" />
<activity android:name=".api.FavoritesDataProviderJavaExample" />
<activity android:name=".api.AddressAutofillKotlinExampleActivity" />
<activity android:name=".api.JapanSearchJavaExampleActivity" />
<activity android:name=".api.JapanSearchKotlinExampleActivity" />

</application>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import com.mapbox.maps.extension.style.sources.generated.GeoJsonSource
import com.mapbox.maps.extension.style.sources.generated.geoJsonSource
import com.mapbox.maps.extension.style.sources.getSourceAs
import com.mapbox.maps.extension.style.style
import com.mapbox.search.ApiType
import com.mapbox.search.MapboxSearchSdk
import com.mapbox.search.OfflineSearchEngineSettings
import com.mapbox.search.ResponseInfo
Expand All @@ -62,6 +63,8 @@ import com.mapbox.search.sample.api.ForwardGeocodingJavaExampleActivity
import com.mapbox.search.sample.api.ForwardGeocodingKotlinExampleActivity
import com.mapbox.search.sample.api.HistoryDataProviderJavaExample
import com.mapbox.search.sample.api.HistoryDataProviderKotlinExample
import com.mapbox.search.sample.api.JapanSearchJavaExampleActivity
import com.mapbox.search.sample.api.JapanSearchKotlinExampleActivity
import com.mapbox.search.sample.api.OfflineReverseGeocodingJavaExampleActivity
import com.mapbox.search.sample.api.OfflineReverseGeocodingKotlinExampleActivity
import com.mapbox.search.sample.api.OfflineSearchJavaExampleActivity
Expand Down Expand Up @@ -127,11 +130,18 @@ class MainActivity : AppCompatActivity() {
}

searchResultsView = findViewById<SearchResultsView>(R.id.search_results_view).apply {
val apiType = if (BuildConfig.ENABLE_SBS) {
ApiType.SBS
} else {
ApiType.GEOCODING
}

initialize(
SearchResultsView.Configuration(
commonConfiguration = CommonSearchViewConfiguration(DistanceUnitType.IMPERIAL),
searchEngineSettings = SearchEngineSettings(BuildConfig.MAPBOX_API_TOKEN),
offlineSearchEngineSettings = OfflineSearchEngineSettings(BuildConfig.MAPBOX_API_TOKEN)
offlineSearchEngineSettings = OfflineSearchEngineSettings(BuildConfig.MAPBOX_API_TOKEN),
apiType = apiType,
)
)
isVisible = false
Expand Down Expand Up @@ -320,6 +330,14 @@ class MainActivity : AppCompatActivity() {
startActivity(Intent(this, ReverseGeocodingJavaExampleActivity::class.java))
true
}
R.id.open_japan_search_kt_example -> {
startActivity(Intent(this, JapanSearchKotlinExampleActivity::class.java))
true
}
R.id.open_japan_search_java_example -> {
startActivity(Intent(this, JapanSearchJavaExampleActivity::class.java))
true
}
R.id.open_category_search_kt_example -> {
startActivity(Intent(this, CategorySearchKotlinExampleActivity::class.java))
true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ open class SampleApplication : Application() {
override fun onCreate() {
super.onCreate()

System.setProperty("com.mapbox.mapboxsearch.enableSBS", BuildConfig.ENABLE_SBS.toString())
enableDebugHttpLogs()
enableStrictMode()
LeakCanaryConfiguration.apply()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.lifecycle.lifecycleScope
import com.mapbox.search.autofill.AddressAutofill
import com.mapbox.search.autofill.AddressAutofillOptions
import com.mapbox.search.autofill.AddressAutofillResponse
import com.mapbox.search.autofill.Query
import com.mapbox.search.sample.BuildConfig

class AddressAutofillKotlinExampleActivity : AppCompatActivity() {
Expand All @@ -21,8 +22,10 @@ class AddressAutofillKotlinExampleActivity : AppCompatActivity() {
)

lifecycleScope.launchWhenCreated {
val query = Query.create("740 15th St NW, Washington") ?: return@launchWhenCreated

val response = addressAutofill.suggestions(
query = "740 15th St NW, Washington",
query = query,
options = AddressAutofillOptions()
)

Expand Down
Loading

0 comments on commit 937c32d

Please sign in to comment.