From d750930b7a89cbc1babb0259b7123061fe48bbf2 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 11:00:27 +0530 Subject: [PATCH 1/8] show toast if download is greater than 0 --- .../dashboard/DashboardActivity.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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) From 50bfd3f962db1beccc89a52764e6d61114a606aa Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 12:01:07 +0530 Subject: [PATCH 2/8] stringData in device log --- .../hpostesting/presentation/hemocube/HemoCubeFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..1c426ec 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 @@ -237,7 +237,7 @@ class HemoCubeFragment : Fragment() { isTestOngoing = true } - resultData += fullReadOutput.toString() + resultData += stringData when { stringData.contains("ERROR 500") -> showError500Dialog() From 2cccfc6a639f54a615122cd6381ab3726e2a7329 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 12:06:39 +0530 Subject: [PATCH 3/8] add testing trace --- .../hpostesting/presentation/hemocube/HemoCubeFragment.kt | 5 +++++ 1 file changed, 5 insertions(+) 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 1c426ec..3e2624f 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 @@ -28,6 +28,7 @@ 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 @@ -48,6 +49,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 { @@ -245,6 +248,7 @@ class HemoCubeFragment : Fragment() { stringData.contains("#Buffer Completed") -> showStartSampleDialog() stringData.contains("#Sample Completed") -> { fetchResult() + testingTrace.stop() } stringData.contains("RESULT") || resultData.contains("REND") -> { @@ -469,6 +473,7 @@ class HemoCubeFragment : Fragment() { } private fun startSampleProcess() { + testingTrace.start() hemoCubeViewModel.progressBar.postValue(true) (activity as HemocubeActivity).mService.sendAndListenToHemoCube(HemoCubeCommands.startSample, From 5f44666387fda92a4a32cce654ebeb199daacebc Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 12:15:40 +0530 Subject: [PATCH 4/8] clean functions --- .../hpostesting/presentation/diagnostics/DiagnosticsFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..1b949a6 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 @@ -131,7 +131,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() From 7ece136cb5a65b4103d16c2b4db25f939466496f Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 12:16:40 +0530 Subject: [PATCH 5/8] add deviceid constant --- .../main/java/com/example/hpostesting/data/constant/Constants.kt | 1 + 1 file changed, 1 insertion(+) 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 From 9d06a77091afa5d505fcc351cd6721ee616237e4 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 12:17:00 +0530 Subject: [PATCH 6/8] clean --- .../presentation/hemocube/HemoCubeFragment.kt | 36 ------------------- 1 file changed, 36 deletions(-) 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 3e2624f..3b0b05b 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 @@ -243,8 +243,6 @@ class HemoCubeFragment : Fragment() { resultData += stringData when { - stringData.contains("ERROR 500") -> showError500Dialog() - stringData.contains("ERROR 501") -> showError501Dialog() stringData.contains("#Buffer Completed") -> showStartSampleDialog() stringData.contains("#Sample Completed") -> { fetchResult() @@ -289,23 +287,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 @@ -318,23 +299,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(), From 0e847bad0ab1bcd503b1776b48927a133d824e06 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 13:16:30 +0530 Subject: [PATCH 7/8] show warning msg for loginid mismatch --- .../presentation/hemocube/HemoCubeFragment.kt | 30 ++++++++++++------- .../layout/fragment_hemo_cube_reference.xml | 15 ++++++++++ 2 files changed, 34 insertions(+), 11 deletions(-) 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 3b0b05b..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,28 +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() { @@ -320,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 { @@ -351,8 +355,6 @@ class HemoCubeFragment : Fragment() { // } // } DataHolder.hemoCubeTestData?.apply { - - deviceId = deviceSerialNo led1Buffer = led1BufferForDevice led2Buffer = led2BufferForDevice @@ -365,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()) @@ -491,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" /> + + From 8824fb6b11b5da94f67eebbe9c117616541a5004 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Sun, 29 Oct 2023 13:33:18 +0530 Subject: [PATCH 8/8] run deviceid command and store deviceid in spref --- .../data/constant/HemoCubeCommands.kt | 1 + .../diagnostics/DiagnosticsFragment.kt | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) 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/diagnostics/DiagnosticsFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt index 1b949a6..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)