ServiceStateRepository

Repositorio centralizado para la gestión de estados de todos los servicios de salud.

Esta clase implementa el patrón Singleton y actúa como el centro de coordinación para todos los datos y estados de la aplicación. Funciona como:

Arquitectura Central

ServiceStateRepository
├── Estados de Servicios (ServiceType → ServiceState)
├── Datos de Salud (HealthData)
├── Análisis HRV (HRVCalculator)
├── Actividad Física (Acelerómetro)
├── Estrés Térmico (HeatStressRiskLevel)
└── Datos Históricos (HealthDataHistoryRepository)

Responsabilidades Principales

1. Gestión de Estados

  • Coordina estados de todos los servicios (ServiceType)

  • Proporciona actualizaciones thread-safe

  • Mapea estados internos a estados UI

2. Procesamiento de Datos

  • Recibe datos de Samsung Health SDK

  • Procesa datos de acelerómetro para actividad física

  • Calcula HRV en tiempo real

  • Analiza riesgo de estrés térmico

3. Almacenamiento

Flujo de Datos

Samsung Health SDK → Observer → ServiceStateRepository → StateFlow → UI

HealthDataHistoryRepository

Ejemplo de Uso

val repository = ServiceStateRepository.getInstance(context)

// Observar estados de servicios
repository.serviceStates.collect { states ->
// Actualizar UI basándose en estados
}

// Actualizar datos de salud
repository.updateHealthData {
copy(heartRate = 75, temperature = 36.5f)
}

// Manejar emergencia
repository.setEmergencyMode(true)

Thread Safety

  • Utiliza ConcurrentHashMap para estados

  • StateFlow para observación thread-safe

  • CoroutineScope para operaciones asíncronas

  • Actualizaciones atómicas de datos

Author

WiLoc Team

Since

1.0.0

Parameters

context

Contexto de la aplicación

See also

Constructors

Link copied to clipboard
private constructor(context: Context)

Types

Link copied to clipboard

Properties

Link copied to clipboard
private val _accumulatedActivity: <Error class: unknown class>

StateFlow observable de actividad acumulada

Link copied to clipboard
private val _currentActivityLevel: <Error class: unknown class>

StateFlow observable del nivel de actividad actual

Link copied to clipboard
private val _currentHealthData: <Error class: unknown class>

StateFlow observable de datos de salud actuales

Link copied to clipboard
private val _currentHeatStressRisk: <Error class: unknown class>

StateFlow observable del riesgo de estrés térmico

Link copied to clipboard
private val _currentHRV: <Error class: unknown class>

StateFlow observable del análisis HRV actual

Link copied to clipboard
private val _currentMLModelStatus: <Error class: unknown class>
Link copied to clipboard
private val _currentMLPrediction: <Error class: unknown class>
Link copied to clipboard
private val _hrvRecommendations: <Error class: unknown class>

StateFlow observable de recomendaciones HRV

Link copied to clipboard
private val _hrvTrend: <Error class: unknown class>

StateFlow observable de la tendencia HRV

Link copied to clipboard
private val _isEmergencyMode: <Error class: unknown class>

StateFlow observable del estado de emergencia

Link copied to clipboard
private val _lastUpdateTime: <Error class: unknown class>

Timestamp de la última actualización

Link copied to clipboard
private val _serviceStates: <Error class: unknown class>

StateFlow observable de estados de todos los servicios

Link copied to clipboard
private val accelerometerBuffer: <Error class: unknown class>

Buffer para cálculos de actividad física

Link copied to clipboard
val accumulatedActivity: StateFlow<Float>
Link copied to clipboard
private val context: Context
Link copied to clipboard
val currentActivityLevel: StateFlow<Int>
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Repositorio de datos históricos

Link copied to clipboard

Calculadora de HRV

Link copied to clipboard
val hrvRecommendations: StateFlow<List<String>>
Link copied to clipboard
val hrvTrend: StateFlow<List<Double>>
Link copied to clipboard
val isEmergencyMode: StateFlow<Boolean>
Link copied to clipboard

Timestamp de la última actualización de actividad

Link copied to clipboard
private var lastHRVLogTime: Long

Timestamp del último log de HRV

Link copied to clipboard
val lastUpdateTime: StateFlow<Long>
Link copied to clipboard
private val serviceScope: <Error class: unknown class>

Scope para operaciones asíncronas del repositorio

Link copied to clipboard
Link copied to clipboard

Mapa thread-safe para estados individuales

Link copied to clipboard
private val TAG: String

Tag para logging de la clase

Link copied to clipboard

Functions

Link copied to clipboard
fun cleanup()

Libera los recursos utilizados por el repositorio.

Link copied to clipboard

Limpieza completa del repositorio con flush de datos.

Link copied to clipboard

Crea una instancia de HealthDataPoint a partir del HealthData actual para su uso con el modelo de Machine Learning.

Link copied to clipboard
suspend fun exportMLTrainingData(days: Int = 7): List<FloatArray>

Exporta datos para entrenamiento de modelos ML.

Link copied to clipboard
suspend fun flushHistoricalData()

Fuerza el guardado de todos los datos históricos pendientes.

Link copied to clipboard
private fun getBatteryLevel(): Int

Obtiene el nivel de batería actual del dispositivo.

Link copied to clipboard

Obtiene los datos de salud actuales con batería actualizada.

Link copied to clipboard

Obtiene el análisis HRV actual.

Link copied to clipboard
fun getHeatStressMetrics(): <Error class: unknown class>

Obtiene las métricas actuales de estrés térmico.

Link copied to clipboard

Obtiene estadísticas del buffer de datos históricos.

Link copied to clipboard

Obtiene estadísticas del buffer HRV.

Link copied to clipboard

Obtiene las recomendaciones HRV actuales.

Link copied to clipboard

Obtiene la tendencia de HRV.

Link copied to clipboard

Obtiene el observer para Samsung Health SDK.

Link copied to clipboard

Obtiene el estado actual de un servicio específico.

Link copied to clipboard

Obtiene un resumen del estado de servicios.

Link copied to clipboard

Verifica si HRV está listo para análisis.

Link copied to clipboard

Mapea nivel de estrés HRV a entero para transmisión BLE.

Link copied to clipboard

Callback de datos de acelerómetro recibidos.

Link copied to clipboard
open override fun onAvailableSdkTrackers(availableTrackers: List<HealthTrackerType>)

Callback de trackers SDK disponibles.

Link copied to clipboard
open override fun onBodyStateChanged(isOnBody: Boolean)

Callback de cambio de estado del dispositivo (on-body/off-body).

Link copied to clipboard
open override fun onDebugMessage(string: String)
Link copied to clipboard

Registra una caída detectada.

Link copied to clipboard
@RequiresApi(value = 35)
open override fun onHeartRateDataSdkReceived(data: HeartRateDataSdk)

Callback de datos de frecuencia cardíaca recibidos.

Link copied to clipboard
open override fun onSamsungSdkConnectionResult(statusMessage: String, isConnected: Boolean)

Callback de resultado de conexión con Samsung Health SDK.

Link copied to clipboard
open override fun onSamsungSdkError(errorMessage: String, trackerType: HealthTrackerType?)

Callback de error en Samsung SDK.

Link copied to clipboard

Callback de datos de temperatura recibidos.

Link copied to clipboard
open override fun onStepCountUpdated(stepCount: Long)

Callback de actualización de conteo de pasos.

Link copied to clipboard

Procesa datos del acelerómetro para calcular niveles de actividad física.

Link copied to clipboard
@RequiresApi(value = 35)
private fun processHRVData(ibiList: List<Int>)

Procesa nuevos datos IBI (Inter-Beat Interval) para calcular HRV.

Link copied to clipboard

Resetea todos los estados a sus valores iniciales.

Link copied to clipboard

Resetea el estado de detección de caídas.

Link copied to clipboard

Reinicia los datos de HRV.

Link copied to clipboard

Actualiza el estado de emergencia.

Link copied to clipboard
open override fun startStepCounterListener()

Callback de inicio de listener de contador de pasos.

Link copied to clipboard

Actualiza el estado de la batería.

Link copied to clipboard

Actualiza los datos de salud usando una función de transformación.

Link copied to clipboard

Actualiza los datos de salud con información HRV.

Link copied to clipboard

Actualiza la predicción de estrés térmico utilizando el modelo de machine learning.

Link copied to clipboard

Actualiza múltiples estados de servicios de una vez.

Link copied to clipboard

Actualiza el estado de un servicio específico.