Skip to content

Commit 8b42b2b

Browse files
IntDef for SensorData.Weather.Condition
1 parent 39e5769 commit 8b42b2b

File tree

7 files changed

+253
-181
lines changed

7 files changed

+253
-181
lines changed

libnavigation-core/api/current.txt

Lines changed: 166 additions & 117 deletions
Large diffs are not rendered by default.

libnavigation-core/src/main/java/com/mapbox/navigation/core/adasis/AdasisSpeedLimitRestriction.kt

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@ package com.mapbox.navigation.core.adasis
22

33
import androidx.annotation.IntDef
44
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
5-
import com.mapbox.navigation.core.adasis.AdasisSpeedLimitInfo.SpeedLimitType
65
import com.mapbox.navigation.core.sensor.SensorData
76

87
/**
98
* Speed limit restriction
109
*
11-
* @param weather Weather conditions where the speed limit is applied. Empty means all
10+
* @param weatherConditionTypes A list of [SensorData.Weather.ConditionType] types where the speed limit is applied. Empty means all
1211
* @param dateTimeCondition OSM "opening_hours" format, see https://wiki.openstreetmap.org/wiki/Key:opening_hours
1312
* @param vehicleTypes A list of [VehicleType.Type] types for that the speed limit is included. Empty means all
1413
* @param lanes Lane numbers where the speed limit is valid. Empty array means all lanes
1514
*/
1615
@ExperimentalPreviewMapboxNavigationAPI
1716
class AdasisSpeedLimitRestriction private constructor(
18-
val weather: List<SensorData.Weather.Condition>,
17+
val weatherConditionTypes: List<Int>,
1918
val dateTimeCondition: String,
2019
val vehicleTypes: List<Int>,
2120
val lanes: List<Byte>
@@ -30,7 +29,7 @@ class AdasisSpeedLimitRestriction private constructor(
3029

3130
other as AdasisSpeedLimitRestriction
3231

33-
if (weather != other.weather) return false
32+
if (weatherConditionTypes != other.weatherConditionTypes) return false
3433
if (dateTimeCondition != other.dateTimeCondition) return false
3534
if (vehicleTypes != other.vehicleTypes) return false
3635
return lanes == other.lanes
@@ -40,7 +39,7 @@ class AdasisSpeedLimitRestriction private constructor(
4039
* Returns a hash code value for the object.
4140
*/
4241
override fun hashCode(): Int {
43-
var result = weather.hashCode()
42+
var result = weatherConditionTypes.hashCode()
4443
result = 31 * result + dateTimeCondition.hashCode()
4544
result = 31 * result + vehicleTypes.hashCode()
4645
result = 31 * result + lanes.hashCode()
@@ -52,7 +51,7 @@ class AdasisSpeedLimitRestriction private constructor(
5251
*/
5352
override fun toString(): String {
5453
return "SpeedLimitRestriction(" +
55-
"weather=$weather, " +
54+
"weatherConditionTypes=$weatherConditionTypes, " +
5655
"dateTimeCondition='$dateTimeCondition', " +
5756
"vehicleTypes=$vehicleTypes, " +
5857
"lanes=$lanes" +
@@ -101,31 +100,31 @@ class AdasisSpeedLimitRestriction private constructor(
101100
MOTORCYCLE
102101
)
103102
annotation class Type
103+
104+
@JvmSynthetic
105+
@Type
106+
internal fun createVehicleType(nativeObj: com.mapbox.navigator.VehicleType): Int {
107+
return when (nativeObj) {
108+
com.mapbox.navigator.VehicleType.CAR -> CAR
109+
com.mapbox.navigator.VehicleType.TRUCK -> TRUCK
110+
com.mapbox.navigator.VehicleType.BUS -> BUS
111+
com.mapbox.navigator.VehicleType.TRAILER -> TRAILER
112+
com.mapbox.navigator.VehicleType.MOTORCYCLE -> MOTORCYCLE
113+
}
114+
}
104115
}
105116

106117
internal companion object {
107118

108119
@JvmSynthetic
109120
fun createFromNativeObject(nativeObj: com.mapbox.navigator.SpeedLimitRestriction) =
110121
AdasisSpeedLimitRestriction(
111-
weather = nativeObj.weather.map {
112-
SensorData.Weather.Condition.createFromNativeObject(it)
122+
weatherConditionTypes = nativeObj.weather.map {
123+
SensorData.Weather.ConditionType.createConditionType(it)
113124
},
114125
dateTimeCondition = nativeObj.dateTimeCondition,
115-
vehicleTypes = nativeObj.vehicleTypes.map { createVehicleType(it) },
126+
vehicleTypes = nativeObj.vehicleTypes.map { VehicleType.createVehicleType(it) },
116127
lanes = nativeObj.lanes,
117128
)
118-
119-
@JvmSynthetic
120-
@VehicleType.Type
121-
private fun createVehicleType(nativeObj: com.mapbox.navigator.VehicleType): Int {
122-
return when (nativeObj) {
123-
com.mapbox.navigator.VehicleType.CAR -> VehicleType.CAR
124-
com.mapbox.navigator.VehicleType.TRUCK -> VehicleType.TRUCK
125-
com.mapbox.navigator.VehicleType.BUS -> VehicleType.BUS
126-
com.mapbox.navigator.VehicleType.TRAILER -> VehicleType.TRAILER
127-
com.mapbox.navigator.VehicleType.MOTORCYCLE -> VehicleType.MOTORCYCLE
128-
}
129-
}
130129
}
131130
}

libnavigation-core/src/main/java/com/mapbox/navigation/core/sensor/SensorData.kt

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.mapbox.navigation.core.sensor
22

33
import android.os.SystemClock
4+
import androidx.annotation.IntDef
45
import com.mapbox.bindgen.Value
56
import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
67
import com.mapbox.navigator.SensorType
7-
import com.mapbox.navigator.Weather
88

99
/**
1010
* Data obtained from sensors
@@ -15,9 +15,9 @@ abstract class SensorData internal constructor() {
1515
/**
1616
* Weather condition obtained from sensors
1717
*
18-
* @param condition weather condition type
18+
* @param conditionType weather condition type
1919
*/
20-
class Weather(val condition: Condition) : SensorData() {
20+
class Weather(@ConditionType.Type val conditionType: Int) : SensorData() {
2121

2222
/**
2323
* Indicates whether some other object is "equal to" this one.
@@ -28,60 +28,68 @@ abstract class SensorData internal constructor() {
2828

2929
other as Weather
3030

31-
if (condition != other.condition) return false
32-
33-
return true
31+
return conditionType == other.conditionType
3432
}
3533

3634
/**
3735
* Returns a hash code value for the object.
3836
*/
3937
override fun hashCode(): Int {
40-
return condition.hashCode()
38+
return conditionType.hashCode()
4139
}
4240

4341
/**
4442
* Returns a string representation of the object.
4543
*/
4644
override fun toString(): String {
47-
return "Weather(condition=$condition)"
45+
return "Weather(condition=$conditionType)"
4846
}
4947

5048
/**
5149
* Weather condition type.
5250
*/
53-
abstract class Condition internal constructor() {
51+
object ConditionType {
5452

5553
/**
5654
* Rain weather condition
5755
*/
58-
object Rain : Condition()
56+
const val RAIN = 0
5957

6058
/**
6159
* Snow weather condition
6260
*/
63-
object Snow : Condition()
61+
const val SNOW = 1
6462

6563
/**
6664
* Fog weather condition
6765
*/
68-
object Fog : Condition()
66+
const val FOG = 2
6967

7068
/**
7169
* Wet road weather condition
7270
*/
73-
object WetRoad : Condition()
74-
75-
internal companion object {
76-
77-
@JvmSynthetic
78-
fun createFromNativeObject(nativeObject: com.mapbox.navigator.Weather): Condition {
79-
return when (nativeObject) {
80-
com.mapbox.navigator.Weather.FOG -> Fog
81-
com.mapbox.navigator.Weather.RAIN -> Rain
82-
com.mapbox.navigator.Weather.SNOW -> Snow
83-
com.mapbox.navigator.Weather.WET_ROAD -> WetRoad
84-
}
71+
const val WET_ROAD = 3
72+
73+
/**
74+
* Retention policy for the [ConditionType]
75+
*/
76+
@Retention(AnnotationRetention.BINARY)
77+
@IntDef(
78+
RAIN,
79+
SNOW,
80+
FOG,
81+
WET_ROAD
82+
)
83+
annotation class Type
84+
85+
@JvmSynthetic
86+
@Type
87+
internal fun createConditionType(nativeObject: com.mapbox.navigator.Weather): Int {
88+
return when (nativeObject) {
89+
com.mapbox.navigator.Weather.FOG -> FOG
90+
com.mapbox.navigator.Weather.RAIN -> RAIN
91+
com.mapbox.navigator.Weather.SNOW -> SNOW
92+
com.mapbox.navigator.Weather.WET_ROAD -> WET_ROAD
8593
}
8694
}
8795
}
@@ -107,9 +115,7 @@ abstract class SensorData internal constructor() {
107115
other as Lane
108116

109117
if (currentLaneIndex != other.currentLaneIndex) return false
110-
if (laneCount != other.laneCount) return false
111-
112-
return true
118+
return laneCount == other.laneCount
113119
}
114120

115121
/**
@@ -153,12 +159,12 @@ abstract class SensorData internal constructor() {
153159
}
154160

155161
private fun Weather.toValue(): Value {
156-
val order: Long = when (condition) {
157-
is Weather.Condition.Rain -> 0
158-
is Weather.Condition.Snow -> 1
159-
is Weather.Condition.Fog -> 2
160-
is Weather.Condition.WetRoad -> 3
161-
else -> error("Unsupported weather condition type: $condition")
162+
val order: Long = when (conditionType) {
163+
Weather.ConditionType.RAIN -> 0
164+
Weather.ConditionType.SNOW -> 1
165+
Weather.ConditionType.FOG -> 2
166+
Weather.ConditionType.WET_ROAD -> 3
167+
else -> error("Unsupported weather condition type: $conditionType")
162168
}
163169
return Value.valueOf(order)
164170
}

libnavigation-core/src/test/java/com/mapbox/navigation/core/adasis/AdasisConfigPathOptionsTest.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,18 @@ class AdasisConfigPathOptionsTest :
1616
.build()
1717

1818
return AdasisConfigPathOptions.Builder()
19-
.stubOptions(AdasisStubOptions.Builder().options(messageOptions).build())
20-
.segmentOptions(AdasisSegmentOptions.Builder().options(messageOptions).build())
21-
.profileShortOptions(AdasisProfileShortOptions.Builder().options(messageOptions).build())
22-
.profileLongOptions(AdasisProfileLongOptions.Builder().options(messageOptions).build())
19+
.stubOptions(
20+
AdasisStubOptions.Builder().options(messageOptions).build()
21+
)
22+
.segmentOptions(
23+
AdasisSegmentOptions.Builder().options(messageOptions).build()
24+
)
25+
.profileShortOptions(
26+
AdasisProfileShortOptions.Builder().options(messageOptions).build()
27+
)
28+
.profileLongOptions(
29+
AdasisProfileLongOptions.Builder().options(messageOptions).build()
30+
)
2331
}
2432

2533
override fun trigger() {

libnavigation-core/src/test/java/com/mapbox/navigation/core/adasis/AdasisConfigTest.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ class AdasisConfigTest : BuilderTest<AdasisConfig, AdasisConfig.Builder>() {
2525
.build()
2626

2727
val pathOptions = AdasisConfigPathOptions.Builder()
28-
.stubOptions(AdasisStubOptions.Builder().options(messageOptions).build())
29-
.segmentOptions(AdasisSegmentOptions.Builder().options(messageOptions).build())
30-
.profileShortOptions(AdasisProfileShortOptions.Builder().options(messageOptions).build())
31-
.profileLongOptions(AdasisProfileLongOptions.Builder().options(messageOptions).build())
28+
.stubOptions(
29+
AdasisStubOptions.Builder().options(messageOptions).build()
30+
)
31+
.segmentOptions(
32+
AdasisSegmentOptions.Builder().options(messageOptions).build()
33+
)
34+
.profileShortOptions(
35+
AdasisProfileShortOptions.Builder().options(messageOptions).build()
36+
)
37+
.profileLongOptions(
38+
AdasisProfileLongOptions.Builder().options(messageOptions).build()
39+
)
3240
.build()
3341

3442
return AdasisConfig.Builder()

libnavigation-core/src/test/java/com/mapbox/navigation/core/adasis/AdasisProfileLongOptionsTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
44
import com.mapbox.navigation.testing.BuilderTest
55

66
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
7-
class AdasisProfileLongOptionsTest : BuilderTest<AdasisProfileLongOptions, AdasisProfileLongOptions.Builder>() {
7+
class AdasisProfileLongOptionsTest :
8+
BuilderTest<AdasisProfileLongOptions, AdasisProfileLongOptions.Builder>() {
89

910
override fun getImplementationClass() = AdasisProfileLongOptions::class
1011

libnavigation-core/src/test/java/com/mapbox/navigation/core/adasis/AdasisProfileShortOptionsTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI
44
import com.mapbox.navigation.testing.BuilderTest
55

66
@OptIn(ExperimentalPreviewMapboxNavigationAPI::class)
7-
class AdasisProfileShortOptionsTest : BuilderTest<AdasisProfileShortOptions, AdasisProfileShortOptions.Builder>() {
7+
class AdasisProfileShortOptionsTest :
8+
BuilderTest<AdasisProfileShortOptions, AdasisProfileShortOptions.Builder>() {
89

910
override fun getImplementationClass() = AdasisProfileShortOptions::class
1011

0 commit comments

Comments
 (0)