mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2026-02-19 13:44:34 +01:00
Added wrapper for API data with mapper and updated usage
This commit is contained in:
@@ -29,6 +29,7 @@ import no.nordicsemi.android.toolbox.profile.data.RangingSessionAction
|
||||
import no.nordicsemi.android.toolbox.profile.data.RangingSessionFailedReason
|
||||
import no.nordicsemi.android.toolbox.profile.data.SessionClosedReason
|
||||
import no.nordicsemi.android.toolbox.profile.data.UpdateRate
|
||||
import no.nordicsemi.android.toolbox.profile.view.channelSounding.toCsRangingData
|
||||
import timber.log.Timber
|
||||
import java.util.UUID
|
||||
import javax.inject.Inject
|
||||
@@ -83,7 +84,7 @@ class ChannelSoundingManager @Inject constructor(
|
||||
}
|
||||
_previousRangingDataList.value = updatedList
|
||||
_rangingData.value = RangingSessionAction.OnResult(
|
||||
data = data,
|
||||
data = data.toCsRangingData(),
|
||||
previousData = _previousRangingDataList.value
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package no.nordicsemi.android.toolbox.profile.view.channelSounding
|
||||
|
||||
import android.os.Build
|
||||
import android.ranging.RangingData
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@@ -41,6 +39,7 @@ import no.nordicsemi.android.common.theme.NordicTheme
|
||||
import no.nordicsemi.android.toolbox.profile.R
|
||||
import no.nordicsemi.android.toolbox.profile.data.ChannelSoundingServiceData
|
||||
import no.nordicsemi.android.toolbox.profile.data.ConfidenceLevel
|
||||
import no.nordicsemi.android.toolbox.profile.data.CsRangingData
|
||||
import no.nordicsemi.android.toolbox.profile.data.RangingSessionAction
|
||||
import no.nordicsemi.android.toolbox.profile.data.RangingTechnology
|
||||
import no.nordicsemi.android.toolbox.profile.data.SessionClosedReason
|
||||
@@ -90,7 +89,6 @@ private fun ChannelSoundingNotSupportedView() {
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.BAKLAVA)
|
||||
@Composable
|
||||
private fun ChannelSoundingView(
|
||||
channelSoundingState: ChannelSoundingServiceData,
|
||||
@@ -237,16 +235,15 @@ private fun SessionError(
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.BAKLAVA)
|
||||
@Composable
|
||||
private fun RangingContent(
|
||||
updateRate: UpdateRate,
|
||||
rangingData: RangingData,
|
||||
rangingData: CsRangingData,
|
||||
previousMeasurements: List<Float> = emptyList(),
|
||||
onClickEvent: (ChannelSoundingEvent) -> Unit,
|
||||
) {
|
||||
val distanceMeasurement = rangingData.distance?.measurement
|
||||
val confidence = rangingData.distance?.confidence
|
||||
val confidence = rangingData.distance?.confidenceLevel?.value
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
@@ -259,7 +256,7 @@ private fun RangingContent(
|
||||
|
||||
DetailsCard(
|
||||
updateRate = updateRate,
|
||||
rangingTechnology = rangingData.rangingTechnology,
|
||||
rangingTechnology = rangingData.technology.value,
|
||||
confidenceLevel = confidence
|
||||
) { onClickEvent(ChannelSoundingEvent.RangingUpdateRate(it)) }
|
||||
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
package no.nordicsemi.android.toolbox.profile.view.channelSounding
|
||||
|
||||
import android.os.Build
|
||||
import android.ranging.RangingData
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.annotation.StringRes
|
||||
import no.nordicsemi.android.toolbox.profile.R
|
||||
import no.nordicsemi.android.toolbox.profile.data.CSRangingMeasurement
|
||||
import no.nordicsemi.android.toolbox.profile.data.ConfidenceLevel
|
||||
import no.nordicsemi.android.toolbox.profile.data.CsRangingData
|
||||
import no.nordicsemi.android.toolbox.profile.data.RangingSessionFailedReason
|
||||
import no.nordicsemi.android.toolbox.profile.data.RangingTechnology
|
||||
import no.nordicsemi.android.toolbox.profile.data.SessionCloseReasonProvider
|
||||
@@ -58,3 +64,37 @@ internal fun SessionCloseReasonProvider.toUiString(): Int {
|
||||
}
|
||||
}
|
||||
|
||||
// Mapper function which maps RangingData to CsRangingData
|
||||
@RequiresApi(Build.VERSION_CODES.BAKLAVA)
|
||||
internal fun RangingData.toCsRangingData(): CsRangingData {
|
||||
return CsRangingData(
|
||||
distance = this.distance?.let {
|
||||
CSRangingMeasurement(
|
||||
measurement = it.measurement,
|
||||
confidenceLevel = ConfidenceLevel.from(it.confidence)
|
||||
)
|
||||
},
|
||||
azimuth = this.azimuth?.let {
|
||||
CSRangingMeasurement(
|
||||
measurement = it.measurement,
|
||||
confidenceLevel = ConfidenceLevel.from(it.confidence)
|
||||
)
|
||||
},
|
||||
elevation = this.elevation?.let {
|
||||
CSRangingMeasurement(
|
||||
measurement = it.measurement,
|
||||
confidenceLevel = ConfidenceLevel.from(it.confidence)
|
||||
)
|
||||
},
|
||||
technology = RangingTechnology.from(this.rangingTechnology)
|
||||
?: throw IllegalArgumentException("Unknown ranging technology: ${this.rangingTechnology}"),
|
||||
timeStamp = this.timestampMillis,
|
||||
hasRssi = this.hasRssi(),
|
||||
rssi = if (this.hasRssi()) {
|
||||
this.rssi
|
||||
} else {
|
||||
null
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package no.nordicsemi.android.toolbox.profile.data
|
||||
|
||||
import android.ranging.RangingData
|
||||
import no.nordicsemi.android.toolbox.lib.utils.Profile
|
||||
|
||||
data class ChannelSoundingServiceData(
|
||||
@@ -13,7 +12,7 @@ data class ChannelSoundingServiceData(
|
||||
sealed interface RangingSessionAction {
|
||||
object OnStart : RangingSessionAction
|
||||
data class OnResult(
|
||||
val data: RangingData,
|
||||
val data: CsRangingData,
|
||||
val previousData: List<Float> = emptyList()
|
||||
) : RangingSessionAction
|
||||
|
||||
@@ -21,6 +20,21 @@ sealed interface RangingSessionAction {
|
||||
object OnClosed : RangingSessionAction
|
||||
}
|
||||
|
||||
data class CsRangingData(
|
||||
val distance: CSRangingMeasurement? = null,
|
||||
val azimuth: CSRangingMeasurement? = null,
|
||||
val elevation: CSRangingMeasurement? = null,
|
||||
val technology: RangingTechnology,
|
||||
val timeStamp: Long,
|
||||
val hasRssi: Boolean = false,
|
||||
val rssi: Int? = null,
|
||||
)
|
||||
|
||||
data class CSRangingMeasurement(
|
||||
val measurement: Double,
|
||||
val confidenceLevel: ConfidenceLevel,
|
||||
)
|
||||
|
||||
enum class UpdateRate {
|
||||
NORMAL,
|
||||
FREQUENT,
|
||||
@@ -33,7 +47,7 @@ enum class ConfidenceLevel(val value: Int) {
|
||||
CONFIDENCE_LOW(0);
|
||||
|
||||
companion object {
|
||||
fun from(value: Int): ConfidenceLevel? = entries.find { it.value == value }
|
||||
fun from(value: Int): ConfidenceLevel = entries.find { it.value == value } ?: CONFIDENCE_LOW
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +73,7 @@ enum class SessionClosedReason : SessionCloseReasonProvider {
|
||||
|
||||
sealed interface SessionCloseReasonProvider
|
||||
|
||||
enum class RangingSessionFailedReason(val reason: Int):SessionCloseReasonProvider {
|
||||
enum class RangingSessionFailedReason(val reason: Int) : SessionCloseReasonProvider {
|
||||
UNKNOWN(0),
|
||||
LOCAL_REQUEST(1),
|
||||
REMOTE_REQUEST(2),
|
||||
|
||||
Reference in New Issue
Block a user