Skip to content

Commit

Permalink
EV Offline Search; Search SDK 2.8.0-rc.1 (#309)
Browse files Browse the repository at this point in the history
* Dependencies bump

* Initial types declaration

* EvSearchOptions

* Metadata for offline search results

* Use Mapbox Common experimental annotation

* Bump dependencies versions

* EV Search Sample Activity

* Update changelog; Version bump

* Fix changelog dependencies

* Worldviews support
  • Loading branch information
DzmitryFomchyn authored Feb 1, 2025
1 parent 0b4c6f1 commit eafe8f3
Show file tree
Hide file tree
Showing 82 changed files with 4,519 additions and 399 deletions.
23 changes: 19 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog for the Mapbox Search SDK for Android

## 2.8.0-rc.1

### New features
- Added experimental support for the EV search in offline, see `OfflineSearchOptions.evSearchOptions` and `OfflineSearchResult.metadata`.
- Added experimental support for worldviews. Note that only selected worldviews are supported. To specify worldview, create Tileset Descriptor with required language and worldview, for example, `OfflineSearchEngine.createTilesetDescriptor(language = IsoLanguageCode.ENGLISH, worldview = IsoCountryCode.MOROCCO)`.

### Experimental API breaking changes
- Annotation `ExperimentalMapboxSearchAPI` has been replaced with Mapbox common annotation `MapboxExperimental`.

### Known issues
- `OfflineSearchEngine.OnIndexChangeListener` is not called when expected. Workaround is to listen for `TileStore.loadTileRegion` `onFinish` event and allow some time (few seconds) for the `OfflineSearchEngine` to initialize the downloaded tiles.

### Mapbox dependencies
- Search Native SDK `2.8.0-rc.1`
- Common SDK `24.10.0-rc.1`



## 2.8.0-beta.1

### New features
Expand All @@ -11,12 +29,9 @@
### Other
- `SearchOptions.routeOptions` has been deprecated as not supported for the forward geocoding.


### New features

### Mapbox dependencies
- Search Native SDK `2.8.0-beta.2`
- Common SDK `24.10.0-beta.`
- Common SDK `24.10.0-beta.2`



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package com.mapbox.search.autofill

import com.mapbox.search.base.core.countryIso1
import com.mapbox.search.base.core.countryIso2
import com.mapbox.search.base.core.createCoreResultMetadata
import com.mapbox.search.base.result.BaseSearchAddress
import com.mapbox.search.common.tests.CommonSdkTypeObjectCreators
import com.mapbox.search.common.tests.ReflectionObjectsFactory
import com.mapbox.search.common.tests.ToStringVerifier
import com.mapbox.search.common.tests.createTestResultMetadata
import com.mapbox.search.common.tests.withPrefabTestBoundingBox
import com.mapbox.search.common.tests.withPrefabTestPoint
import io.mockk.every
Expand All @@ -33,7 +33,7 @@ internal class AddressComponentsTest {
country = "France"
)

val coreMetadata = createTestResultMetadata(
val coreMetadata = createCoreResultMetadata(
data = hashMapOf("iso_3166_1" to "fra", "iso_3166_2" to "fr")
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.mapbox.search.autofill

import com.mapbox.geojson.Point
import com.mapbox.search.base.core.createCoreResultMetadata
import com.mapbox.search.base.result.BaseSearchAddress
import com.mapbox.search.common.tests.CustomTypeObjectCreatorImpl
import com.mapbox.search.common.tests.createTestResultMetadata

internal object TypeObjectCreator {

Expand All @@ -20,7 +20,7 @@ internal object TypeObjectCreator {
country = "France"
)

val coreMetadata = createTestResultMetadata(
val coreMetadata = createCoreResultMetadata(
data = hashMapOf("iso_3166_1" to "fra", "iso_3166_2" to "fr")
)

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
@file:OptIn(MapboxExperimental::class)

package com.mapbox.search.base

import com.mapbox.annotation.MapboxExperimental
import com.mapbox.search.base.core.CoreChildMetadata
import com.mapbox.search.base.core.CoreImageInfo
import com.mapbox.search.base.core.CoreOpenHours
import com.mapbox.search.base.core.CoreOpenMode
import com.mapbox.search.base.core.CoreOpenPeriod
import com.mapbox.search.base.core.CoreParkingData
import com.mapbox.search.base.core.createCoreOpenHours
import com.mapbox.search.base.utils.printableName
import com.mapbox.search.common.metadata.ChildMetadata
import com.mapbox.search.common.metadata.ImageInfo
import com.mapbox.search.common.metadata.OpenHours
import com.mapbox.search.common.metadata.OpenPeriod
import com.mapbox.search.common.metadata.ParkingData
Expand All @@ -33,14 +35,14 @@ fun CoreOpenHours.mapToPlatform(): OpenHours? = when (mode) {
}

fun OpenHours.mapToCore() = when (this) {
OpenHours.AlwaysOpen -> CoreOpenHours(CoreOpenMode.ALWAYS_OPEN, emptyList(), null, null)
OpenHours.TemporaryClosed -> CoreOpenHours(CoreOpenMode.TEMPORARILY_CLOSED, emptyList(), null, null)
OpenHours.PermanentlyClosed -> CoreOpenHours(CoreOpenMode.PERMANENTLY_CLOSED, emptyList(), null, null)
is OpenHours.Scheduled -> CoreOpenHours(
OpenHours.AlwaysOpen -> createCoreOpenHours(CoreOpenMode.ALWAYS_OPEN, emptyList())
OpenHours.TemporaryClosed -> createCoreOpenHours(CoreOpenMode.TEMPORARILY_CLOSED, emptyList())
OpenHours.PermanentlyClosed -> createCoreOpenHours(CoreOpenMode.PERMANENTLY_CLOSED, emptyList())
is OpenHours.Scheduled -> createCoreOpenHours(
CoreOpenMode.SCHEDULED,
periods.map { it.mapToCore() },
weekdayText,
note
note,
)
else -> error("Unknown OpenHours subclass: ${javaClass.printableName}.")
}
Expand Down Expand Up @@ -91,15 +93,3 @@ fun weekDayFromCore(dayCode: Byte): WeekDay {
return WeekDay.values().firstOrNull { it.internalRawCode == dayCode }
?: throw IllegalArgumentException("Unknown day code (=$dayCode) from Core SDK.")
}

fun CoreImageInfo.mapToPlatform(): ImageInfo = ImageInfo(
url = url,
width = width,
height = height
)

fun ImageInfo.mapToCore(): CoreImageInfo = CoreImageInfo(
url,
width,
height
)
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,28 @@ typealias CoreSearchResponseErrorType = com.mapbox.search.internal.bindgen.Error
typealias CoreChildMetadata = com.mapbox.search.internal.bindgen.ResultChildMetadata
typealias CoreAttributeSet = com.mapbox.search.internal.bindgen.AttributeSet
typealias CoreRetrieveOptions = com.mapbox.search.internal.bindgen.RetrieveOptions
typealias CoreEvseTokenType = com.mapbox.search.internal.bindgen.EvseTokenType
typealias CoreEvsePublishTokenType = com.mapbox.search.internal.bindgen.EvsePublishTokenType
typealias CoreDisplayText = com.mapbox.search.internal.bindgen.DisplayText
typealias CoreAdditionalCpoGeoLocation = com.mapbox.search.internal.bindgen.AdditionalCpoGeoLocation
typealias CoreChargingStatusSchedule = com.mapbox.search.internal.bindgen.ChargingStatusSchedule
typealias CoreBusinessDetails = com.mapbox.search.internal.bindgen.BusinessDetails
typealias CoreConnector = com.mapbox.search.internal.bindgen.Connector
typealias CoreConnectorFormat = com.mapbox.search.internal.bindgen.ConnectorFormat
typealias CoreConnectorType = com.mapbox.search.internal.bindgen.ConnectorType
typealias CoreEnergyMix = com.mapbox.search.internal.bindgen.EnergyMix
typealias CoreEnergySource = com.mapbox.search.internal.bindgen.EnergySource
typealias CoreEnergySourceCategory = com.mapbox.search.internal.bindgen.EnergySourceCategory
typealias CoreEnvironmentalImpact = com.mapbox.search.internal.bindgen.EnvironmentalImpact
typealias CoreEnvironmentalImpactCategory = com.mapbox.search.internal.bindgen.EnvironmentalImpactCategory
typealias CoreFacility = com.mapbox.search.internal.bindgen.Facility
typealias CoreEvLocation = com.mapbox.search.internal.bindgen.EvLocation
typealias CoreParkingRestriction = com.mapbox.search.internal.bindgen.ParkingRestriction
typealias CoreParkingType = com.mapbox.search.internal.bindgen.ParkingType
typealias CorePowerType = com.mapbox.search.internal.bindgen.PowerType
typealias CoreEVSE = com.mapbox.search.internal.bindgen.EVSE
typealias CoreEvseCapability = com.mapbox.search.internal.bindgen.EvseCapability
typealias CoreChargingStatus = com.mapbox.search.internal.bindgen.ChargingStatus
typealias CoreImageCategory = com.mapbox.search.internal.bindgen.ImageCategory
typealias CoreEvMetadata = com.mapbox.search.internal.bindgen.EvMetadata
typealias CoreEvSearchOptions = com.mapbox.search.internal.bindgen.EvSearchOptions
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package com.mapbox.search.base.core

import com.mapbox.geojson.Point
import com.mapbox.search.internal.bindgen.AttributeSet
import com.mapbox.search.internal.bindgen.EvSearchOptions
import com.mapbox.search.internal.bindgen.ExceptionalPeriod
import com.mapbox.search.internal.bindgen.LonLatBBox
import com.mapbox.search.internal.bindgen.OpenMode
import com.mapbox.search.internal.bindgen.OpenPeriod
import com.mapbox.search.internal.bindgen.QueryType
import com.mapbox.search.internal.bindgen.ReverseGeoOptions
import com.mapbox.search.internal.bindgen.ReverseMode
import java.util.HashMap

fun createCoreSearchOptions(
proximity: Point? = null,
Expand All @@ -29,6 +32,7 @@ fun createCoreSearchOptions(
offlineSearchPlacesOutsideBbox: Boolean = false,
ensureResultsPerCategory: Boolean? = null,
attributeSets: List<AttributeSet>? = null,
evSearchOptions: EvSearchOptions? = null,
): CoreSearchOptions = CoreSearchOptions(
proximity = proximity,
origin = origin,
Expand All @@ -50,6 +54,7 @@ fun createCoreSearchOptions(
offlineSearchPlacesOutsideBbox = offlineSearchPlacesOutsideBbox,
ensureResultsPerCategory = ensureResultsPerCategory,
attributeSets = attributeSets,
evSearchOptions = evSearchOptions,
)

fun createCoreReverseGeoOptions(
Expand Down Expand Up @@ -80,14 +85,15 @@ fun createCoreResultMetadata(
cpsJson: String? = null,
parking: CoreParkingData? = null,
children: List<CoreChildMetadata>? = null,
data: HashMap<String, String>,
data: HashMap<String, String> = hashMapOf(),
wheelchairAccessible: Boolean? = null,
delivery: Boolean? = null,
driveThrough: Boolean? = null,
reservable: Boolean? = null,
parkingAvailable: Boolean? = null,
valetParking: Boolean? = null,
streetParking: Boolean? = null,
parkingType: CoreParkingType? = null,
servesBreakfast: Boolean? = null,
servesBrunch: Boolean? = null,
servesDinner: Boolean? = null,
Expand All @@ -105,41 +111,82 @@ fun createCoreResultMetadata(
servesVegetarian: Boolean? = null,
rating: Float? = null,
popularity: Float? = null,
evMetadata: CoreEvMetadata? = null,
directions: List<CoreDisplayText>? = null,
facilities: List<CoreFacility>? = null,
timezone: String? = null,
lastUpdated: String? = null,
): CoreResultMetadata = CoreResultMetadata(
reviewCount,
phone,
website,
avRating,
description,
openHours,
primaryPhoto,
otherPhoto,
cpsJson,
parking,
children,
data,
wheelchairAccessible,
delivery,
driveThrough,
reservable,
parkingAvailable,
valetParking,
streetParking,
servesBreakfast,
servesBrunch,
servesDinner,
servesLunch,
servesWine,
servesBeer,
takeout,
facebookId,
fax,
email,
instagram,
twitter,
priceLevel,
servesVegan,
servesVegetarian,
rating,
popularity,
reviewCount = reviewCount,
phone = phone,
website = website,
avRating = avRating,
description = description,
openHours = openHours,
primaryPhoto = primaryPhoto,
otherPhoto = otherPhoto,
cpsJson = cpsJson,
parking = parking,
children = children,
data = data,
wheelchairAccessible = wheelchairAccessible,
delivery = delivery,
driveThrough = driveThrough,
reservable = reservable,
parkingAvailable = parkingAvailable,
valetParking = valetParking,
streetParking = streetParking,
parkingType = parkingType,
servesBreakfast = servesBreakfast,
servesBrunch = servesBrunch,
servesDinner = servesDinner,
servesLunch = servesLunch,
servesWine = servesWine,
servesBeer = servesBeer,
takeout = takeout,
facebookId = facebookId,
fax = fax,
email = email,
instagram = instagram,
twitter = twitter,
priceLevel = priceLevel,
servesVegan = servesVegan,
servesVegetarian = servesVegetarian,
rating = rating,
popularity = popularity,
evMetadata = evMetadata,
directions = directions,
facilities = facilities,
timezone = timezone,
lastUpdated = lastUpdated,
)

fun createCoreOpenHours(
mode: OpenMode,
periods: List<OpenPeriod>,
weekdayText: List<String>? = null,
note: String? = null,
exceptionalOpenings: List<ExceptionalPeriod> = emptyList(),
exceptionalClosings: List<ExceptionalPeriod> = emptyList(),
): CoreOpenHours = CoreOpenHours(
mode = mode,
periods = periods,
weekdayText = weekdayText,
note = note,
exceptionalOpenings = exceptionalOpenings,
exceptionalClosings = exceptionalClosings,
)

fun createCoreEvSearchOptions(
connectorTypes: List<CoreConnectorType>? = null,
operators: List<String>? = null,
minChargingPower: Float? = null,
maxChargingPower: Float? = null,
availability: CoreChargingStatus? = null,
): CoreEvSearchOptions = CoreEvSearchOptions(
connectorTypes = connectorTypes,
operators = operators,
minChargingPower = minChargingPower,
maxChargingPower = maxChargingPower,
availability = availability,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
@file:OptIn(MapboxExperimental::class)

package com.mapbox.search.base.factory

import androidx.annotation.RestrictTo
import com.mapbox.annotation.MapboxExperimental
import com.mapbox.search.base.core.CoreBusinessDetails
import com.mapbox.search.base.mapToPlatform
import com.mapbox.search.common.BusinessDetails

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
fun CoreBusinessDetails.mapToPlatform(): BusinessDetails {
return BusinessDetails(
name = name,
website = website,
logo = logo?.mapToPlatform(),
)
}
Loading

0 comments on commit eafe8f3

Please sign in to comment.