Skip to content

Commit

Permalink
feat(core): Finished BP Recordings
Browse files Browse the repository at this point in the history
  • Loading branch information
davidnjau committed Oct 18, 2022
1 parent 04d08b3 commit ad3be1e
Show file tree
Hide file tree
Showing 11 changed files with 206 additions and 119 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ android {
}
resources.excludes.add("META-INF/*")
}

// buildscript {
// ext{
// kotlinVersion = '1.4.20'
Expand All @@ -56,8 +57,7 @@ android {

dependencies {

// implementation 'com.michalsvec:single-row-calednar:1.0.0'

implementation 'com.vivekkaushik.datepicker:datePickerTimeline:0.0.4'

implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,3 +296,15 @@ data class DbWatchDataValues(
)



data class DbWatchTimeData(
val time: String,
val readings: DbWatchRecord
)
data class DbWatchRecord(
val systolic: String,
val diastolic: String,
val pulse: String,
)


Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ class FormatterClass {

return "$day-$month-$year"
}
private fun getDateDetails(dateStr: String): Triple<Int?, Int?, Int?> {
fun getDateDetails(dateStr: String): Triple<Int?, Int?, Int?> {

val formatter = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ class SmartWatchReadingAdapter(private var entryList: ArrayList<DbWatchData>,

holder.tvReadingDate.text = appointmentDate

val confirmParentAdapter = SmartWatchReadingDataAdapter(readingsList,context)
holder.recyclerView.adapter = confirmParentAdapter
// val confirmParentAdapter = SmartWatchReadingDataAdapter(readingsList,context)
// holder.recyclerView.adapter = confirmParentAdapter



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,19 @@ import com.intellisoft.kabarakmhis.R
import com.intellisoft.kabarakmhis.helperclass.DbSmartWatchReadings
import com.intellisoft.kabarakmhis.helperclass.DbWatchDataValues
import com.intellisoft.kabarakmhis.helperclass.DbWatchReading
import com.intellisoft.kabarakmhis.helperclass.DbWatchTimeData


class SmartWatchReadingDataAdapter(private var entryList: ArrayList<DbWatchDataValues>,
class SmartWatchReadingDataAdapter(private var entryList: ArrayList<DbWatchTimeData>,
private val context: Context) : RecyclerView.Adapter<SmartWatchReadingDataAdapter.PagerViewHolder>() {

inner class PagerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
View.OnClickListener {

val tvTime: TextView = itemView.findViewById(R.id.tvTime)
val tvType: TextView = itemView.findViewById(R.id.tvType)
val tvValue: TextView = itemView.findViewById(R.id.tvValue)
val tvSys: TextView = itemView.findViewById(R.id.tvSys)
val tvDia: TextView = itemView.findViewById(R.id.tvDia)
val tvHr: TextView = itemView.findViewById(R.id.tvHr)

init {

Expand Down Expand Up @@ -55,74 +57,14 @@ class SmartWatchReadingDataAdapter(private var entryList: ArrayList<DbWatchDataV

override fun onBindViewHolder(holder: PagerViewHolder, position: Int) {

val text = entryList[position].text
val value = entryList[position].value
val time = entryList[position].time

holder.tvTime.text = time
holder.tvValue.text = value
holder.tvType.text = text

// validateReadings(text, value, holder.tvValue)


}

//Validate diastolic, sytolic and pulse readings
private fun validateReadings(text: String, valueData: String, textView: TextView) {


val reversedText = valueData.reversed()
if (text.contains("Systolic") || text.contains("Diastolic")) {

val value = reversedText.substring(4, reversedText.length)
val reversedValue = value.reversed().trim()

val valueInt = reversedValue.toInt()

if (text.contains("Systolic")) {
if (valueInt <= 70) {
textView.setBackgroundColor(context.resources.getColor(R.color.moderate_risk))
} else if (valueInt <= 80) {
textView.setBackgroundColor(context.resources.getColor(R.color.orange))
} else if (valueInt <= 110) {
textView.setBackgroundColor(context.resources.getColor(R.color.yellow))
} else if (valueInt <= 130)
textView.setBackgroundColor(context.resources.getColor(android.R.color.holo_green_light))
else {
textView.setBackgroundColor(context.resources.getColor(R.color.moderate_risk))
}

}
if (text.contains("Diastolic")) {
if (valueInt <= 60) {
textView.setBackgroundColor(context.resources.getColor(R.color.yellow))
} else if (valueInt <= 90) {
textView.setBackgroundColor(context.resources.getColor(R.color.low_risk))
} else {
textView.setBackgroundColor(context.resources.getColor(R.color.moderate_risk))
}
}
val readingsData = entryList[position].readings

}

if (text.contains("Heart")) {
val value = reversedText.substring(3, reversedText.length)
val reversedValue = value.reversed().trim()
val valueInt = reversedValue.toInt()

Log.e("value", value.toString())
Log.e("valueInt", valueInt.toString())


if (valueInt <= 60) {
textView.setBackgroundColor(context.resources.getColor(R.color.moderate_risk))
} else if (valueInt <= 100) {
textView.setBackgroundColor(context.resources.getColor(R.color.low_risk))
} else {
textView.setBackgroundColor(context.resources.getColor(R.color.moderate_risk))
}
}
holder.tvSys.text = readingsData.systolic
holder.tvDia.text = readingsData.diastolic
holder.tvHr.text = readingsData.pulse

}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.intellisoft.kabarakmhis.new_designs.screens

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.viewModels
import androidx.fragment.app.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
Expand All @@ -16,10 +15,19 @@ import com.intellisoft.kabarakmhis.fhir.viewmodels.MainActivityViewModel
import com.intellisoft.kabarakmhis.fhir.viewmodels.PatientDetailsViewModel
import com.intellisoft.kabarakmhis.helperclass.*
import com.intellisoft.kabarakmhis.new_designs.physical_examination.tab_layout.SmartWatchReadingAdapter
import com.intellisoft.kabarakmhis.new_designs.physical_examination.tab_layout.SmartWatchReadingDataAdapter
import com.vivekkaushik.datepicker.DatePickerTimeline
import com.vivekkaushik.datepicker.OnDateSelectedListener
import kotlinx.android.synthetic.main.activity_bp_monitoring.*
import kotlinx.android.synthetic.main.fragment_smart_reading.*
import kotlinx.android.synthetic.main.fragment_smart_reading.no_record
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.time.LocalDate
import java.util.*
import kotlin.collections.ArrayList


class BpMonitoring : AppCompatActivity() {

Expand All @@ -32,19 +40,34 @@ class BpMonitoring : AppCompatActivity() {
private lateinit var layoutManager: RecyclerView.LayoutManager

private lateinit var recyclerView: RecyclerView


private lateinit var datePickerTimeline: DatePickerTimeline

//Get current year
private val currentYear = LocalDate.now().year
//Get current month
private val currentMonth = LocalDate.now().monthValue - 2
//Get current day
private val currentDay = LocalDate.now().dayOfMonth

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bp_monitoring)

mainViewModel.poll()

datePickerTimeline = findViewById(R.id.datePickerTimeline)

patientId = formatterClass.retrieveSharedPreference(this, "patientId").toString()
fhirEngine = FhirApplication.fhirEngine(this)

patientDetailsViewModel = ViewModelProvider(this,
PatientDetailsViewModel.
PatientDetailsViewModelFactory(this.application,fhirEngine, patientId)
patientDetailsViewModel = ViewModelProvider(
this,
PatientDetailsViewModel.PatientDetailsViewModelFactory(
this.application,
fhirEngine,
patientId
)
)[PatientDetailsViewModel::class.java]

recyclerView = findViewById(R.id.recyclerView);
Expand All @@ -55,83 +78,145 @@ class BpMonitoring : AppCompatActivity() {
)
recyclerView.layoutManager = layoutManager
recyclerView.setHasFixedSize(true)


initDateSelector(currentYear, currentMonth, currentDay)




}

private fun initDateSelector(year: Int, month: Int, day: Int) {

// Set a Start date as today's date

datePickerTimeline.setInitialDate(year, month, day)
// Set a date Selected Listener
datePickerTimeline.setOnDateSelectedListener(object : OnDateSelectedListener {
override fun onDateSelected(year: Int, month: Int, day: Int, dayOfWeek: Int) {

//Pass the date to the function
getWatchReadings(year, month, day)

}

override fun onDisabledDateSelected(
year: Int,
month: Int,
day: Int,
dayOfWeek: Int,
isDisabled: Boolean
) {
// Do Something
}
})

}


override fun onStart() {
super.onStart()

getWatchReadings(currentYear, currentMonth, currentDay)

}

private fun getWatchReadings(year: Int, month: Int, day: Int) {

val newDate = "$year-${month + 1}-$day"

CoroutineScope(Dispatchers.IO).launch {

val smartWatchReadingList = patientDetailsViewModel.getObservationFromEncounter(
DbObservationValues.CLIENT_WEARABLE_RECORDING.name)
if (smartWatchReadingList.isNotEmpty()){

//Get Observations
val datesAvailable = ArrayList<String>()

//Get Observations
val id = smartWatchReadingList[0].id

val observationList = patientDetailsViewModel.getObservationsFromEncounter(id)

val dbWatchDataList = ArrayList<DbWatchData>()

observationList.groupBy { it.issued }.forEach { (issued, observationItems) ->

//Get the group date and convert to human readable date
val issuedDate = issued.toString()

datesAvailable.add(issuedDate)
val dbWatchDataValuesList = ArrayList<DbWatchDataValues>()

//Get the observations for the group date
observationItems.forEach {

val dbSmartWatchReading = DbWatchDataValues(
time = it.issuedTime.toString(),
text = it.text,
value = it.value)
dbWatchDataValuesList.add(dbSmartWatchReading)

}

dbWatchDataValuesList.sortBy { it.time }

val dbWatchData = DbWatchData(date = issuedDate, readings = dbWatchDataValuesList)
dbWatchDataList.add(dbWatchData)
}
//Sort the list by date
dbWatchDataList.sortBy { it.date }
val dbWatchTimeDataList = ArrayList<DbWatchTimeData>()
//Check if the date is in the list and filter the list
val filteredList = dbWatchDataList.filter { it.date == newDate }
filteredList.forEach {
it.readings.groupBy { it.time }.forEach { (time, readings) ->

var systolic = ""
var diastolic = ""
var pulse = ""

readings.forEach { watch ->

}
val text = watch.text
val value = watch.value

if (text.contains("Systolic")){
systolic = value
}
if (text.contains("Diastolic")){
diastolic = value
}
if (text.contains("Heart")){
pulse = value
}

}

val readingsData = DbWatchRecord(systolic = systolic, diastolic = diastolic, pulse = pulse)

val dbWatchTimeData = DbWatchTimeData(time = time, readings = readingsData)
dbWatchTimeDataList.add(dbWatchTimeData)

}
}

datesAvailable.sortBy { it }

CoroutineScope(Dispatchers.Main).launch {

if (observationList.isNotEmpty()){
//Convert the list to string
val datesAvailableString = datesAvailable.joinToString(separator = " , ")
tvDate.text = "Available dates: $datesAvailableString"

if (filteredList.isNotEmpty()){
no_record.visibility = View.GONE
recyclerView.visibility = View.VISIBLE
}else{
no_record.visibility = View.VISIBLE
recyclerView.visibility = View.GONE
}

val configurationListingAdapter = SmartWatchReadingAdapter(
dbWatchDataList,this@BpMonitoring)
val configurationListingAdapter = SmartWatchReadingDataAdapter(
dbWatchTimeDataList,this@BpMonitoring)
recyclerView.adapter = configurationListingAdapter

}

Log.e("dbSmartWatchReadingsList", dbWatchDataList.toString())


}

}




}

}
Loading

0 comments on commit ad3be1e

Please sign in to comment.