Skip to content

Commit

Permalink
Merge pull request #302 from mapbox/df-2.6-patch
Browse files Browse the repository at this point in the history
New options for category search; Bugfix; Search SDK patch release
  • Loading branch information
DzmitryFomchyn authored Dec 10, 2024
2 parents 03892bc + 194def3 commit 7e9c960
Show file tree
Hide file tree
Showing 23 changed files with 461 additions and 99 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Changelog for the Mapbox Search SDK for Android

## 2.6.3

### New features
- Added new function to search for multiple categories, e.g., `SearchEngine.search(listOf("coffee_shop", "hotel"), ...)`,
- New option `CategorySearchOptions.ensureResultsPerCategory` is available. It allows to request category search results to include at least one POI for each category, provided a POI is available in a nearby location.
- New option `CategorySearchOptions.attributeSets` is available. It allows to request additional metadata attributes besides the basic ones.

### Bug fixes
- Fixed photos metadata parsing for the `ApiType.SEARCH_BOX`.

### Mapbox dependencies
- Search Native SDK `2.6.3`
- Common SDK `24.8.0`



## 2.6.2

### New features
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mapbox.search.base.core

import com.mapbox.geojson.Point
import com.mapbox.search.internal.bindgen.AttributeSet
import com.mapbox.search.internal.bindgen.LonLatBBox
import com.mapbox.search.internal.bindgen.QueryType
import com.mapbox.search.internal.bindgen.ReverseGeoOptions
Expand All @@ -25,24 +26,28 @@ fun createCoreSearchOptions(
sarType: String? = null,
timeDeviation: Double? = null,
addonAPI: Map<String, String>? = null,
ensureResultsPerCategory: Boolean? = null,
attributeSets: List<AttributeSet>? = null,
): CoreSearchOptions = CoreSearchOptions(
proximity,
origin,
navProfile,
etaType,
bbox,
countries,
fuzzyMatch,
language,
limit,
types,
ignoreUR,
urDistanceThreshold,
requestDebounce,
route,
sarType,
timeDeviation,
addonAPI?.let { it as? HashMap<String, String> ?: HashMap(it) }
proximity = proximity,
origin = origin,
navProfile = navProfile,
etaType = etaType,
bbox = bbox,
countries = countries,
fuzzyMatch = fuzzyMatch,
language = language,
limit = limit,
types = types,
ignoreUR = ignoreUR,
urDistanceThreshold = urDistanceThreshold,
requestDebounce = requestDebounce,
route = route,
sarType = sarType,
timeDeviation = timeDeviation,
addonAPI = addonAPI?.let { it as? HashMap<String, String> ?: HashMap(it) },
ensureResultsPerCategory = ensureResultsPerCategory,
attributeSets = attributeSets,
)

fun createCoreReverseGeoOptions(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.mapbox.search.common.tests

import com.mapbox.bindgen.ExpectedFactory
import com.mapbox.geojson.Point
import com.mapbox.search.internal.bindgen.AttributeSet
import com.mapbox.search.internal.bindgen.ConnectionError
import com.mapbox.search.internal.bindgen.HttpError
import com.mapbox.search.internal.bindgen.ImageInfo
Expand Down Expand Up @@ -47,6 +48,8 @@ fun createTestCoreSearchOptions(
sarType: String? = null,
timeDeviation: Double? = null,
addonAPI: Map<String, String>? = null,
ensureResultsPerCategory: Boolean? = null,
attributeSets: List<AttributeSet>? = null,
): SearchOptions = SearchOptions(
proximity,
origin,
Expand All @@ -64,7 +67,9 @@ fun createTestCoreSearchOptions(
route,
sarType,
timeDeviation,
addonAPI?.let { it as? HashMap<String, String> ?: HashMap(it) }
addonAPI?.let { it as? HashMap<String, String> ?: HashMap(it) },
ensureResultsPerCategory,
attributeSets,
)

@Suppress("LongParameterList")
Expand Down
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=2.6.2
VERSION_NAME=2.6.3

# Artifact attributes
mapboxArtifactUserOrg=mapbox
Expand Down
4 changes: 2 additions & 2 deletions MapboxSearch/gradle/versions.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ ext {

pitest_version = '1.6.7'

mapbox_maps_version = '11.8.0-rc.1'
mapbox_maps_version = '11.8.0'
mapbox_turf_version = '6.15.0'

common_sdk_version = '24.8.0'
mapbox_base_version = '0.8.0'

search_native_version = '2.6.2'
search_native_version = '2.6.3'

detekt_version = '1.19.0'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,4 +154,6 @@ internal fun OfflineSearchOptions.mapToCore(): CoreSearchOptions = CoreSearchOpt
null,
null,
null,
null,
null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@
import androidx.appcompat.app.AppCompatActivity;

import com.mapbox.search.ApiType;
import com.mapbox.search.AttributeSet;
import com.mapbox.search.CategorySearchOptions;
import com.mapbox.search.ResponseInfo;
import com.mapbox.search.SearchCallback;
import com.mapbox.search.SearchEngine;
import com.mapbox.search.SearchEngineSettings;
import com.mapbox.search.common.AsyncOperationTask;
import com.mapbox.search.result.SearchResult;
import com.mapbox.search.sample.BuildConfig;
import com.mapbox.search.sample.R;

import java.util.Arrays;
import java.util.List;

public class CategorySearchJavaExampleActivity extends AppCompatActivity {
Expand Down Expand Up @@ -51,10 +51,23 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
);

final CategorySearchOptions options = new CategorySearchOptions.Builder()
.limit(1)
.limit(10)
.ensureResultsPerCategory(true)
.attributeSets(
Arrays.asList(
AttributeSet.BASIC,
AttributeSet.VISIT,
AttributeSet.VENUE,
AttributeSet.PHOTOS
)
)
.build();

searchRequestTask = searchEngine.search("cafe", options, searchCallback);
searchRequestTask = searchEngine.search(
Arrays.asList("cafe", "coffee_shop", "hotel"),
options,
searchCallback
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.mapbox.search.sample.api

import android.os.Bundle
import com.mapbox.search.ApiType
import com.mapbox.search.AttributeSet
import com.mapbox.search.CategorySearchOptions
import com.mapbox.search.ResponseInfo
import com.mapbox.search.SearchCallback
Expand Down Expand Up @@ -48,8 +49,17 @@ class CategorySearchKotlinExampleActivity : BaseKotlinExampleActivity() {

override fun startExample() {
searchRequestTask = searchEngine.search(
"cafe",
CategorySearchOptions(limit = 1),
listOf("cafe", "coffee_shop", "hotel"),
CategorySearchOptions(
limit = 10,
ensureResultsPerCategory = true,
attributeSets = listOf(
AttributeSet.BASIC,
AttributeSet.VISIT,
AttributeSet.VENUE,
AttributeSet.PHOTOS,
),
),
searchCallback
)
}
Expand Down
12 changes: 11 additions & 1 deletion MapboxSearch/sdk/api/api-metalava.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ package com.mapbox.search {
}

@kotlinx.parcelize.Parcelize public final class CategorySearchOptions implements android.os.Parcelable {
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null, java.util.List<com.mapbox.search.common.IsoCountryCode>? countries = null, Boolean? fuzzyMatch = null, java.util.List<com.mapbox.search.common.IsoLanguageCode>? languages = defaultSearchOptionsLanguage(), Integer? limit = null, Integer? requestDebounce = null, com.mapbox.geojson.Point? origin = null, com.mapbox.search.common.NavigationProfile? navigationProfile = null, com.mapbox.search.RouteOptions? routeOptions = null, java.util.Map<java.lang.String,java.lang.String>? unsafeParameters = null, boolean ignoreIndexableRecords = false, Double? indexableRecordsDistanceThresholdMeters = null, Boolean? ensureResultsPerCategory = null, java.util.List<? extends com.mapbox.search.AttributeSet>? attributeSets = null);
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null, java.util.List<com.mapbox.search.common.IsoCountryCode>? countries = null, Boolean? fuzzyMatch = null, java.util.List<com.mapbox.search.common.IsoLanguageCode>? languages = defaultSearchOptionsLanguage(), Integer? limit = null, Integer? requestDebounce = null, com.mapbox.geojson.Point? origin = null, com.mapbox.search.common.NavigationProfile? navigationProfile = null, com.mapbox.search.RouteOptions? routeOptions = null, java.util.Map<java.lang.String,java.lang.String>? unsafeParameters = null, boolean ignoreIndexableRecords = false, Double? indexableRecordsDistanceThresholdMeters = null, Boolean? ensureResultsPerCategory = null);
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null, java.util.List<com.mapbox.search.common.IsoCountryCode>? countries = null, Boolean? fuzzyMatch = null, java.util.List<com.mapbox.search.common.IsoLanguageCode>? languages = defaultSearchOptionsLanguage(), Integer? limit = null, Integer? requestDebounce = null, com.mapbox.geojson.Point? origin = null, com.mapbox.search.common.NavigationProfile? navigationProfile = null, com.mapbox.search.RouteOptions? routeOptions = null, java.util.Map<java.lang.String,java.lang.String>? unsafeParameters = null, boolean ignoreIndexableRecords = false, Double? indexableRecordsDistanceThresholdMeters = null);
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null, java.util.List<com.mapbox.search.common.IsoCountryCode>? countries = null, Boolean? fuzzyMatch = null, java.util.List<com.mapbox.search.common.IsoLanguageCode>? languages = defaultSearchOptionsLanguage(), Integer? limit = null, Integer? requestDebounce = null, com.mapbox.geojson.Point? origin = null, com.mapbox.search.common.NavigationProfile? navigationProfile = null, com.mapbox.search.RouteOptions? routeOptions = null, java.util.Map<java.lang.String,java.lang.String>? unsafeParameters = null, boolean ignoreIndexableRecords = false);
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null, java.util.List<com.mapbox.search.common.IsoCountryCode>? countries = null, Boolean? fuzzyMatch = null, java.util.List<com.mapbox.search.common.IsoLanguageCode>? languages = defaultSearchOptionsLanguage(), Integer? limit = null, Integer? requestDebounce = null, com.mapbox.geojson.Point? origin = null, com.mapbox.search.common.NavigationProfile? navigationProfile = null, com.mapbox.search.RouteOptions? routeOptions = null, java.util.Map<java.lang.String,java.lang.String>? unsafeParameters = null);
Expand All @@ -34,8 +36,10 @@ package com.mapbox.search {
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null, java.util.List<com.mapbox.search.common.IsoCountryCode>? countries = null);
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null, com.mapbox.geojson.BoundingBox? boundingBox = null);
ctor public CategorySearchOptions(com.mapbox.geojson.Point? proximity = null);
method public java.util.List<com.mapbox.search.AttributeSet>? getAttributeSets();
method public com.mapbox.geojson.BoundingBox? getBoundingBox();
method public java.util.List<com.mapbox.search.common.IsoCountryCode>? getCountries();
method public Boolean? getEnsureResultsPerCategory();
method public Boolean? getFuzzyMatch();
method public boolean getIgnoreIndexableRecords();
method public Double? getIndexableRecordsDistanceThresholdMeters();
Expand All @@ -48,8 +52,10 @@ package com.mapbox.search {
method public com.mapbox.search.RouteOptions? getRouteOptions();
method public java.util.Map<java.lang.String,java.lang.String>? getUnsafeParameters();
method public com.mapbox.search.CategorySearchOptions.Builder toBuilder();
property public final java.util.List<com.mapbox.search.AttributeSet>? attributeSets;
property public final com.mapbox.geojson.BoundingBox? boundingBox;
property public final java.util.List<com.mapbox.search.common.IsoCountryCode>? countries;
property public final Boolean? ensureResultsPerCategory;
property public final Boolean? fuzzyMatch;
property public final boolean ignoreIndexableRecords;
property public final Double? indexableRecordsDistanceThresholdMeters;
Expand All @@ -65,10 +71,12 @@ package com.mapbox.search {

public static final class CategorySearchOptions.Builder {
ctor public CategorySearchOptions.Builder();
method public com.mapbox.search.CategorySearchOptions.Builder attributeSets(java.util.List<? extends com.mapbox.search.AttributeSet>? attributeSets);
method public com.mapbox.search.CategorySearchOptions.Builder boundingBox(com.mapbox.geojson.BoundingBox boundingBox);
method public com.mapbox.search.CategorySearchOptions build();
method public com.mapbox.search.CategorySearchOptions.Builder countries(com.mapbox.search.common.IsoCountryCode... countries);
method public com.mapbox.search.CategorySearchOptions.Builder countries(java.util.List<com.mapbox.search.common.IsoCountryCode> countries);
method public com.mapbox.search.CategorySearchOptions.Builder ensureResultsPerCategory(Boolean? ensureResultsPerCategory);
method public com.mapbox.search.CategorySearchOptions.Builder fuzzyMatch(boolean fuzzyMatch);
method public com.mapbox.search.CategorySearchOptions.Builder ignoreIndexableRecords(boolean ignoreIndexableRecords);
method public com.mapbox.search.CategorySearchOptions.Builder indexableRecordsDistanceThresholdMeters(Double? threshold);
Expand Down Expand Up @@ -291,8 +299,10 @@ package com.mapbox.search {
method public default com.mapbox.search.common.AsyncOperationTask retrieve(String mapboxId, com.mapbox.search.SearchResultCallback callback);
method public com.mapbox.search.common.AsyncOperationTask search(String query, com.mapbox.search.SearchOptions options, java.util.concurrent.Executor executor, com.mapbox.search.SearchSuggestionsCallback callback);
method public default com.mapbox.search.common.AsyncOperationTask search(String query, com.mapbox.search.SearchOptions options, com.mapbox.search.SearchSuggestionsCallback callback);
method public com.mapbox.search.common.AsyncOperationTask search(String categoryName, com.mapbox.search.CategorySearchOptions options, java.util.concurrent.Executor executor, com.mapbox.search.SearchCallback callback);
method public default com.mapbox.search.common.AsyncOperationTask search(String categoryName, com.mapbox.search.CategorySearchOptions options, java.util.concurrent.Executor executor, com.mapbox.search.SearchCallback callback);
method public default com.mapbox.search.common.AsyncOperationTask search(String categoryName, com.mapbox.search.CategorySearchOptions options, com.mapbox.search.SearchCallback callback);
method public com.mapbox.search.common.AsyncOperationTask search(java.util.List<java.lang.String> categoryNames, com.mapbox.search.CategorySearchOptions options, java.util.concurrent.Executor executor, com.mapbox.search.SearchCallback callback);
method public default com.mapbox.search.common.AsyncOperationTask search(java.util.List<java.lang.String> categoryNames, com.mapbox.search.CategorySearchOptions options, com.mapbox.search.SearchCallback callback);
method public com.mapbox.search.common.AsyncOperationTask search(com.mapbox.search.ReverseGeoOptions options, java.util.concurrent.Executor executor, com.mapbox.search.SearchCallback callback);
method public default com.mapbox.search.common.AsyncOperationTask search(com.mapbox.search.ReverseGeoOptions options, com.mapbox.search.SearchCallback callback);
method public default com.mapbox.search.common.AsyncOperationTask select(com.mapbox.search.result.SearchSuggestion suggestion, com.mapbox.search.SearchSelectionCallback callback);
Expand Down
Loading

0 comments on commit 7e9c960

Please sign in to comment.