Compare commits
11 Commits
samplebuff
...
CrashIssue
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0624a8fb5e | ||
|
|
d5553d9a23 | ||
|
|
a54c720d8f | ||
|
|
f183a1dab3 | ||
|
|
281946ffde | ||
|
|
7e32a10186 | ||
|
|
d823821026 | ||
|
|
61e5fbf4a1 | ||
|
|
e5da37064a | ||
|
|
19289a5c33 | ||
|
|
da3a89245e |
2
app/.gitignore
vendored
2
app/.gitignore
vendored
@@ -1,3 +1,3 @@
|
|||||||
/build
|
/build
|
||||||
/google-services*
|
/google-services.json
|
||||||
/idea
|
/idea
|
||||||
@@ -18,8 +18,8 @@ android {
|
|||||||
applicationId "in.sminnovations.hpostesting"
|
applicationId "in.sminnovations.hpostesting"
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 34
|
targetSdk 34
|
||||||
versionCode 10
|
versionCode 7
|
||||||
versionName "2.1.10"
|
versionName "2.1.7"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,5 @@ data class HemoCubeTestData(
|
|||||||
var led1Average: Double? = null,
|
var led1Average: Double? = null,
|
||||||
var led2Average: Double? = null,
|
var led2Average: Double? = null,
|
||||||
var deviceRatio: Double? = null,
|
var deviceRatio: Double? = null,
|
||||||
var calculatedRatio: Double? = null,
|
var calculatedRatio: Double? = null
|
||||||
var classificationResult: String = ""
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import androidx.navigation.ui.navigateUp
|
|||||||
import androidx.navigation.ui.setupActionBarWithNavController
|
import androidx.navigation.ui.setupActionBarWithNavController
|
||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
//import com.google.firebase.appdistribution.FirebaseAppDistribution
|
import com.google.firebase.appdistribution.FirebaseAppDistribution
|
||||||
//import com.google.firebase.appdistribution.FirebaseAppDistributionException
|
import com.google.firebase.appdistribution.FirebaseAppDistributionException
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import `in`.sminnovations.hpostesting.R
|
import `in`.sminnovations.hpostesting.R
|
||||||
import `in`.sminnovations.hpostesting.databinding.ActivityDashboardBinding
|
import `in`.sminnovations.hpostesting.databinding.ActivityDashboardBinding
|
||||||
@@ -60,25 +60,25 @@ class DashboardActivity : AppCompatActivity() {
|
|||||||
super.onResume()
|
super.onResume()
|
||||||
// Copy and paste this into any part of your app - for example, in your main
|
// Copy and paste this into any part of your app - for example, in your main
|
||||||
// activity's onResume method.
|
// activity's onResume method.
|
||||||
// val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
|
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
|
||||||
// firebaseAppDistribution.updateIfNewReleaseAvailable()
|
firebaseAppDistribution.updateIfNewReleaseAvailable()
|
||||||
// .addOnProgressListener { updateProgress ->
|
.addOnProgressListener { updateProgress ->
|
||||||
// Toast.makeText(this, "Updating", Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, "Updating", Toast.LENGTH_SHORT).show()
|
||||||
// }
|
}
|
||||||
// .addOnFailureListener { e ->
|
.addOnFailureListener { e ->
|
||||||
// // (Optional) Handle errors.
|
// (Optional) Handle errors.
|
||||||
// if (e is FirebaseAppDistributionException) {
|
if (e is FirebaseAppDistributionException) {
|
||||||
// when (e.errorCode) {
|
when (e.errorCode) {
|
||||||
// FirebaseAppDistributionException.Status.NOT_IMPLEMENTED -> {
|
FirebaseAppDistributionException.Status.NOT_IMPLEMENTED -> {
|
||||||
// // SDK did nothing. This is expected when building for Play.
|
// SDK did nothing. This is expected when building for Play.
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// else -> {
|
else -> {
|
||||||
// // Handle other errors.
|
// Handle other errors.
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ import com.example.hpostesting.presentation.UsbServiceListener
|
|||||||
import com.example.hpostesting.presentation.dashboard.DashboardActivity
|
import com.example.hpostesting.presentation.dashboard.DashboardActivity
|
||||||
import com.example.hpostesting.presentation.utils.MyDialogListener
|
import com.example.hpostesting.presentation.utils.MyDialogListener
|
||||||
import com.example.hpostesting.presentation.utils.UIUtils
|
import com.example.hpostesting.presentation.utils.UIUtils
|
||||||
import com.google.firebase.crashlytics.ktx.crashlytics
|
|
||||||
import com.google.firebase.firestore.FirebaseFirestore
|
import com.google.firebase.firestore.FirebaseFirestore
|
||||||
import com.google.firebase.firestore.ktx.firestore
|
import com.google.firebase.firestore.ktx.firestore
|
||||||
import com.google.firebase.ktx.Firebase
|
import com.google.firebase.ktx.Firebase
|
||||||
|
import `in`.sminnovations.hpostesting.BuildConfig
|
||||||
import `in`.sminnovations.hpostesting.R
|
import `in`.sminnovations.hpostesting.R
|
||||||
import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding
|
import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -47,7 +47,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
private var isTestOngoing = false
|
private var isTestOngoing = false
|
||||||
private var startListening = MutableLiveData<Boolean>(false)
|
private var startListening = MutableLiveData<Boolean>(false)
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?,
|
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
binding = FragmentHemoCubeReferenceBinding.inflate(inflater, container, false)
|
binding = FragmentHemoCubeReferenceBinding.inflate(inflater, container, false)
|
||||||
sharedPreferences =
|
sharedPreferences =
|
||||||
@@ -91,9 +91,6 @@ class HemoCubeFragment : Fragment() {
|
|||||||
it.visibility = View.GONE
|
it.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
binding.btnKit.setOnClickListener {
|
binding.btnKit.setOnClickListener {
|
||||||
if (isTestOngoing) {
|
if (isTestOngoing) {
|
||||||
val title = "WARNING"
|
val title = "WARNING"
|
||||||
@@ -172,49 +169,41 @@ class HemoCubeFragment : Fragment() {
|
|||||||
|
|
||||||
hemoCubeViewModel.deviceData.observe(viewLifecycleOwner) {
|
hemoCubeViewModel.deviceData.observe(viewLifecycleOwner) {
|
||||||
currentDeviceData = it
|
currentDeviceData = it
|
||||||
|
// showToast(calculateRatio(0.17).toString())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hemoCubeViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
|
hemoCubeViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
|
||||||
apply {
|
isOnline = isNetworkAvailable
|
||||||
DataHolder.hemoCubeTestData?.let {
|
|
||||||
currentDeviceData?.coefficients?.let { coefficients ->
|
|
||||||
val coefficient1 = coefficients[0]
|
|
||||||
val coefficient2 = coefficients[1]
|
|
||||||
val result = coefficient1 * coefficient2
|
|
||||||
showToast("coefficients: $coefficient1, $coefficient2")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
isOnline = isNetworkAvailable
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hemoCubeViewModel.messages.observe(viewLifecycleOwner) {
|
hemoCubeViewModel.messages.observe(viewLifecycleOwner) {
|
||||||
binding.tvSubtitle4.text = it
|
binding.tvSubtitle4.text = it
|
||||||
}
|
}
|
||||||
// startListening.observe(viewLifecycleOwner) {
|
startListening.observe(viewLifecycleOwner) {
|
||||||
// if (it) {
|
if (it) {
|
||||||
// lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
// delay(1000)
|
delay(1000)
|
||||||
// if (binding.tvSubtitle4.text.toString().isEmpty()) {
|
if (binding.tvSubtitle4.text.toString().isEmpty()) {
|
||||||
// (activity as HemocubeActivity).reconnectDevice()
|
(activity as HemocubeActivity).reconnectDevice()
|
||||||
// if (isBufferValueAvailable()) {
|
if (isBufferValueAvailable()) {
|
||||||
// showBufferAlertDialog()
|
showBufferAlertDialog()
|
||||||
// } else {
|
} else {
|
||||||
// listenToHemoCube()
|
listenToHemoCube()
|
||||||
// startBufferProcess()
|
startBufferProcess()
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkAndStartProcess() {
|
private fun checkAndStartProcess() {
|
||||||
// if (isBufferValueAvailable()) {
|
// if (isBufferValueAvailable()) {
|
||||||
// showBufferAlertDialog()
|
// showBufferAlertDialog()
|
||||||
// } else {
|
// } else {
|
||||||
listenToHemoCube()
|
listenToHemoCube()
|
||||||
startBufferProcess()
|
startBufferProcess()
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,7 +271,6 @@ class HemoCubeFragment : Fragment() {
|
|||||||
})
|
})
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
showToast("test is going on")
|
showToast("test is going on")
|
||||||
Firebase.crashlytics.recordException(e)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,18 +283,14 @@ class HemoCubeFragment : Fragment() {
|
|||||||
resultData += fullReadOutput.toString()
|
resultData += fullReadOutput.toString()
|
||||||
|
|
||||||
when {
|
when {
|
||||||
stringData.contains("ERROR 500") ->
|
stringData.contains("ERROR 500") -> showError500Dialog()
|
||||||
// showError500Dialog()
|
|
||||||
checkAndStartProcess()
|
|
||||||
stringData.contains("ERROR 501") -> showError501Dialog()
|
stringData.contains("ERROR 501") -> showError501Dialog()
|
||||||
stringData.contains("#Buffer Completed") ->
|
stringData.contains("#Buffer Completed") ->
|
||||||
// showStartSampleDialog()
|
|
||||||
activity?.runOnUiThread {
|
activity?.runOnUiThread {
|
||||||
binding.btnSamplestart.visibility = View.VISIBLE
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
binding.btnSamplestart.isClickable = true
|
binding.btnSamplestart.isClickable = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
stringData.contains("#Sample Completed") -> {
|
stringData.contains("#Sample Completed") -> {
|
||||||
activity?.runOnUiThread {
|
activity?.runOnUiThread {
|
||||||
binding.btnSubmit.isEnabled = true
|
binding.btnSubmit.isEnabled = true
|
||||||
@@ -409,7 +393,6 @@ class HemoCubeFragment : Fragment() {
|
|||||||
override fun onClickNegativeButton() {}
|
override fun onClickNegativeButton() {}
|
||||||
|
|
||||||
override fun onClickPositiveButton() {
|
override fun onClickPositiveButton() {
|
||||||
listenToHemoCube()
|
|
||||||
startSampleProcess()
|
startSampleProcess()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -431,10 +414,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
} else {
|
} else {
|
||||||
result[4].toDoubleOrNull()
|
result[4].toDoubleOrNull()
|
||||||
}
|
}
|
||||||
val pInfo = requireActivity().packageManager.getPackageInfo(
|
val version = BuildConfig.VERSION_NAME
|
||||||
requireActivity().packageName, 0
|
|
||||||
)
|
|
||||||
val version = pInfo.versionName
|
|
||||||
val led1Sample = result[5].toDoubleOrNull()
|
val led1Sample = result[5].toDoubleOrNull()
|
||||||
val led2Sample = result[6].toDoubleOrNull()
|
val led2Sample = result[6].toDoubleOrNull()
|
||||||
val led1Average = log10(led1BufferForDevice?.div(led1Sample!!) ?: 0.0)
|
val led1Average = log10(led1BufferForDevice?.div(led1Sample!!) ?: 0.0)
|
||||||
@@ -459,9 +439,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
this.led1Average = led1Average
|
this.led1Average = led1Average
|
||||||
this.led2Average = led2Average
|
this.led2Average = led2Average
|
||||||
this.deviceRatio = deviceRatio
|
this.deviceRatio = deviceRatio
|
||||||
this.calculatedRatio = calculateRatio(deviceRatio)
|
// this.calculatedRatio = calculateRatio(deviceRatio)
|
||||||
this.classificationResult = findResult(calculatedRatio)
|
|
||||||
hemoCubeViewModel.messages.postValue(this.classificationResult)
|
|
||||||
this.resultData = fullReadOutput
|
this.resultData = fullReadOutput
|
||||||
if (!isBufferValueAvailable()) {
|
if (!isBufferValueAvailable()) {
|
||||||
with(sharedPreferences.edit()) {
|
with(sharedPreferences.edit()) {
|
||||||
@@ -478,42 +456,15 @@ class HemoCubeFragment : Fragment() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
|
||||||
|
} catch (_: Exception) {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
"Error while processing device data",
|
"Error while processing device data",
|
||||||
Toast.LENGTH_SHORT
|
Toast.LENGTH_SHORT
|
||||||
).show()
|
).show()
|
||||||
Firebase.crashlytics.recordException(e)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun findResult(calculatedRatio: Double?): String {
|
|
||||||
try {
|
|
||||||
if (calculatedRatio != null) {
|
|
||||||
if (calculatedRatio < 0.085)
|
|
||||||
return "Inconclusive. Very low Absorbance - Repeat test with Higher Blood Volume"
|
|
||||||
if (calculatedRatio in 0.085..0.155)
|
|
||||||
return "Normal"
|
|
||||||
if (calculatedRatio in 0.155..0.175)
|
|
||||||
return "Negative Borderline. Repeat Test"
|
|
||||||
if (calculatedRatio in 0.175..0.22)
|
|
||||||
return "Sickle Cell Trait"
|
|
||||||
if (calculatedRatio in 0.22..0.25)
|
|
||||||
return "Positive for Sickle Cell. HPLC for Confirmation"
|
|
||||||
if (calculatedRatio in 0.25..0.35)
|
|
||||||
return "Sickle Cell Disease"
|
|
||||||
if (calculatedRatio > 0.35)
|
|
||||||
return "Inconclusive. Repeat with test with lower volume of blood"
|
|
||||||
} else {
|
|
||||||
return "NULL"
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
showToast("error while performing classification")
|
|
||||||
Firebase.crashlytics.recordException(e)
|
|
||||||
return "ERROR"
|
|
||||||
}
|
|
||||||
return "NULL"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showToast(message: String) {
|
private fun showToast(message: String) {
|
||||||
@@ -559,11 +510,11 @@ class HemoCubeFragment : Fragment() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun calculateRatio(ratio: Double): Double {
|
// private fun calculateRatio(ratio: Double): Double {
|
||||||
val coefficient1 = currentDeviceData?.coefficients?.get(0) ?: 0.0
|
// val coefficient1 = currentDeviceData?.coefficients?.get(0) ?: 0.0
|
||||||
val coefficient2 = currentDeviceData?.coefficients?.get(1) ?: 0.0
|
// val coefficient2 = currentDeviceData?.coefficients?.get(1) ?: 0.0
|
||||||
return coefficient1 * ratio + coefficient2
|
// return coefficient1 * ratio + coefficient2
|
||||||
}
|
// }
|
||||||
|
|
||||||
private fun parseResult(frames: List<String>): String {
|
private fun parseResult(frames: List<String>): String {
|
||||||
val lines = mutableListOf<String>()
|
val lines = mutableListOf<String>()
|
||||||
|
|||||||
@@ -92,7 +92,6 @@ class HemoCubeViewModel @Inject constructor(
|
|||||||
testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average
|
testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average
|
||||||
testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio
|
testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio
|
||||||
testDetails?.calculatedRatio = DataHolder.hemoCubeTestData?.calculatedRatio
|
testDetails?.calculatedRatio = DataHolder.hemoCubeTestData?.calculatedRatio
|
||||||
testDetails?.classificationResult = DataHolder.hemoCubeTestData?.classificationResult!!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addResultTestToDb() {
|
private fun addResultTestToDb() {
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/til_blood_group" />
|
app:layout_constraintTop_toBottomOf="@id/btn_samplestart" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/til_blood_group"
|
android:id="@+id/til_blood_group"
|
||||||
|
|||||||
Reference in New Issue
Block a user