fix hemocube db save error

- add mapper to hemocube data
	- save test details correctly on dataholder
	- add result data from device on test details
This commit is contained in:
Pritimay Sarkar
2023-08-02 11:32:23 +05:30
parent 9382708140
commit f6613b3b69
5 changed files with 51 additions and 31 deletions

View File

@@ -22,7 +22,7 @@ object DataHolder {
val wavelengthToPixelArray = ArrayList<Double>()
val intensityReferenceArray = ArrayList<Double>()
var selectedTest: UserData? = null
var HomocubeTestType: HemoCubeTestData? = null
var hemoCubeTestData: HemoCubeTestData? = null
var kitSerial: String = ""

View File

@@ -10,8 +10,10 @@ data class HemoCubeTestData(
var name: String = "",
var birthYear: String = "",
var userImageURL: String = "",
var location: UserData.Location? = null,
var createdBy: String? = "",
var reportUploadTime: String? = "",
var testType: String? = "HEMOCUBE",
var testTime: String? = "",
var testStatus: Boolean? = false,
var mobileId: String = "",
@@ -19,6 +21,7 @@ data class HemoCubeTestData(
var kitSerial: String = "",
var reportPath: String = "",
var resultRatio: Double? = null,
var resultData: String = "",
var led1: Double? = null,
var led2: Double? = null
)

View File

@@ -36,3 +36,20 @@ data class UserData(
var longitude: Double? = null
)
}
fun UserData.toHemoCubeTestData() = HemoCubeTestData(
_id = _id,
name = name,
birthYear = birthYear,
userImageURL = userImageURL,
location = location,
createdBy = createdBy,
reportUploadTime = reportUploadTime,
testTime = testTime,
testStatus = testStatus,
mobileId = mobileId,
deviceSerialNumber = deviceSerialNumber,
kitSerial = kitSerial,
reportPath = reportPath,
resultRatio = resultRatio,
)

View File

@@ -1,8 +1,6 @@
package com.example.hpostesting.presentation.hemocube
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbDeviceConnection
@@ -14,10 +12,10 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.lifecycle.ViewModel;
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import com.example.hpostesting.data.DataHolder
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
import com.example.hpostesting.presentation.UsbServiceListener
import `in`.sminnovations.hpostesting.R
import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding
@@ -25,7 +23,8 @@ import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBindi
class HemoCubeFragment : Fragment() {
private var testTime: String? = null
private var resultRatio: String? = null
private var resultRatio: String? = ""
private var resultData: String = ""
private var kitSerial: String? = null
private lateinit var binding: FragmentHemoCubeReferenceBinding
private val hemoCubeViewModel: HemoCubeViewModel by activityViewModels()
@@ -68,8 +67,8 @@ class HemoCubeFragment : Fragment() {
hemoCubeViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
apply {
kitSerial = DataHolder.HomocubeTestType?.kitSerial
testTime = DataHolder.HomocubeTestType?.testTime
kitSerial = DataHolder.hemoCubeTestData?.kitSerial
testTime = DataHolder.hemoCubeTestData?.testTime
isOnline = isNetworkAvailable
}
}
@@ -83,33 +82,35 @@ class HemoCubeFragment : Fragment() {
binding.btnSubmit.setOnClickListener {
Toast.makeText(
requireContext(),
"Test Data uploaded",
Toast.LENGTH_SHORT
).show()
Log.e("Testdb", "success")
binding.progressBar.visibility = View.VISIBLE
if (DataHolder.hemoCubeTestData == null) {
DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData()
}
if (isOnline) {
resultRatio?.let { ratio ->
Log.e("Testdb", "upload")
hemoCubeViewModel.uploadHemocubeResultToDatabase(
hemoCubeViewModel.uploadHemoCubeResultToDatabase(
requireContext(),
isOnline,
true,
kitSerial,
ratio,
resultData,
testTime
)
}
binding.progressBar.visibility = View.VISIBLE
} else {
resultRatio?.let { ratio ->
hemoCubeViewModel.uploadHemocubeResultToDatabase(
hemoCubeViewModel.uploadHemoCubeResultToDatabase(
requireContext(),
isOnline,
true,
kitSerial,
ratio,
resultData,
testTime
)
}
@@ -164,7 +165,6 @@ class HemoCubeFragment : Fragment() {
Log.d("greenBuffer", blueBIntensity.toString())
}
private fun displayValuesOnTextView(parsedData: Map<String, String>) {
val fullReadOutput = StringBuilder()
val textView: TextView = requireView().findViewById(R.id.tv_subtitle4)
@@ -179,6 +179,10 @@ class HemoCubeFragment : Fragment() {
}
private fun fetchHemoCubeResult() {
if (DataHolder.hemoCubeTestData == null) {
DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData()
}
hemoCubeViewModel.progressBar.postValue(true)
val fullReadOutput = StringBuilder()
(activity as HemocubeActivity).mService.eventDrivenWriteHemoCube(object :
@@ -189,8 +193,10 @@ class HemoCubeFragment : Fragment() {
fullReadOutput.append(stringData)
binding.tvSubtitle4.text = fullReadOutput
resultRatio = fullReadOutput.toString()
val data = parseUsbData(fullReadOutput.toString())
resultData = fullReadOutput.toString()
DataHolder.hemoCubeTestData?.resultData = resultData
resultRatio = "" //TODO
val pareseddata = parseUsbData(fullReadOutput.toString())
Log.d("Result", data.toString())
hemoCubeViewModel.progressBar.postValue(false)
}
@@ -202,7 +208,6 @@ class HemoCubeFragment : Fragment() {
})
}
private fun fetchHemoCubeResultNew() {
hemoCubeViewModel.progressBar.postValue(true)
val fullReadOutput = StringBuilder()
@@ -239,10 +244,4 @@ class HemoCubeFragment : Fragment() {
}
})
}
}

View File

@@ -2,8 +2,6 @@ package com.example.hpostesting.presentation.hemocube
import android.content.Context
import android.util.Log
import android.widget.Toast
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
@@ -12,6 +10,7 @@ import com.example.hpostesting.data.DataHolder
import com.example.hpostesting.data.NetworkStatusLiveData
import com.example.hpostesting.data.dao.HemoCubeDao
import com.example.hpostesting.data.model.Response
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
import com.example.hpostesting.data.repository.DatabaseRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
@@ -19,6 +18,7 @@ import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import javax.inject.Inject
@HiltViewModel
class HemoCubeViewModel @Inject constructor(
private val hemoCubeDao: HemoCubeDao,
@@ -27,15 +27,15 @@ class HemoCubeViewModel @Inject constructor(
) : ViewModel() {
var isServiceConnected = false
val progressBar = MutableLiveData(false)
val testDetails = DataHolder.HomocubeTestType
val testDetailuser = DataHolder.selectedTest
val testDetails = DataHolder.selectedTest?.toHemoCubeTestData()
private val _networkStatusLiveData = NetworkStatusLiveData(context)
val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData
val fireBaseUpload = MutableLiveData<String>()
fun uploadHemocubeResultToDatabase(
fun uploadHemoCubeResultToDatabase(
context: Context, isOnline: Boolean, testStatus: Boolean, kitSerial: String?,
resultRatio: String,
resultData: String,
testTime: String?
) = viewModelScope.launch {
if (kitSerial != null) {
@@ -63,7 +63,8 @@ class HemoCubeViewModel @Inject constructor(
private fun addResultTestToDb() {
testDetails?.resultRatio = DataHolder.hemocubeResult
testDetailuser?.location = DataHolder.location
testDetails?.resultData = DataHolder.hemoCubeTestData?.resultData.toString()
testDetails?.location = DataHolder.location
testDetails?.testTime = SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
).format(Calendar.getInstance().time)