From 88aab7c5273b5d14ba3ff4508fb38f81cb6897d7 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 15:23:00 +0530 Subject: [PATCH 1/5] negative abs warning --- .../hpostesting/presentation/hemocube/HemoCubeFragment.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt index aae9d13..65f4fac 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt @@ -354,6 +354,14 @@ class HemoCubeFragment : Fragment() { // } // } // } + + if (led1Average < 0 || led2Average < 0) { + activity?.runOnUiThread{ + binding.errorMessage.text = "Warning: Negative Abs. Retake Blank Reading" + binding.errorMessage.visibility = View.VISIBLE + } + } + DataHolder.hemoCubeTestData?.apply { deviceId = deviceSerialNo led1Buffer = led1BufferForDevice From 8872e484a15c079ecebc8f7c3e3f511dd3f83e37 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Mon, 30 Oct 2023 21:08:02 +0530 Subject: [PATCH 2/5] refactoring --- .../data/constant/HemoCubeCommands.kt | 2 +- .../HemoCubeBufferCheckFragment.kt | 3 +- .../diagnostics/DiagnosticsFragment.kt | 34 +++---------------- 3 files changed, 7 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt b/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt index 9cf44a6..1a806e2 100644 --- a/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt +++ b/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt @@ -2,7 +2,7 @@ package com.example.hpostesting.data.constant enum class HemoCubeCommands(val command: String) { startBuffer("B\r"), - getBuffer("D\r"), + runDiagnostics("D\r"), startSample("S\r"), getSample("P\r"), getDeviceId("I\r"), diff --git a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt index 4be9f3d..a7a9337 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt @@ -225,6 +225,7 @@ class HemoCubeBufferCheckFragment : Fragment() { val led1Average = log10(led1BufferForDevice?.div(led1Sample!!) ?: 0.0) val led2Average = log10(led2BufferForDevice?.div(led2Sample!!) ?: 0.0) val deviceRatio = led1Average / led2Average + val calculateRatio = calculateRatio(deviceRatio) val classificationResult = findResult(deviceRatio) messages.postValue(classificationResult) val bufferData = BufferCheckData( @@ -237,7 +238,7 @@ class HemoCubeBufferCheckFragment : Fragment() { led1Sample = led1Sample, led2Sample = led2Sample, deviceRatio = deviceRatio, - calculatedRatio = calculateRatio(deviceRatio), + calculatedRatio = calculateRatio, classificationResult = classificationResult, deviceSerialNumber = sharedPreferences.getString(Constants.USER_ID, "").toString(), testTime = SimpleDateFormat( diff --git a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt index 3d51759..5c10c99 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt @@ -7,24 +7,16 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.MutableLiveData -import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.constant.HemoCubeCommands import com.example.hpostesting.data.model.diagnostics.DiagnosticsData import com.example.hpostesting.data.model.patient.DeviceData -import com.example.hpostesting.data.model.patient.toHemoCubeTestData import com.example.hpostesting.presentation.UsbServiceListener -import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel -import com.example.hpostesting.presentation.hemocube.HemocubeActivity -import com.example.hpostesting.presentation.utils.MyDialogListener -import com.example.hpostesting.presentation.utils.UIUtils import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.ktx.Firebase -import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentDiagnosticsBinding import java.text.SimpleDateFormat import java.util.Calendar @@ -38,7 +30,6 @@ class DiagnosticsFragment : Fragment() { private var currentDeviceData: DeviceData? = null private var resultData: String = "" private val messages = MutableLiveData() - private var isTestOngoing = false private var startListening = MutableLiveData(false) override fun onCreateView( @@ -62,7 +53,7 @@ class DiagnosticsFragment : Fragment() { getDeviceId() binding.btnSubmit.setOnClickListener { binding.btnSubmit.visibility = View.GONE - getBufferdiagnostics() + runDeviceDiagnostics() } } @@ -73,23 +64,6 @@ class DiagnosticsFragment : Fragment() { currentDeviceData = it } - diagnosticsViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable -> - if (isNetworkAvailable) { -// diagnosticsViewModel.getDeviceData( -// sharedPreferences.getString( -// Constants.USER_ID, -// "" -// ) -// ) - } else { - Toast.makeText( - requireContext(), - "No internet connection avaiable", - Toast.LENGTH_SHORT - ).show() - } - } - messages.observe(viewLifecycleOwner) { binding.tvSubtitle4.text = it Log.e("diagnostics",binding.tvSubtitle4.text.toString()) @@ -110,7 +84,7 @@ class DiagnosticsFragment : Fragment() { if (matchResult != null) { val (sn, hardwareId) = matchResult.destructured with(sharedPreferences.edit()) { - putString(com.example.hpostesting.data.constant.Constants.DEVICE_ID, hardwareId) + putString(Constants.DEVICE_ID, hardwareId) apply() } } @@ -123,10 +97,10 @@ class DiagnosticsFragment : Fragment() { }) } - private fun getBufferdiagnostics() { + private fun runDeviceDiagnostics() { diagnosticsViewModel.progressBar.postValue(true) (activity as DiagnosticsActivity).mService.sendAndListenToHemoCube( - HemoCubeCommands.getBuffer, + HemoCubeCommands.runDiagnostics, object : UsbServiceListener { override fun onUsbRead(data: ByteArray?) { From f4085545eafefcd57834973945cade260a774fe4 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Mon, 30 Oct 2023 23:25:45 +0530 Subject: [PATCH 3/5] use calculated ratio for class and save coeffs --- .../presentation/buffercheck/HemoCubeBufferCheckFragment.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt index a7a9337..deb77e1 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemoCubeBufferCheckFragment.kt @@ -226,7 +226,7 @@ class HemoCubeBufferCheckFragment : Fragment() { val led2Average = log10(led2BufferForDevice?.div(led2Sample!!) ?: 0.0) val deviceRatio = led1Average / led2Average val calculateRatio = calculateRatio(deviceRatio) - val classificationResult = findResult(deviceRatio) + val classificationResult = findResult(calculateRatio) messages.postValue(classificationResult) val bufferData = BufferCheckData( deviceId= deviceId, @@ -239,6 +239,7 @@ class HemoCubeBufferCheckFragment : Fragment() { led2Sample = led2Sample, deviceRatio = deviceRatio, calculatedRatio = calculateRatio, + coefficients = currentDeviceData?.coefficients?.get(0).toString() + ", " + currentDeviceData?.coefficients?.get(1).toString(), classificationResult = classificationResult, deviceSerialNumber = sharedPreferences.getString(Constants.USER_ID, "").toString(), testTime = SimpleDateFormat( From 044c5db1610f59e5a0831b51b1782372c97af566 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Mon, 30 Oct 2023 23:48:49 +0530 Subject: [PATCH 4/5] add coefficients in models and save coeffs in db --- .../example/hpostesting/data/model/patient/BufferCheckData.kt | 1 + .../example/hpostesting/data/model/patient/HemoCubeTestData.kt | 1 + .../hpostesting/presentation/hemocube/HemoCubeFragment.kt | 1 + .../hpostesting/presentation/hemocube/HemoCubeViewModel.kt | 1 + 4 files changed, 4 insertions(+) diff --git a/app/src/main/java/com/example/hpostesting/data/model/patient/BufferCheckData.kt b/app/src/main/java/com/example/hpostesting/data/model/patient/BufferCheckData.kt index 3a8a37f..4f0c996 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/patient/BufferCheckData.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/patient/BufferCheckData.kt @@ -15,6 +15,7 @@ data class BufferCheckData( var led2Average: Double? = null, var deviceRatio: Double? = null, var calculatedRatio: Double? = null, + var coefficients: String? = "", var classificationResult: String = "", var testTime: String = "" ) \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt b/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt index 3c2aa5f..5599862 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt @@ -30,5 +30,6 @@ data class HemoCubeTestData( var led2Average: Double? = null, var deviceRatio: Double? = null, var calculatedRatio: Double? = null, + var coefficients: String? = "", var classificationResult: String = "" ) diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt index 65f4fac..ee592d9 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt @@ -373,6 +373,7 @@ class HemoCubeFragment : Fragment() { this.led2Average = led2Average this.deviceRatio = deviceRatio this.calculatedRatio = calculateRatio(deviceRatio) + this.coefficients = currentDeviceData?.coefficients?.get(0).toString() + ", " + currentDeviceData?.coefficients?.get(1).toString() this.classificationResult = findResult(calculatedRatio) hemoCubeViewModel.messages.postValue(this.classificationResult) this.resultData = deviceLog diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index a6dad19..73d05fc 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -101,6 +101,7 @@ class HemoCubeViewModel @Inject constructor( testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio testDetails?.calculatedRatio = DataHolder.hemoCubeTestData?.calculatedRatio + testDetails?.coefficients = DataHolder.hemoCubeTestData?.coefficients testDetails?.classificationResult = DataHolder.hemoCubeTestData?.classificationResult!! } From 51f3e31f270710ac3ab66e95883855ac7ccb8fca Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Tue, 31 Oct 2023 01:57:49 +0530 Subject: [PATCH 5/5] fix diagnostics reading - show and hide start button - show toast message after db upload - fix deviceid blank --- .../diagnostics/DiagnosticsFragment.kt | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt index 5c10c99..fd48f9e 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt @@ -7,6 +7,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.MutableLiveData @@ -49,6 +50,7 @@ class DiagnosticsFragment : Fragment() { private fun initViews() { + binding.btnSubmit.visibility = View.GONE listenToHemoCube() getDeviceId() binding.btnSubmit.setOnClickListener { @@ -68,6 +70,17 @@ class DiagnosticsFragment : Fragment() { binding.tvSubtitle4.text = it Log.e("diagnostics",binding.tvSubtitle4.text.toString()) } + + diagnosticsViewModel.fireBaseUpload.observe(viewLifecycleOwner) { result -> + if (result == "Success") { + showToast("Diagnostics data uploaded successfully") + } + if (result == "Local") { + showToast("Diagnostics uploading failed, note it down manually") + } + + binding.progressBar.visibility = View.GONE + } } private fun getDeviceId() { @@ -79,15 +92,6 @@ class DiagnosticsFragment : Fragment() { data?.let { val stringData = String(it) diagnosticsViewModel.messages.postValue(stringData) - val pattern = Regex("([A-Z]+)\\s(\\d+)") - val matchResult = pattern.find(stringData) - if (matchResult != null) { - val (sn, hardwareId) = matchResult.destructured - with(sharedPreferences.edit()) { - putString(Constants.DEVICE_ID, hardwareId) - apply() - } - } binding.tvSubtitle4.text = stringData } } @@ -112,8 +116,6 @@ class DiagnosticsFragment : Fragment() { }) } - - private fun listenToHemoCube() { val fullReadOutput = StringBuilder() @@ -128,6 +130,19 @@ class DiagnosticsFragment : Fragment() { fullReadOutput.append(stringData) resultData += stringData binding.tvSubtitle4.text = resultData + if (stringData.contains("SN")) { + val slData = stringData.split(" ") + if (slData.size > 1) { + val hardwareId = slData[1].trim() + with(sharedPreferences.edit()) { + putString(Constants.DEVICE_ID, hardwareId) + apply() + } + } + activity?.runOnUiThread { + binding.btnSubmit.visibility = View.VISIBLE + } + } } if (resultData.contains("END") || fullReadOutput.contains("END")) { @@ -176,5 +191,7 @@ class DiagnosticsFragment : Fragment() { return parsedData } - + private fun showToast(message: String) { + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() + } } \ No newline at end of file