diff --git a/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt b/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt index 6a9e1a5..3cfdc04 100644 --- a/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt +++ b/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt @@ -1,6 +1,8 @@ package com.example.hpostesting.data.constant object Constants { + const val PQ_MODE = true + const val ACTION_USB_PERMISSION = "shanmukha.in.sickle_cell.USB_PERMISSION" const val HOMOCUBE_USB_PERMISSION = "shanmukha.in.sickle_cell_homocube.USB_PERMISSION" @@ -173,66 +175,6 @@ object Constants { const val BUFFER_LED_LOWER_BOUND = 21000 const val BUFFER_LED_UPPER_BOUND = 24500 - const val TEST_STATUS_CODE_TEST_STARTED = 1.0 - const val TEST_STATUS_CODE_CONFIG_STARTED = 2.0 - const val TEST_STATUS_CODE_CONFIG_COMPLETED = 3.0 - const val TEST_STATUS_CODE_BUFFER_STARTED = 4.0 - const val TEST_STATUS_CODE_BUFFER_COMPLETED = 5.0 - const val TEST_STATUS_CODE_BUFFER_PRINT_STARTED = 6.0 - const val TEST_STATUS_CODE_BUFFER_PRINT_COMPLETED = 7.0 - const val TEST_STATUS_CODE_SAMPLE_STARTED = 8.0 - const val TEST_STATUS_CODE_SAMPLE_COMPLETED = 9.0 - const val TEST_STATUS_CODE_SAMPLE_PRINT_STARTED = 10.0 - const val TEST_STATUS_CODE_SAMPLE_PRINT_COMPLETED = 11.0 - const val TEST_STATUS_CODE_FIRST_GAIN_STARTED = 12.0 - const val TEST_STATUS_CODE_FIRST_GAIN_COMPLETED = 13.0 - const val TEST_STATUS_CODE_FIRST_GAIN_PRINT_STARTED = 14.0 - const val TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED = 15.0 - const val TEST_STATUS_CODE_SECOND_GAIN_STARTED = 16.0 - const val TEST_STATUS_CODE_SECOND_GAIN_COMPLETED = 17.0 - const val TEST_STATUS_CODE_SECOND_GAIN_PRINT_STARTED = 18.0 - const val TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED = 19.0 - const val TEST_STATUS_CODE_THIRD_GAIN_STARTED = 20.0 - const val TEST_STATUS_CODE_THIRD_GAIN_COMPLETED = 21.0 - const val TEST_STATUS_CODE_THIRD_GAIN_PRINT_STARTED = 22.0 - const val TEST_STATUS_CODE_THIRD_GAIN_PRINT_COMPLETED = 23.0 - const val TEST_STATUS_CODE_FORTH_GAIN_STARTED = 24.0 - const val TEST_STATUS_CODE_FORTH_GAIN_COMPLETED = 25.0 - const val TEST_STATUS_CODE_FORTH_GAIN_PRINT_STARTED = 26.0 - const val TEST_STATUS_CODE_FORTH_GAIN_PRINT_COMPLETED = 27.0 - const val TEST_STATUS_CODE_TEST_COMPLETED = 30.0 - - enum class TestStatus(val CODE: Double) { - TEST_STARTED(1.0), - CONFIG_STARTED(2.0), - CONFIG_COMPLETED(3.0), - BUFFER_STARTED(4.0), - BUFFER_COMPLETED(5.0), - BUFFER_PRINT_STARTED(6.0), - BUFFER_PRINT_COMPLETED(7.0), - SAMPLE_STARTED(8.0), - SAMPLE_COMPLETED(9.0), - SAMPLE_PRINT_STARTED(10.0), - SAMPLE_PRINT_COMPLETED(11.0), - FIRST_GAIN_STARTED(12.0), - FIRST_GAIN_COMPLETED(13.0), - FIRST_GAIN_PRINT_STARTED(14.0), - FIRST_GAIN_PRINT_COMPLETED(15.0), - SECOND_GAIN_STARTED(16.0), - SECOND_GAIN_COMPLETED(17.0), - SECOND_GAIN_PRINT_STARTED(18.0), - SECOND_GAIN_PRINT_COMPLETED(19.0), - THIRD_GAIN_STARTED(20.0), - THIRD_GAIN_COMPLETED(21.0), - THIRD_GAIN_PRINT_STARTED(22.0), - THIRD_GAIN_PRINT_COMPLETED(23.0), - FORTH_GAIN_STARTED(24.0), - FORTH_GAIN_COMPLETED(25.0), - FORTH_GAIN_PRINT_STARTED(26.0), - FORTH_GAIN_PRINT_COMPLETED(27.0), - TEST_COMPLETED(30.0) - } - val DEVICE_CONFIGURATION: Map>> = mapOf>>( "HCV-000-3001" to listOf( listOf(1.313, -0.89), // LED1, 435nm diff --git a/app/src/main/java/com/example/hpostesting/data/constant/TestStatus.kt b/app/src/main/java/com/example/hpostesting/data/constant/TestStatus.kt new file mode 100644 index 0000000..6a1951e --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/data/constant/TestStatus.kt @@ -0,0 +1,32 @@ +package com.example.hpostesting.data.constant + +enum class TestStatus(val CODE: Double) { + TEST_STARTED(1.0), + CONFIG_STARTED(2.0), + CONFIG_COMPLETED(3.0), + BUFFER_STARTED(4.0), + BUFFER_COMPLETED(5.0), + BUFFER_PRINT_STARTED(6.0), + BUFFER_PRINT_COMPLETED(7.0), + SAMPLE_STARTED(8.0), + SAMPLE_COMPLETED(9.0), + SAMPLE_PRINT_STARTED(10.0), + SAMPLE_PRINT_COMPLETED(11.0), + FIRST_GAIN_STARTED(12.0), + FIRST_GAIN_COMPLETED(13.0), + FIRST_GAIN_PRINT_STARTED(14.0), + FIRST_GAIN_PRINT_COMPLETED(15.0), + SECOND_GAIN_STARTED(16.0), + SECOND_GAIN_COMPLETED(17.0), + SECOND_GAIN_PRINT_STARTED(18.0), + SECOND_GAIN_PRINT_COMPLETED(19.0), + THIRD_GAIN_STARTED(20.0), + THIRD_GAIN_COMPLETED(21.0), + THIRD_GAIN_PRINT_STARTED(22.0), + THIRD_GAIN_PRINT_COMPLETED(23.0), + FORTH_GAIN_STARTED(24.0), + FORTH_GAIN_COMPLETED(25.0), + FORTH_GAIN_PRINT_STARTED(26.0), + FORTH_GAIN_PRINT_COMPLETED(27.0), + TEST_COMPLETED(30.0) +} \ No newline at end of file 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 162dc67..d244e5b 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 @@ -20,6 +20,7 @@ import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.Result import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.constant.HemoCubeCommands +import com.example.hpostesting.data.constant.TestStatus import com.example.hpostesting.data.model.patient.DeviceData import com.example.hpostesting.data.model.patient.toHemoCubeTestData import com.example.hpostesting.presentation.UsbServiceListener @@ -137,25 +138,6 @@ class HemoCubeFragment : Fragment() { binding.tvDeviceMessages.visibility = View.VISIBLE } } - -// val spinner: Spinner = binding.spinnerSolutions -// val options = arrayOf("KMnO4", "Tartrazine", "AR", "HB", "Blood") -// val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, options) -// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) -// spinner.adapter = adapter -// spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { -// override fun onItemSelected( -// parent: AdapterView<*>?, -// view: View?, -// position: Int, -// id: Long -// ) { -// val selectedValue: String = options[position] -// } -// -// override fun onNothingSelected(parent: AdapterView<*>?) { -// } -// } } private fun observeViewModel() { @@ -395,7 +377,7 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.deviceMessages.postValue(currentResultData) when { - resultData.contains("SNE") && this.testStatusCode < Constants.TEST_STATUS_CODE_CONFIG_COMPLETED -> { + resultData.contains("SNE") && this.testStatusCode < TestStatus.CONFIG_COMPLETED.CODE -> { if (resultData.contains("HCV")) { processHardwareId(resultData, "HCV", 12) } @@ -405,29 +387,29 @@ class HemoCubeFragment : Fragment() { } } - resultData.contains("#BS") && this.testStatusCode < Constants.TEST_STATUS_CODE_BUFFER_STARTED -> { + resultData.contains("#BS") && this.testStatusCode < TestStatus.BUFFER_STARTED.CODE -> { hemoCubeViewModel.messages.postValue(getString(R.string.buffer_started)) - this.testStatusCode = Constants.TEST_STATUS_CODE_BUFFER_STARTED + this.testStatusCode = TestStatus.BUFFER_STARTED.CODE } - resultData.contains("#BC") && this.testStatusCode < Constants.TEST_STATUS_CODE_BUFFER_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_BUFFER_COMPLETED + resultData.contains("#BC") && this.testStatusCode < TestStatus.BUFFER_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.BUFFER_COMPLETED.CODE activity?.runOnUiThread { binding.tvSubtitle4.text = getString(R.string.buffer_completed) binding.btnSamplestart.visibility = View.VISIBLE } } - resultData.contains("#SS1") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_STARTED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_STARTED + resultData.contains("#SS1") && this.testStatusCode < TestStatus.SAMPLE_STARTED.CODE -> { + this.testStatusCode = TestStatus.SAMPLE_STARTED.CODE activity?.runOnUiThread { binding.tvSubtitle4.text = getString(R.string.sample_started) binding.btnSamplestart.visibility = View.GONE } } - resultData.contains("#SC1") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_COMPLETED + resultData.contains("#SC1") && this.testStatusCode < TestStatus.SAMPLE_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.SAMPLE_COMPLETED.CODE hemoCubeViewModel.messages.postValue( getString(R.string.sample_completed) + "\n" + getString(R.string.gathering_data)) fetchResult() @@ -441,83 +423,47 @@ class HemoCubeFragment : Fragment() { ) } - currentResultData.contains("#SS2") && this.testStatusCode < Constants.TEST_STATUS_CODE_FIRST_GAIN_STARTED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_FIRST_GAIN_STARTED + currentResultData.contains("#SS2") && this.testStatusCode < TestStatus.FIRST_GAIN_STARTED.CODE -> { + this.testStatusCode = TestStatus.FIRST_GAIN_STARTED.CODE hemoCubeViewModel.messages.postValue("1.3X Gain Started") } - currentResultData.contains("#SC2") && this.testStatusCode < Constants.TEST_STATUS_CODE_FIRST_GAIN_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_FIRST_GAIN_COMPLETED + currentResultData.contains("#SC2") && this.testStatusCode < TestStatus.FIRST_GAIN_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.FIRST_GAIN_COMPLETED.CODE hemoCubeViewModel.messages.postValue("1.3X Gain Completed") fetchResult() } - currentResultData.contains("#SS3") && this.testStatusCode < Constants.TEST_STATUS_CODE_SECOND_GAIN_STARTED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_SECOND_GAIN_STARTED + currentResultData.contains("#SS3") && this.testStatusCode < TestStatus.SECOND_GAIN_STARTED.CODE -> { + this.testStatusCode = TestStatus.SECOND_GAIN_STARTED.CODE hemoCubeViewModel.messages.postValue("2X Gain Started") } - currentResultData.contains("#SC3") && this.testStatusCode < Constants.TEST_STATUS_CODE_SECOND_GAIN_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_SECOND_GAIN_COMPLETED + currentResultData.contains("#SC3") && this.testStatusCode < TestStatus.SECOND_GAIN_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.SECOND_GAIN_COMPLETED.CODE hemoCubeViewModel.messages.postValue("2X Gain Completed") fetchResult() } - currentResultData.contains("#SS5") && this.testStatusCode < Constants.TEST_STATUS_CODE_FORTH_GAIN_STARTED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_FORTH_GAIN_STARTED + currentResultData.contains("#SS5") && this.testStatusCode < TestStatus.FORTH_GAIN_STARTED.CODE -> { + this.testStatusCode = TestStatus.FORTH_GAIN_STARTED.CODE hemoCubeViewModel.messages.postValue("7.6X Gain Started") } - currentResultData.contains("#SC5") && this.testStatusCode < Constants.TestStatus.CONFIG_COMPLETED.CODE -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_FORTH_GAIN_COMPLETED + currentResultData.contains("#SC5") && this.testStatusCode < TestStatus.CONFIG_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.CONFIG_COMPLETED.CODE hemoCubeViewModel.messages.postValue("7.6X Gain Completed") fetchResult() } - resultData.contains("REND") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_PRINT_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_PRINT_COMPLETED - hemoCubeViewModel.messages.postValue( - getString(R.string.data_collected_processing_data) - ) - - val resultLines = resultData.split("\\s+(?=LB|LS)".toRegex()) - var bufferIntensity = resultLines[1].split(' ')[1].trim() - led1BufferForDevice = if (isUsingExistingBuffer) { - sharedPreferences.getString(Constants.BUFFER_VALUE_1, "")?.toDoubleOrNull()!! - } else { - bufferIntensity.toDoubleOrNull()!! - } - bufferIntensity = resultLines[2].split(' ')[1].trim() - led2BufferForDevice = if (isUsingExistingBuffer) { - sharedPreferences.getString(Constants.BUFFER_VALUE_2, "")?.toDoubleOrNull()!! - } else { - bufferIntensity.toDoubleOrNull()!! - } - bufferIntensity = resultLines[3].split(' ')[1].trim() - led3BufferForDevice = if (isUsingExistingBuffer) { - sharedPreferences.getString(Constants.BUFFER_VALUE_3, "")?.toDoubleOrNull()!! - } else { - bufferIntensity.toDoubleOrNull()!! - } - bufferIntensity = resultLines[4].split(' ')[1].trim() - led4BufferForDevice = if (isUsingExistingBuffer) { - sharedPreferences.getString(Constants.BUFFER_VALUE_4, "")?.toDoubleOrNull()!! - } else { - bufferIntensity.toDoubleOrNull()!! - } - - led1SampleForDevice = resultLines[5].split(' ')[1].trim().toDoubleOrNull()!! - led2SampleForDevice = resultLines[6].split(' ')[1].trim().toDoubleOrNull()!! - led3SampleForDevice = resultLines[7].split(' ')[1].trim().toDoubleOrNull()!! - led4SampleForDevice = - resultLines[8].split(' ')[1].split('\r')[0].trim().toDoubleOrNull()!! - processResult() - sendFirstGainCommand() - currentResultData = "" + resultData.contains("REND") && this.testStatusCode < TestStatus.SAMPLE_PRINT_COMPLETED.CODE -> { + handleSampleCompleted() } - currentResultData.contains("REND") && this.testStatusCode >= Constants.TEST_STATUS_CODE_FIRST_GAIN_COMPLETED && this.testStatusCode < Constants.TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED + currentResultData.contains("REND") + && this.testStatusCode >= TestStatus.FIRST_GAIN_COMPLETED.CODE + && this.testStatusCode < TestStatus.FIRST_GAIN_PRINT_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.FIRST_GAIN_PRINT_COMPLETED.CODE hemoCubeViewModel.messages.postValue("1.3X gain data gathered") val resultLines = currentResultData.split("\\s+(?=LB|LS)".toRegex()) @@ -532,8 +478,10 @@ class HemoCubeFragment : Fragment() { currentResultData = "" } - currentResultData.contains("REND") && this.testStatusCode >= Constants.TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED && this.testStatusCode < Constants.TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED + currentResultData.contains("REND") + && this.testStatusCode >= TestStatus.FIRST_GAIN_PRINT_COMPLETED.CODE + && this.testStatusCode < TestStatus.SECOND_GAIN_PRINT_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.SECOND_GAIN_PRINT_COMPLETED.CODE hemoCubeViewModel.messages.postValue("2X gain data gathered") val resultLines = currentResultData.split("\\s+(?=LB|LS)".toRegex()) @@ -548,8 +496,10 @@ class HemoCubeFragment : Fragment() { currentResultData = "" } - currentResultData.contains("REND") && this.testStatusCode >= Constants.TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED && this.testStatusCode < Constants.TEST_STATUS_CODE_FORTH_GAIN_PRINT_COMPLETED -> { - this.testStatusCode = Constants.TEST_STATUS_CODE_FORTH_GAIN_PRINT_COMPLETED + currentResultData.contains("REND") + && this.testStatusCode >= TestStatus.SECOND_GAIN_PRINT_COMPLETED.CODE + && this.testStatusCode < TestStatus.FORTH_GAIN_PRINT_COMPLETED.CODE -> { + this.testStatusCode = TestStatus.FORTH_GAIN_PRINT_COMPLETED.CODE hemoCubeViewModel.messages.postValue("7.6X gain data gathered") val resultLines = currentResultData.split("\\s+(?=LB|LS)".toRegex()) @@ -579,6 +529,49 @@ class HemoCubeFragment : Fragment() { } } + fun handleSampleCompleted() { + + this.testStatusCode = TestStatus.SAMPLE_PRINT_COMPLETED.CODE + hemoCubeViewModel.messages.postValue( + getString(R.string.data_collected_processing_data) + ) + + val resultLines = resultData.split("\\s+(?=LB|LS)".toRegex()) + var bufferIntensity = resultLines[1].split(' ')[1].trim() + led1BufferForDevice = if (isUsingExistingBuffer) { + sharedPreferences.getString(Constants.BUFFER_VALUE_1, "")?.toDoubleOrNull()!! + } else { + bufferIntensity.toDoubleOrNull()!! + } + bufferIntensity = resultLines[2].split(' ')[1].trim() + led2BufferForDevice = if (isUsingExistingBuffer) { + sharedPreferences.getString(Constants.BUFFER_VALUE_2, "")?.toDoubleOrNull()!! + } else { + bufferIntensity.toDoubleOrNull()!! + } + bufferIntensity = resultLines[3].split(' ')[1].trim() + led3BufferForDevice = if (isUsingExistingBuffer) { + sharedPreferences.getString(Constants.BUFFER_VALUE_3, "")?.toDoubleOrNull()!! + } else { + bufferIntensity.toDoubleOrNull()!! + } + bufferIntensity = resultLines[4].split(' ')[1].trim() + led4BufferForDevice = if (isUsingExistingBuffer) { + sharedPreferences.getString(Constants.BUFFER_VALUE_4, "")?.toDoubleOrNull()!! + } else { + bufferIntensity.toDoubleOrNull()!! + } + + led1SampleForDevice = resultLines[5].split(' ')[1].trim().toDoubleOrNull()!! + led2SampleForDevice = resultLines[6].split(' ')[1].trim().toDoubleOrNull()!! + led3SampleForDevice = resultLines[7].split(' ')[1].trim().toDoubleOrNull()!! + led4SampleForDevice = + resultLines[8].split(' ')[1].split('\r')[0].trim().toDoubleOrNull()!! + processResult() + sendFirstGainCommand() + currentResultData = "" + } + fun processHardwareId(resultData: String, prefix: String, expectedLength: Int) { val pattern = Regex("$prefix-\\d{3,4}-\\d{4}") val matchResult = pattern.find(resultData) @@ -590,7 +583,7 @@ class HemoCubeFragment : Fragment() { putString(Constants.DEVICE_ID, deviceHardwareId) apply() } - this.testStatusCode = Constants.TEST_STATUS_CODE_CONFIG_COMPLETED + this.testStatusCode = TestStatus.CONFIG_COMPLETED.CODE activity?.runOnUiThread { binding.btnPlacebuffer.visibility = View.VISIBLE } @@ -628,12 +621,8 @@ class HemoCubeFragment : Fragment() { fun handleBackButtonPress() { if (isTestOngoing) { - // If the test is ongoing, don't allow the back button action - // You can optionally show a message to the user indicating why the back button is disabled - // For example, show a Toast or Snackbar. showToast(R.string.test_go_noback) } else { - // If the test is not ongoing, you can trigger the back action of the hosting activity activity?.onBackPressed() } }