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 8f7cf4f..b79ea1a 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 @@ -69,4 +69,5 @@ object Constants { const val KIT_COUNT = "KitCount" const val BUFFER_VALUE_1 = "BufferValue1" const val BUFFER_VALUE_2 = "BufferValue2" + const val DEVICE_ID = "DEVICE_ID" } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt b/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt index 28acdab..9cf44a6 100644 --- a/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt +++ b/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt @@ -5,4 +5,5 @@ enum class HemoCubeCommands(val command: String) { getBuffer("D\r"), startSample("S\r"), getSample("P\r"), + getDeviceId("I\r"), } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt index 104756d..02b1df6 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt @@ -66,11 +66,14 @@ class DashboardActivity : AppCompatActivity() { val firebaseAppDistribution = FirebaseAppDistribution.getInstance() firebaseAppDistribution.updateIfNewReleaseAvailable() .addOnProgressListener { updateProgress -> - Toast.makeText( - this, - "${updateProgress.updateStatus}. ${updateProgress.apkBytesDownloaded / 1048576} /${updateProgress.apkFileTotalBytes / 1048576} MB", - Toast.LENGTH_SHORT - ).show() + + if (updateProgress.apkBytesDownloaded > 0) { + Toast.makeText( + this, + "${updateProgress.updateStatus}. ${updateProgress.apkBytesDownloaded / 1048576} /${updateProgress.apkFileTotalBytes / 1048576} MB", + Toast.LENGTH_SHORT + ).show() + } } .addOnFailureListener { e -> // (Optional) Handle errors. @@ -82,7 +85,11 @@ class DashboardActivity : AppCompatActivity() { else -> { // Handle other errors. - Toast.makeText(this, "AppDistribution error, status: ${e.errorCode}", Toast.LENGTH_SHORT).show() + Toast.makeText( + this, + "AppDistribution error, status: ${e.errorCode}", + Toast.LENGTH_SHORT + ).show() } } FirebaseCrashlytics.getInstance().recordException(e) 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 0f0160d..3d51759 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 @@ -59,6 +59,7 @@ class DiagnosticsFragment : Fragment() { private fun initViews() { listenToHemoCube() + getDeviceId() binding.btnSubmit.setOnClickListener { binding.btnSubmit.visibility = View.GONE getBufferdiagnostics() @@ -95,6 +96,32 @@ class DiagnosticsFragment : Fragment() { } } + private fun getDeviceId() { + diagnosticsViewModel.progressBar.postValue(true) + (activity as DiagnosticsActivity).mService.sendAndListenToHemoCube( + HemoCubeCommands.getDeviceId, + object : UsbServiceListener { + override fun onUsbRead(data: ByteArray?) { + data?.let { + val stringData = String(it) + diagnosticsViewModel.messages.postValue(stringData) + val pattern = Regex("([A-Z]+)\\s(\\d+)") + val matchResult = pattern.find(stringData) + if (matchResult != null) { + val (sn, hardwareId) = matchResult.destructured + with(sharedPreferences.edit()) { + putString(com.example.hpostesting.data.constant.Constants.DEVICE_ID, hardwareId) + apply() + } + } + binding.tvSubtitle4.text = stringData + } + } + override fun onUsbError(e: Exception?) { + diagnosticsViewModel.progressBar.postValue(false) + } + }) + } private fun getBufferdiagnostics() { diagnosticsViewModel.progressBar.postValue(true) @@ -131,7 +158,7 @@ class DiagnosticsFragment : Fragment() { if (resultData.contains("END") || fullReadOutput.contains("END")) { diagnosticsViewModel.addDiagnosticsDataToDb(DiagnosticsData( - deviceId = sharedPreferences.getString("DEVICE_ID", "").toString(), + deviceId = sharedPreferences.getString(Constants.DEVICE_ID, "").toString(), deviceData = resultData, runTime = SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.getDefault() 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 7b9ae8b..aae9d13 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 @@ -13,27 +13,20 @@ import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.lifecycleScope import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.constant.HemoCubeCommands import com.example.hpostesting.data.model.patient.DeviceData import com.example.hpostesting.data.model.patient.toHemoCubeTestData -import com.example.hpostesting.presentation.KitScanActivity 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 com.google.firebase.perf.ktx.performance import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.tasks.await -import kotlinx.coroutines.withContext import kotlin.math.log10 class HemoCubeFragment : Fragment() { @@ -48,6 +41,8 @@ class HemoCubeFragment : Fragment() { private var isUsingExistingBuffer = false private var isTestOngoing = false private var startListening = MutableLiveData(false) + val testingTrace = Firebase.performance.newTrace("testing_trace") + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View { @@ -237,14 +232,13 @@ class HemoCubeFragment : Fragment() { isTestOngoing = true } - resultData += fullReadOutput.toString() + resultData += stringData when { - stringData.contains("ERROR 500") -> showError500Dialog() - stringData.contains("ERROR 501") -> showError501Dialog() stringData.contains("#Buffer Completed") -> showStartSampleDialog() stringData.contains("#Sample Completed") -> { fetchResult() + testingTrace.stop() } stringData.contains("RESULT") || resultData.contains("REND") -> { @@ -285,23 +279,6 @@ class HemoCubeFragment : Fragment() { } } - - private fun showError500Dialog() { - UIUtils.createAlertDialog(requireContext(), - "BUFFER ERROR", - "Do you want to continue with existing buffer?", - getString(R.string.noo), - "Yes", - object : MyDialogListener { - override fun onClickNegativeButton() {} - - override fun onClickPositiveButton() { - listenToHemoCube() - startBufferProcess() - } - }) - } - fun handleBackButtonPress() { if (isTestOngoing) { // If the test is ongoing, don't allow the back button action @@ -314,23 +291,6 @@ class HemoCubeFragment : Fragment() { } } - - private fun showError501Dialog() { - UIUtils.createAlertDialog(requireContext(), - "SAMPLE ERROR", - "Do you want to continue with Sample?", - getString(R.string.noo), - "Yes", - object : MyDialogListener { - override fun onClickNegativeButton() {} - - override fun onClickPositiveButton() { - listenToHemoCube() - startSampleProcess() - } - }) - } - private fun showStartSampleDialog() { activity?.runOnUiThread { UIUtils.createAlertDialog(requireContext(), @@ -352,8 +312,20 @@ class HemoCubeFragment : Fragment() { private fun handleValidResult(validString: String, fullReadOutput: String) { try { val result = validString.split(" ") + val deviceLog = resultData if (result.size == 8) { val deviceSerialNo = result[2] + with(sharedPreferences.edit()) { + putString(Constants.DEVICE_ID, deviceSerialNo) + apply() + } + val loginId = sharedPreferences.getString(Constants.USER_ID, "").toString() + if (checkDeviceIdMismatch(deviceSerialNo, loginId)) { + activity?.runOnUiThread { + binding.errorMessage.text = "Warning: Login Id is different" + binding.errorMessage.visibility = View.VISIBLE + } + } val led1BufferForDevice = if (isUsingExistingBuffer) { sharedPreferences.getString(Constants.BUFFER_VALUE_1, "")?.toDoubleOrNull() } else { @@ -383,8 +355,6 @@ class HemoCubeFragment : Fragment() { // } // } DataHolder.hemoCubeTestData?.apply { - - deviceId = deviceSerialNo led1Buffer = led1BufferForDevice led2Buffer = led2BufferForDevice @@ -397,7 +367,7 @@ class HemoCubeFragment : Fragment() { this.calculatedRatio = calculateRatio(deviceRatio) this.classificationResult = findResult(calculatedRatio) hemoCubeViewModel.messages.postValue(this.classificationResult) - this.resultData = fullReadOutput + this.resultData = deviceLog if (!isUsingExistingBuffer) { with(sharedPreferences.edit()) { putString(Constants.BUFFER_VALUE_1, led1Buffer.toString()) @@ -469,6 +439,7 @@ class HemoCubeFragment : Fragment() { } private fun startSampleProcess() { + testingTrace.start() hemoCubeViewModel.progressBar.postValue(true) (activity as HemocubeActivity).mService.sendAndListenToHemoCube(HemoCubeCommands.startSample, @@ -522,4 +493,10 @@ class HemoCubeFragment : Fragment() { "" } } + + private fun checkDeviceIdMismatch(deviceId: String, loginId: String): Boolean { + if (!deviceId.isNullOrEmpty() && !loginId.isNullOrEmpty() && deviceId.last() != loginId.last()) + return true + return false + } } diff --git a/app/src/main/res/layout/fragment_hemo_cube_reference.xml b/app/src/main/res/layout/fragment_hemo_cube_reference.xml index 7713f9a..162a66c 100644 --- a/app/src/main/res/layout/fragment_hemo_cube_reference.xml +++ b/app/src/main/res/layout/fragment_hemo_cube_reference.xml @@ -163,6 +163,21 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_subtitle4" /> + +