From c2f9b8f657458838d1739f737dfc81dbdb1be5b5 Mon Sep 17 00:00:00 2001 From: Yuan Chen Date: Wed, 25 Sep 2024 12:02:34 +0200 Subject: [PATCH 1/2] Add `DeviceRegistration.additionalSpecifications` --- .../common/application/devices/AltBeacon.kt | 7 ++- .../BLESerialNumberDeviceRegistration.kt | 6 +- .../devices/DefaultDeviceRegistration.kt | 5 +- .../application/devices/DeviceRegistration.kt | 13 +++++ .../devices/MACAddressDeviceRegistration.kt | 6 +- .../common/application/devices/Website.kt | 7 ++- .../serialization/UnknownDeviceSerializers.kt | 6 +- .../serialization/DeviceRegistrationTest.kt | 58 ++++++++++++------- .../deployments/application/ValidationTest.kt | 2 + .../common/devices/DeviceRegistration.json | 3 +- .../carp/rpc/GenerateExampleRequests.kt | 1 + 11 files changed, 83 insertions(+), 31 deletions(-) diff --git a/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/AltBeacon.kt b/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/AltBeacon.kt index 74e60a14a..63435e17c 100644 --- a/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/AltBeacon.kt +++ b/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/AltBeacon.kt @@ -2,6 +2,7 @@ package dk.cachet.carp.common.application.devices +import dk.cachet.carp.common.application.ApplicationData import dk.cachet.carp.common.application.Trilean import dk.cachet.carp.common.application.UUID import dk.cachet.carp.common.application.data.CarpDataTypes @@ -78,7 +79,8 @@ data class AltBeaconDeviceRegistration( */ val referenceRssi: Short, @Required - override val deviceDisplayName: String? = null // TODO: We could map known manufacturerId's to display names. + override val deviceDisplayName: String? = null, // TODO: We could map known manufacturerId's to display names. + override val additionalSpecifications: ApplicationData? = null ) : DeviceRegistration() { companion object @@ -134,6 +136,7 @@ class AltBeaconDeviceRegistrationBuilder : DeviceRegistrationBuilder */ var deviceDisplayName: String? = null + /** + * Additional device specifications which may be relevant to the researcher when interpreting collected data. + * E.g., brand/model name, operating system version, or any other relevant information. + */ + var additionalSpecifications: ApplicationData? = null + /** * Build the immutable [DeviceRegistration] using the current configuration of this [DeviceRegistrationBuilder]. */ diff --git a/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/MACAddressDeviceRegistration.kt b/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/MACAddressDeviceRegistration.kt index 6825872f3..824e41b67 100644 --- a/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/MACAddressDeviceRegistration.kt +++ b/carp.common/src/commonMain/kotlin/dk/cachet/carp/common/application/devices/MACAddressDeviceRegistration.kt @@ -1,5 +1,6 @@ package dk.cachet.carp.common.application.devices +import dk.cachet.carp.common.application.ApplicationData import dk.cachet.carp.common.application.MACAddress import dk.cachet.carp.common.infrastructure.serialization.NotSerializable import kotlinx.serialization.* @@ -14,7 +15,8 @@ import kotlin.js.JsExport data class MACAddressDeviceRegistration( val macAddress: MACAddress, @Required - override val deviceDisplayName: String? = null + override val deviceDisplayName: String? = null, + override val additionalSpecifications: ApplicationData? = null ) : DeviceRegistration() { @Required @@ -30,5 +32,5 @@ class MACAddressDeviceRegistrationBuilder : DeviceRegistrationBuilder Date: Fri, 27 Sep 2024 15:28:33 +0200 Subject: [PATCH 2/2] Remove unused workaround for former serialization bug --- .../deployments/application/PrimaryDeviceDeployment.kt | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/carp.deployments.core/src/commonMain/kotlin/dk/cachet/carp/deployments/application/PrimaryDeviceDeployment.kt b/carp.deployments.core/src/commonMain/kotlin/dk/cachet/carp/deployments/application/PrimaryDeviceDeployment.kt index a204027f1..eec0df5b1 100644 --- a/carp.deployments.core/src/commonMain/kotlin/dk/cachet/carp/deployments/application/PrimaryDeviceDeployment.kt +++ b/carp.deployments.core/src/commonMain/kotlin/dk/cachet/carp/deployments/application/PrimaryDeviceDeployment.kt @@ -14,7 +14,6 @@ import dk.cachet.carp.common.application.triggers.TaskControl import dk.cachet.carp.common.application.triggers.TriggerConfiguration import dk.cachet.carp.common.application.users.ExpectedParticipantData import dk.cachet.carp.common.application.users.hasNoConflicts -import kotlinx.datetime.Clock import kotlinx.datetime.Instant import kotlinx.serialization.* import kotlin.js.JsExport @@ -97,14 +96,7 @@ data class PrimaryDeviceDeployment( * The time when this device deployment was last updated. * This corresponds to the most recent device registration as part of this device deployment. */ - val lastUpdatedOn: Instant = - // TODO: Remove this workaround once JS serialization bug is fixed: - // https://github.com/Kotlin/kotlinx.serialization/issues/716 - @Suppress( "SENSELESS_COMPARISON" ) - if ( connectedDeviceRegistrations == null || registration == null ) Clock.System.now() - else connectedDeviceRegistrations.values.plus( registration ) - .maxOf { it.registrationCreatedOn } - + val lastUpdatedOn: Instant = (connectedDeviceRegistrations.values + registration).maxOf { it.registrationCreatedOn } /** * Get info on the primary device and each of the devices this device needs to connect to relevant at study runtime.