[M] Move collection out of activity scan
This commit is contained in:
@@ -8,21 +8,13 @@ import android.widget.ArrayAdapter
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.welie.blessed.BluetoothPeripheral
|
import com.welie.blessed.BluetoothPeripheral
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.flow.consumeAsFlow
|
|
||||||
import org.hydev.wearsync.bles.BluetoothHandler
|
|
||||||
import org.hydev.wearsync.bles.BluetoothHandler.Companion.ble
|
import org.hydev.wearsync.bles.BluetoothHandler.Companion.ble
|
||||||
import org.hydev.wearsync.bles.ObservationUnit
|
|
||||||
import org.hydev.wearsync.databinding.ActivityScanBinding
|
import org.hydev.wearsync.databinding.ActivityScanBinding
|
||||||
import java.text.DateFormat
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ActivityScan : AppCompatActivity() {
|
class ActivityScan : AppCompatActivity() {
|
||||||
lateinit var binding: ActivityScanBinding
|
lateinit var binding: ActivityScanBinding
|
||||||
|
|
||||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
|
||||||
private val dateFormat: DateFormat = SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.ENGLISH)
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = ActivityScanBinding.inflate(layoutInflater)
|
binding = ActivityScanBinding.inflate(layoutInflater)
|
||||||
@@ -80,84 +72,5 @@ class ActivityScan : AppCompatActivity() {
|
|||||||
view.snack("✅ Connected.")
|
view.snack("✅ Connected.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
collectHeartRate(ble)
|
|
||||||
collectPulseOxContinuous(ble)
|
|
||||||
collectPulseOxSpot(ble)
|
|
||||||
collectTemperature(ble)
|
|
||||||
collectWeight(ble)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectHeartRate(bluetoothHandler: BluetoothHandler) {
|
|
||||||
scope.launch {
|
|
||||||
bluetoothHandler.heartRateChannel.consumeAsFlow().collect {
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
binding.mainText.text = String.format(Locale.ENGLISH, "%d bpm", it.pulse)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectPulseOxContinuous(bluetoothHandler: BluetoothHandler) {
|
|
||||||
scope.launch {
|
|
||||||
bluetoothHandler.pulseOxContinuousChannel.consumeAsFlow().collect {
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
binding.mainText.text = String.format(
|
|
||||||
Locale.ENGLISH,
|
|
||||||
"SpO2 %d%%, Pulse %d bpm\n%s\n\nfrom %s",
|
|
||||||
it.spO2,
|
|
||||||
it.pulseRate,
|
|
||||||
dateFormat.format(Calendar.getInstance())
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectPulseOxSpot(bluetoothHandler: BluetoothHandler) {
|
|
||||||
scope.launch {
|
|
||||||
bluetoothHandler.pulseOxSpotChannel.consumeAsFlow().collect {
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
binding.mainText.text = String.format(
|
|
||||||
Locale.ENGLISH,
|
|
||||||
"SpO2 %d%%, Pulse %d bpm\n",
|
|
||||||
it.spO2,
|
|
||||||
it.pulseRate
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectTemperature(bluetoothHandler: BluetoothHandler) {
|
|
||||||
scope.launch {
|
|
||||||
bluetoothHandler.temperatureChannel.consumeAsFlow().collect {
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
binding.mainText.text = String.format(
|
|
||||||
Locale.ENGLISH,
|
|
||||||
"%.1f %s (%s)\n%s\n",
|
|
||||||
it.temperatureValue,
|
|
||||||
if (it.unit == ObservationUnit.Celsius) "celsius" else "fahrenheit",
|
|
||||||
it.type,
|
|
||||||
dateFormat.format(it.timestamp ?: Calendar.getInstance())
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectWeight(bluetoothHandler: BluetoothHandler) {
|
|
||||||
scope.launch {
|
|
||||||
bluetoothHandler.weightChannel.consumeAsFlow().collect {
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
binding.mainText.text = String.format(
|
|
||||||
Locale.ENGLISH,
|
|
||||||
"%.1f %s\n%s\n",
|
|
||||||
it.weight, it.unit.toString(),
|
|
||||||
dateFormat.format(it.timestamp ?: Calendar.getInstance())
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,8 +10,16 @@ import android.view.MenuItem
|
|||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
|
import kotlinx.coroutines.*
|
||||||
|
import kotlinx.coroutines.flow.consumeAsFlow
|
||||||
import org.hydev.wearsync.ActivityPermissions.Companion.hasPermissions
|
import org.hydev.wearsync.ActivityPermissions.Companion.hasPermissions
|
||||||
|
import org.hydev.wearsync.bles.BluetoothHandler
|
||||||
|
import org.hydev.wearsync.bles.BluetoothHandler.Companion.ble
|
||||||
|
import org.hydev.wearsync.bles.ObservationUnit
|
||||||
import org.hydev.wearsync.databinding.ActivityMainBinding
|
import org.hydev.wearsync.databinding.ActivityMainBinding
|
||||||
|
import java.text.DateFormat
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity()
|
class MainActivity : AppCompatActivity()
|
||||||
{
|
{
|
||||||
@@ -85,4 +93,89 @@ class MainActivity : AppCompatActivity()
|
|||||||
else -> super.onOptionsItemSelected(item)
|
else -> super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||||
|
private val dateFormat: DateFormat = SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.ENGLISH)
|
||||||
|
|
||||||
|
fun startCollect()
|
||||||
|
{
|
||||||
|
collectHeartRate(ble)
|
||||||
|
collectPulseOxContinuous(ble)
|
||||||
|
collectPulseOxSpot(ble)
|
||||||
|
collectTemperature(ble)
|
||||||
|
collectWeight(ble)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectHeartRate(bluetoothHandler: BluetoothHandler) {
|
||||||
|
scope.launch {
|
||||||
|
bluetoothHandler.heartRateChannel.consumeAsFlow().collect {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.content.tvValue.text = String.format(Locale.ENGLISH, "%d bpm", it.pulse)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectPulseOxContinuous(bluetoothHandler: BluetoothHandler) {
|
||||||
|
scope.launch {
|
||||||
|
bluetoothHandler.pulseOxContinuousChannel.consumeAsFlow().collect {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.content.tvValue.text = String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"SpO2 %d%%, Pulse %d bpm\n%s\n\nfrom %s",
|
||||||
|
it.spO2,
|
||||||
|
it.pulseRate,
|
||||||
|
dateFormat.format(Calendar.getInstance())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectPulseOxSpot(bluetoothHandler: BluetoothHandler) {
|
||||||
|
scope.launch {
|
||||||
|
bluetoothHandler.pulseOxSpotChannel.consumeAsFlow().collect {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.content.tvValue.text = String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"SpO2 %d%%, Pulse %d bpm\n",
|
||||||
|
it.spO2,
|
||||||
|
it.pulseRate
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectTemperature(bluetoothHandler: BluetoothHandler) {
|
||||||
|
scope.launch {
|
||||||
|
bluetoothHandler.temperatureChannel.consumeAsFlow().collect {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.content.tvValue.text = String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"%.1f %s (%s)\n%s\n",
|
||||||
|
it.temperatureValue,
|
||||||
|
if (it.unit == ObservationUnit.Celsius) "celsius" else "fahrenheit",
|
||||||
|
it.type,
|
||||||
|
dateFormat.format(it.timestamp ?: Calendar.getInstance())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun collectWeight(bluetoothHandler: BluetoothHandler) {
|
||||||
|
scope.launch {
|
||||||
|
bluetoothHandler.weightChannel.consumeAsFlow().collect {
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
binding.content.tvValue.text = String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"%.1f %s\n%s\n",
|
||||||
|
it.weight, it.unit.toString(),
|
||||||
|
dateFormat.format(it.timestamp ?: Calendar.getInstance())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -6,18 +6,6 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".ActivityScan">
|
tools:context=".ActivityScan">
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/mainText"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Waiting for measurement..."
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="24sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvPaired"
|
android:id="@+id/tvPaired"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|||||||
Reference in New Issue
Block a user