Skip to content

Commit f30ac55

Browse files
committed
implement sending Health Point data
1 parent 3404ec7 commit f30ac55

File tree

8 files changed

+130
-9
lines changed

8 files changed

+130
-9
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.example.isowatch
2+
3+
data class HealthPoint(
4+
val _id: String?,
5+
val idPemeriksaan: String,
6+
val timestamp: String,
7+
val heartRate: Int,
8+
val diastolicBloodPressure: Int,
9+
val sistolicBloodPressure: Int,
10+
val bloodOxygen: Int,
11+
val __v: Int?,
12+
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.example.isowatch
2+
3+
data class HealthPointContainer(
4+
val message: String?,
5+
val result: HealthPoint,
6+
)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.isowatch
2+
3+
import android.util.Log
4+
import retrofit2.Call
5+
import retrofit2.Callback
6+
import retrofit2.Response
7+
8+
class HealthPointService {
9+
private val tag = "Health Point Service"
10+
11+
fun addHealthPoint(healthPoint: HealthPoint, onResult: (HealthPointContainer?) -> Unit) {
12+
val retrofit = ServiceBuilder.buildService(HealthPointServiceInterface::class.java)
13+
retrofit.addHealthPoint(healthPoint).enqueue(
14+
object : Callback<HealthPointContainer> {
15+
override fun onResponse(
16+
call: Call<HealthPointContainer>,
17+
response: Response<HealthPointContainer>
18+
) {
19+
val result = response.body()
20+
Log.d(tag, "$result")
21+
onResult(result)
22+
}
23+
24+
override fun onFailure(call: Call<HealthPointContainer>, t: Throwable) {
25+
Log.e(tag, "add Health Point error: $t")
26+
onResult(null)
27+
}
28+
}
29+
)
30+
}
31+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.example.isowatch
2+
3+
import retrofit2.Call
4+
import retrofit2.http.Body
5+
import retrofit2.http.Headers
6+
import retrofit2.http.POST
7+
8+
interface HealthPointServiceInterface {
9+
@Headers("Content-Type: application/json")
10+
@POST("/patient/pemeriksaan/healthpoint")
11+
fun addHealthPoint(@Body healthPoint: HealthPoint): Call<HealthPointContainer>
12+
}

app/src/main/java/com/example/isowatch/MainActivity.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,6 @@ class MainActivity : Activity() {
5050
// make a Create Pemeriksaan API Call
5151
createPemeriksaan()
5252
}
53-
Toast.makeText(
54-
applicationContext,
55-
R.string.CreateMessage,
56-
Toast.LENGTH_SHORT
57-
)
5853
}
5954

6055
binding.root.findViewById<Button>(R.id.buttonStart).setOnClickListener {
@@ -69,8 +64,8 @@ class MainActivity : Activity() {
6964
Toast.makeText(
7065
applicationContext,
7166
R.string.CreateNotice,
72-
Toast.LENGTH_SHORT
73-
)
67+
Toast.LENGTH_LONG
68+
).show()
7469
}
7570
}
7671
}
@@ -88,8 +83,18 @@ class MainActivity : Activity() {
8883
pemeriksaanService.createPemeriksaan(pemeriksaan) {
8984
if (it?.idPemeriksaan != null) {
9085
idPemeriksaan = it.idPemeriksaan
86+
Toast.makeText(
87+
applicationContext,
88+
R.string.CreateMessage,
89+
Toast.LENGTH_LONG
90+
).show()
9191
} else {
9292
Log.e(tag,"Error creating Pemeriksaan")
93+
Toast.makeText(
94+
applicationContext,
95+
R.string.FailedMessage,
96+
Toast.LENGTH_LONG
97+
).show()
9398
}
9499
Log.i(tag,"result: $it")
95100
}

app/src/main/java/com/example/isowatch/MonitoringActivity.kt

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import androidx.core.app.ActivityCompat
1717
import com.example.isowatch.databinding.ActivityMonitoringBinding
1818
import com.google.android.material.progressindicator.CircularProgressIndicator
1919
import com.samsung.android.service.health.tracking.HealthTrackerException
20+
import java.time.LocalDateTime
21+
import java.time.format.DateTimeFormatter
2022
import java.util.concurrent.atomic.AtomicBoolean
2123

2224
class MonitoringActivity: Activity() {
@@ -30,10 +32,14 @@ class MonitoringActivity: Activity() {
3032
private lateinit var connectionManager: ConnectionManager
3133
private lateinit var heartRateListener: HeartRateListener
3234
private lateinit var spO2Listener: SpO2Listener
35+
private var idPemeriksaan = "0"
3336
private var connected = false
3437
private var permissionGranted = false
3538
private var previousSpO2Status = SpO2Status.INITIAL_STATUS
3639
private var heartRateDataLast = HeartRateData()
40+
private var heartRateDataStore = mutableListOf<Int>()
41+
private var spO2DataStore = 0
42+
private lateinit var timestamp: String
3743
private lateinit var txtHeartRate: TextView
3844
private lateinit var txtStatus: TextView
3945
private lateinit var txtSpo2: TextView
@@ -84,6 +90,12 @@ class MonitoringActivity: Activity() {
8490
} else {
8591
txtHeartRate.text = getString(R.string.HeartRateDefaultValue)
8692
}
93+
// store values when calculating
94+
if (previousSpO2Status == SpO2Status.CALCULATING) {
95+
if (hrData.status === HeartRateStatus.HR_STATUS_FIND_HR) {
96+
heartRateDataStore.add(hrData.hr)
97+
}
98+
}
8799
})
88100
}
89101

@@ -132,8 +144,10 @@ class MonitoringActivity: Activity() {
132144
Log.i(tag, "SpO2 measured: $spO2Value")
133145
butStart.setText(R.string.StartLabel)
134146
measurementProgress.setProgress(measurementProgress.max, true)
147+
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
135148
}
136-
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
149+
spO2DataStore = spO2Value
150+
sendHealthPoint()
137151
}
138152
}
139153
}
@@ -232,7 +246,7 @@ class MonitoringActivity: Activity() {
232246
createConnectionManager()
233247
}
234248

235-
val idPemeriksaan = intent?.extras?.getString("idPemeriksaan").toString()
249+
idPemeriksaan = intent?.extras?.getString("idPemeriksaan").toString()
236250
if(idPemeriksaan.isNotEmpty()){
237251
runOnUiThread {
238252
txtId.text = idPemeriksaan
@@ -361,4 +375,43 @@ class MonitoringActivity: Activity() {
361375
}
362376
return false
363377
}
378+
379+
private fun sendHealthPoint() {
380+
Log.d(tag, "entering sendHealthPoint()")
381+
// get current time
382+
timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME).toString()
383+
384+
// get avg heart rate in the measured time span
385+
var totalCapture = 0
386+
var avgHeartRate = 0
387+
for (data in heartRateDataStore) {
388+
totalCapture += data
389+
}
390+
if (heartRateDataStore.size > 0) avgHeartRate = totalCapture / heartRateDataStore.size
391+
392+
// call the service
393+
val healthPointService = HealthPointService()
394+
val healthPoint = HealthPoint(
395+
_id = null,
396+
idPemeriksaan = idPemeriksaan,
397+
timestamp = timestamp,
398+
heartRate = avgHeartRate,
399+
diastolicBloodPressure = 0,
400+
sistolicBloodPressure = 0,
401+
bloodOxygen = spO2DataStore,
402+
__v = null,
403+
)
404+
405+
healthPointService.addHealthPoint(healthPoint) {
406+
if (it?.result != null) {
407+
Log.i(tag, "Data berhasil terkirim!")
408+
} else {
409+
Log.e(tag,"Error creating Pemeriksaan")
410+
}
411+
Log.i(tag,"result: $it")
412+
}
413+
414+
heartRateDataStore.clear()
415+
spO2DataStore = 0
416+
}
364417
}

app/src/main/res/values-round/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<string name="StartMonitoring">Mulai Pemeriksaan</string>
33
<string name="CreatePemeriksaan">Buat Sesi</string>
44
<string name="CreateMessage">Sesi sudah berhasil dibuat</string>
5+
<string name="FailedMessage">Sesi gagal dibuat</string>
56
<string name="CreateNotice">Mohon buat sesi terlebih dahulu</string>
67
<string name="idPemeriksaan">ID Pemeriksaan: </string>
78
<string name="idValue">0</string>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<string name="StartMonitoring">Mulai Pemeriksaan</string>
88
<string name="CreatePemeriksaan">Buat Sesi</string>
99
<string name="CreateMessage">Sesi sudah berhasil dibuat</string>
10+
<string name="FailedMessage">Sesi gagal dibuat</string>
1011
<string name="CreateNotice">Mohon buat sesi terlebih dahulu</string>
1112
<string name="idPemeriksaan">ID Pemeriksaan: </string>
1213
<string name="idValue">0</string>

0 commit comments

Comments
 (0)