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