diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/GalleryFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/GalleryFragment.kt index 9307d1b..7234417 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/GalleryFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/GalleryFragment.kt @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import com.example.hpostesting.presentation.buffercheck.HemocubeBufferCheckActivity +import com.example.hpostesting.presentation.diagnostics.DiagnosticsActivity import `in`.sminnovations.hpostesting.databinding.FragmentGalleryBinding class GalleryFragment : Fragment() { @@ -35,6 +36,12 @@ class GalleryFragment : Fragment() { binding.btnSubmit.setOnClickListener { startActivity(Intent(requireContext(), HemocubeBufferCheckActivity::class.java)) } + + binding.btnDiagnostics.setOnClickListener { + startActivity(Intent(requireContext(), DiagnosticsActivity::class.java)) + } + + return root } 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 953022e..c39b35a 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 @@ -18,6 +18,7 @@ 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 @@ -47,7 +48,6 @@ class DiagnosticsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - getBufferdiagnostics() initViews() observeViewModel() } @@ -55,10 +55,11 @@ class DiagnosticsFragment : Fragment() { private fun initViews() { binding.btnKit.visibility = View.GONE - binding.btnSubmit.visibility = View.GONE - binding.etBloodGroup.visibility = View.GONE listenToHemoCube() - getBufferdiagnostics() + binding.btnSubmit.setOnClickListener { + listenToHemoCube() + getBufferdiagnostics() + } } @@ -91,106 +92,16 @@ class DiagnosticsFragment : Fragment() { } } - private fun listenToHemoCube() { - if (DataHolder.hemoCubeTestData == null) { - DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData() - } - - val fullReadOutput = StringBuilder() - startListening.postValue(true) - - try { - (activity as DiagnosticsActivity).mService.listenToHemoCube(object : - UsbServiceListener { - override fun onUsbRead(data: ByteArray?) { - data?.let { - val stringData = String(it) - fullReadOutput.append(stringData) - handleUsbData(stringData, fullReadOutput) - } - } - - override fun onUsbError(e: Exception?) { - } - }) - } catch (e: Exception) { - showToast("test is going on") - Firebase.crashlytics.recordException(e) - } - } - - - private fun handleUsbData(stringData: String, fullReadOutput: StringBuilder) { - if (stringData.contains("#")) { - messages.postValue(stringData) - isTestOngoing = true - } - - resultData += fullReadOutput.toString() - - when { -// stringData.contains("ERROR 500") -> showError500Dialog() -// stringData.contains("ERROR 501") -> showError501Dialog() -// stringData.contains("#Buffer Completed") -> showStartSampleDialog() -// stringData.contains("#Sample Completed") -> fetchResult() - - stringData.contains("RESULT") || resultData.contains("REND") -> { - var validString: String - val results: List - if (stringData.contains("RESULT")) { - validString = isValidResult(stringData) - if (validString.isEmpty()) { - results = resultData.split("\n") - validString = parseResult(results) - } - } else { - results = resultData.split("\n") - validString = parseResult(results) - } - if (validString.isNotEmpty()) { -// handleValidResult(validString) - } - } - } - } - - - private fun parseResult(frames: List): String { - val lines = mutableListOf() - for (frame in frames.reversed()) { - if (frame.contains("REND") || frame.contains("RESULT")) lines += frame - if (frame.contains("RESULT")) { - break - } - } - val line = lines.reversed().joinToString("").trim() - if (line.contains("RESULT") && line.split(" ").size == 8) { - return line - } - return "" - } - - private fun isValidResult(line: String): String { - return if (line.contains("RESULT") && line.split(" ").size == 8) { - line - } else { - "" - } - } - - - private fun showToast(message: String) { - Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() - } - private fun getBufferdiagnostics() { diagnosticsViewModel.progressBar.postValue(true) (activity as DiagnosticsActivity).mService.sendAndListenToHemoCube( HemoCubeCommands.getBuffer, object : UsbServiceListener { - override fun onUsbRead(data: ByteArray?) {} + override fun onUsbRead(data: ByteArray?) { + + } override fun onUsbError(e: Exception?) { diagnosticsViewModel.progressBar.postValue(false) } @@ -199,9 +110,54 @@ class DiagnosticsFragment : Fragment() { + private fun listenToHemoCube() { + + val fullReadOutput = StringBuilder() + startListening.postValue(true) + + try { + (activity as DiagnosticsActivity).mService.listenToHemoCube(object : UsbServiceListener { + override fun onUsbRead(data: ByteArray?) { + data?.let { + val stringData = String(it) + fullReadOutput.append(stringData) + } + val inputData = mutableListOf() + while (true) { + if (fullReadOutput.toString().lowercase() == "end") { + break + } + inputData.add(fullReadOutput.toString()) + } + + val parsedData = parseData(inputData) + Log.i("D-Data", parsedData.toString()) + } + + override fun onUsbError(e: Exception?) { + diagnosticsViewModel.progressBar.postValue(false) + } + }) + } catch (e: Exception) { + Firebase.crashlytics.recordException(e) + } + } + fun parseData(inputData: List): List> { + val pattern = Regex("([A-Z]+)\\s(\\d+)") + val parsedData = mutableListOf>() + for (item in inputData) { + val matchResult = pattern.find(item) + if (matchResult != null) { + val (letters, numbers) = matchResult.destructured + parsedData.add(Pair(letters, numbers)) + } + } + + return parsedData + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_diagnostics.xml b/app/src/main/res/layout/fragment_diagnostics.xml index 4c01236..2401fa1 100644 --- a/app/src/main/res/layout/fragment_diagnostics.xml +++ b/app/src/main/res/layout/fragment_diagnostics.xml @@ -15,8 +15,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" + android:text="@string/diagnostics" android:layout_marginTop="16dp" - android:text="@string/Instructions" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -27,7 +27,6 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" android:layout_marginTop="16dp" - android:text="@string/step4" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_title" /> @@ -38,8 +37,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" + android:layout_marginTop="16dp" - android:text="@string/step5" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_subtitle2" /> @@ -99,33 +98,12 @@ android:layout_marginHorizontal="16dp" android:layout_marginTop="24dp" android:clickable="false" - android:text="@string/submit" + android:text="@string/diagnostics" 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/tv_subtitle4" /> - - - - -