From ad77d4aac1f8f8358457beec8ff956b50364a68d Mon Sep 17 00:00:00 2001 From: AdityaBhawsar Date: Fri, 24 Mar 2023 17:22:05 +0530 Subject: [PATCH 1/5] Added ProximityState.kt --- .../main/java/com/mutualmobile/composesensors/ProximityState.kt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt diff --git a/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt new file mode 100644 index 0000000..fcae169 --- /dev/null +++ b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt @@ -0,0 +1,2 @@ +package com.mutualmobile.composesensors + From c18bb5f7f3e2e298a8ea18fbe29bc0cb8b95afcb Mon Sep 17 00:00:00 2001 From: AdityaBhawsar Date: Thu, 30 Mar 2023 18:33:43 +0530 Subject: [PATCH 2/5] Added functional implementation for ProximityState.kt --- .../composesensors/ProximityState.kt | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt index fcae169..0f5eab5 100644 --- a/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt +++ b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt @@ -1,2 +1,76 @@ package com.mutualmobile.composesensors +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember + +/** + * Measures the proximity of an object in cm relative to the view screen of a device. + * @param isAvailable Whether the current device has a proximity sensor. Defaults to false. + * @param sensorDistance Proximity of an object from the sensor (in cm). + * @param accuracy Accuracy factor of the proximity sensor. Defaults to 0. + */ +@Immutable +class ProximitySensorState internal constructor( + val isAvailable: Boolean = false, + val sensorDistance: Float = 0f, + val accuracy: Int = 0 +) { + override fun toString(): String { + return "ProximitySensorState(isAvailable=$isAvailable, " + + "sensorDistance=$sensorDistance, accuracy=$accuracy)" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ProximitySensorState) return false + + if (isAvailable != other.isAvailable) return false + if (sensorDistance != other.sensorDistance) return false + if (accuracy != other.accuracy) return false + return true + } + + override fun hashCode(): Int { + var result = isAvailable.hashCode() + result = 31 * result + sensorDistance.hashCode() + result = 31 * result + accuracy.hashCode() + return result + } +} + + +/** + * Creates and [remember]s instance of [ProximitySensorState]. + * @param sensorDelay The rate at which the raw sensor data should be received. + * Defaults to [SensorDelay.Normal]. + * @param onError Callback invoked on every error state. + */ +@Composable +fun rememberProximitySensorState( + sensorDelay: SensorDelay = SensorDelay.Normal, + onError: (throwable: Throwable) -> Unit = {}, +): ProximitySensorState { + val sensorState = rememberSensorState( + sensorType = SensorType.Proximity, + sensorDelay = sensorDelay, + onError = onError, + ) + + val proximitySensorState = remember { mutableStateOf(ProximitySensorState()) } + + LaunchedEffect(key1 = sensorState, block = { + val sensorStateValues = sensorState.data + if (sensorStateValues.isNotEmpty()) { + proximitySensorState.value = ProximitySensorState( + sensorDistance = sensorStateValues[0], + isAvailable = sensorState.isAvailable, + accuracy = sensorState.accuracy + ) + } + }) + + return proximitySensorState.value +} \ No newline at end of file From 8b7feb4f79b1ec6552344750ddd08014b404a914 Mon Sep 17 00:00:00 2001 From: AdityaBhawsar Date: Thu, 30 Mar 2023 18:35:20 +0530 Subject: [PATCH 3/5] renamed ProximityState.kt to ProximitySensorState.kt --- .../composesensors/{ProximityState.kt => ProximitySensorState.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename composesensors/src/main/java/com/mutualmobile/composesensors/{ProximityState.kt => ProximitySensorState.kt} (100%) diff --git a/composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximitySensorState.kt similarity index 100% rename from composesensors/src/main/java/com/mutualmobile/composesensors/ProximityState.kt rename to composesensors/src/main/java/com/mutualmobile/composesensors/ProximitySensorState.kt From 9767aa9593f569f912e5f78a3a7a7cc3994053c2 Mon Sep 17 00:00:00 2001 From: AdityaBhawsar Date: Thu, 30 Mar 2023 18:36:29 +0530 Subject: [PATCH 4/5] updated README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 002df52..0bf5540 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Magnetic Field | ✅ | rememberMagneticFieldSensorState() Gyroscope | ✅ | rememberGyroscopeSensorState() Light | ✅️ | rememberLightSensorState() Pressure | ✅️ | rememberPressureSensorState() -Proximity | ⚠️ | WIP +Proximity | ✅️️ | rememberProximitySensorState() Gravity | ✅️ | rememberGravitySensorState() Linear Acceleration | ✅️ | rememberLinearAccelerationSensorState() Rotation Vector | ⚠️ | WIP From 0b5802b8d139ef396cdfb853238428c8ecc085df Mon Sep 17 00:00:00 2001 From: AdityaBhawsar Date: Thu, 30 Mar 2023 19:12:49 +0530 Subject: [PATCH 5/5] changed parameter order for state --- .../mutualmobile/composesensors/ProximitySensorState.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composesensors/src/main/java/com/mutualmobile/composesensors/ProximitySensorState.kt b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximitySensorState.kt index 0f5eab5..40224db 100644 --- a/composesensors/src/main/java/com/mutualmobile/composesensors/ProximitySensorState.kt +++ b/composesensors/src/main/java/com/mutualmobile/composesensors/ProximitySensorState.kt @@ -8,19 +8,19 @@ import androidx.compose.runtime.remember /** * Measures the proximity of an object in cm relative to the view screen of a device. - * @param isAvailable Whether the current device has a proximity sensor. Defaults to false. * @param sensorDistance Proximity of an object from the sensor (in cm). + * @param isAvailable Whether the current device has a proximity sensor. Defaults to false. * @param accuracy Accuracy factor of the proximity sensor. Defaults to 0. */ @Immutable class ProximitySensorState internal constructor( - val isAvailable: Boolean = false, val sensorDistance: Float = 0f, + val isAvailable: Boolean = false, val accuracy: Int = 0 ) { override fun toString(): String { - return "ProximitySensorState(isAvailable=$isAvailable, " + - "sensorDistance=$sensorDistance, accuracy=$accuracy)" + return "ProximitySensorState(sensorDistance=$sensorDistance, " + + "isAvailable=$isAvailable, accuracy=$accuracy)" } override fun equals(other: Any?): Boolean {