From 3e690345c2bdecdee72d70ea2eca63a5b8de5c67 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Fri, 15 Dec 2023 14:37:41 +0530 Subject: [PATCH 1/2] handle-msg-fragmentation --- .idea/gradle.xml | 3 +-- app/build.gradle | 6 +++--- .../hpostesting/data/constant/Constants.kt | 3 ++- .../example/hpostesting/data/dao/MyDataBase.kt | 2 +- .../hpostesting/presentation/MainActivity.kt | 9 +++++++++ .../presentation/adapter/UserListAdapter.kt | 3 ++- .../presentation/hemocube/HemoCubeFragment.kt | 16 +++++----------- 7 files changed, 23 insertions(+), 19 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ae388c2..cb865f6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,8 +4,6 @@ diff --git a/app/build.gradle b/app/build.gradle index 7fe82c8..1943d1d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,11 +16,11 @@ android { // prod - production, preprod - preproduction, quality - qc, defaultConfig { - applicationId "in.sminnovations.hpostesting.quality" + applicationId "in.sminnovations.hpostesting" minSdk 21 targetSdk 34 - versionCode 52 - versionName "2.1.52" + versionCode 56 + versionName "2.1.56" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } 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 b1aab07..f26147b 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 @@ -29,7 +29,7 @@ object Constants { const val DEVICE_VENDOR_ID = 1027 const val HOMO_CUBE_ID = 29987 const val VENDOR_ID = 6790 - const val HEMO_CUBE_V2_ID = 24577 + const val HEMO_CUBE_V2_PRODUCT_ID = 24577 const val HEMO_CUBE_V2_VENDOR_ID = 1027 const val ERROR_NORMAL = 400 @@ -153,6 +153,7 @@ object Constants { const val INCUBATION_TIME_MIN = 0 const val INCUBATION_TIME_MAX = 1400 + const val BATTERY_LEVEL_MIN = 0 val BUFFER_INTENSITY_THRESHOLDS: Map>> = mapOf>>( "HCV-000-3001" to listOf( diff --git a/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt b/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt index 73079ab..49115b7 100644 --- a/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt +++ b/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt @@ -11,7 +11,7 @@ import com.example.hpostesting.data.model.patient.HemoCubeTestData import com.google.android.datatransport.runtime.dagger.Provides import javax.inject.Singleton -@Database(entities = [UserData::class, HemoCubeTestData::class, DeviceData::class], version = 11, exportSchema = false) +@Database(entities = [UserData::class, HemoCubeTestData::class, DeviceData::class], version = 13, exportSchema = false) @TypeConverters(Converters::class) abstract class MyDatabase : RoomDatabase() { abstract fun userDao(): UserDao diff --git a/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt index 85d5052..91763ae 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt @@ -114,6 +114,15 @@ class MainActivity : AppCompatActivity() { Constants.DEVICE_TYPE_HOMOCUBE } + device.productId == Constants.HEMO_CUBE_V2_PRODUCT_ID && device.vendorId == Constants.HEMO_CUBE_V2_VENDOR_ID -> { + binding.cvItem1.visibility = View.VISIBLE + binding.cvItem3.visibility = View.VISIBLE + binding.cvItem2.visibility = View.GONE + binding.cvItem4.visibility = View.GONE + DataHolder.deviceType.postValue(Constants.DEVICE_TYPE_HOMOCUBE) + Constants.DEVICE_TYPE_HOMOCUBE + } + device.productId == Constants.DEVICE_PRODUCT_ID && device.vendorId == Constants.DEVICE_VENDOR_ID -> { Log.d( TAG, diff --git a/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt b/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt index e0034c0..b3b9338 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt @@ -26,6 +26,7 @@ import android.widget.AutoCompleteTextView import androidx.core.content.ContextCompat.getSystemService import androidx.core.content.getSystemService import androidx.fragment.app.FragmentActivity +import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel import com.google.firebase.firestore.FirebaseFirestore @@ -196,7 +197,7 @@ class UserListAdapter( // } } userCard.setOnClickListener { - if (batLevel < 40) { + if (batLevel < Constants.BATTERY_LEVEL_MIN) { Toast.makeText( view.context, context?.getString(R.string.low_battery_warning), 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 ba6f55b..f7ffeb0 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 @@ -292,18 +292,12 @@ class HemoCubeFragment : Fragment() { resultData += stringData when { - stringData.contains("SNS") -> { - val slData = stringData.split(" ") - if (slData.size > 1 && slData[1].trim().length == 12) { - val hardwareId = slData[1].trim() - deviceHardwareId = hardwareId - } - } + resultData.contains("SNE") -> { + val pattern = Regex("HCV-\\d{3}-\\d{4}") + val matchResult = pattern.find(resultData) + val hardwareId = matchResult?.value - stringData.contains("SNE") -> { - val slData = stringData.split(" ") - if (slData.size > 1) { - val hardwareId = slData[0].trim() + if (hardwareId.toString().length == 12) { deviceHardwareId += hardwareId with(sharedPreferences.edit()) { putString(Constants.DEVICE_ID, deviceHardwareId) From d1b5ca32bf5eeda9dcbcd6c4b7f4ff48a6e9ce4e Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Mon, 18 Dec 2023 12:48:07 +0530 Subject: [PATCH 2/2] fix msg fragmentation in app and add log dsiplay for admin --- app/build.gradle | 2 +- .../hpostesting/data/constant/Constants.kt | 14 ++++++++ .../presentation/hemocube/HemoCubeFragment.kt | 33 ++++++++++++++----- .../hemocube/HemoCubeViewModel.kt | 1 + .../layout/fragment_hemo_cube_reference.xml | 21 ++++++++++-- 5 files changed, 59 insertions(+), 12 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1943d1d..0a45e20 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { compileSdk 34 namespace 'in.sminnovations.hpostesting' - // prod - production, preprod - preproduction, quality - qc, + // prod - production, preprod - preproduction, quality - qc defaultConfig { applicationId "in.sminnovations.hpostesting" minSdk 21 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 f26147b..891c3a5 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 @@ -40,6 +40,7 @@ object Constants { const val USER_ID = "usernameId" val STATICID = listOf( + "ADMIN", "VIZ-1000-0004", "VIZ-1000-0005", "VIZ-1000-0006", @@ -88,6 +89,19 @@ 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_TEST_COMPLETED = 12.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/presentation/hemocube/HemoCubeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt index f7ffeb0..7128812 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 @@ -57,6 +57,7 @@ class HemoCubeFragment : Fragment() { private var validationError = false private var deviceHardwareId = "" private var allErrorMessages = "" + private var testStatusCode = 0.0 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, @@ -121,6 +122,11 @@ class HemoCubeFragment : Fragment() { } + if (sharedPreferences.getString(Constants.USER_ID, "").toString() == "ADMIN") { + activity?.runOnUiThread { + binding.tvDeviceMessages.visibility = View.VISIBLE + } + } } private fun observeViewModel() { @@ -171,6 +177,10 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.messages.observe(viewLifecycleOwner) { binding.tvSubtitle4.text = it } + + hemoCubeViewModel.deviceMessages.observe(viewLifecycleOwner) { + binding.tvDeviceMessages.text = it + } } private fun checkAndStartProcess() { @@ -251,7 +261,7 @@ class HemoCubeFragment : Fragment() { data?.let { val stringData = String(it) fullReadOutput.append(stringData) - handleUsbData(stringData, fullReadOutput) + handleUsbData(stringData, testStatusCode) } } @@ -284,15 +294,16 @@ class HemoCubeFragment : Fragment() { }) } - private fun handleUsbData(stringData: String, fullReadOutput: StringBuilder) { + private fun handleUsbData(stringData: String, testStatusCode: Double) { if (stringData.contains("#")) { isTestOngoing = true } resultData += stringData + hemoCubeViewModel.deviceMessages.postValue(resultData) when { - resultData.contains("SNE") -> { + resultData.contains("SNE") && this.testStatusCode < Constants.TEST_STATUS_CODE_CONFIG_COMPLETED -> { val pattern = Regex("HCV-\\d{3}-\\d{4}") val matchResult = pattern.find(resultData) val hardwareId = matchResult?.value @@ -303,6 +314,7 @@ class HemoCubeFragment : Fragment() { putString(Constants.DEVICE_ID, deviceHardwareId) apply() } + this.testStatusCode = Constants.TEST_STATUS_CODE_CONFIG_COMPLETED } else { hemoCubeViewModel.messages.postValue("Config error") } @@ -312,32 +324,37 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.messages.postValue(getString(R.string.start)) } - stringData.contains("#BS") -> { + resultData.contains("#BS") && this.testStatusCode < Constants.TEST_STATUS_CODE_BUFFER_STARTED -> { hemoCubeViewModel.messages.postValue(getString(R.string.buffer_started)) + this.testStatusCode = Constants.TEST_STATUS_CODE_BUFFER_STARTED } - stringData.contains("#BC") -> { + resultData.contains("#BC") && this.testStatusCode < Constants.TEST_STATUS_CODE_BUFFER_COMPLETED -> { + this.testStatusCode = Constants.TEST_STATUS_CODE_BUFFER_COMPLETED activity?.runOnUiThread { binding.tvSubtitle4.text = getString(R.string.buffer_completed) binding.btnSamplestart.visibility = View.VISIBLE } } - stringData.contains("#SS") -> { + resultData.contains("#SS") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_STARTED -> { + this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_STARTED activity?.runOnUiThread { binding.tvSubtitle4.text = getString(R.string.sample_started) binding.btnSamplestart.visibility = View.GONE } } - stringData.contains("#SC") -> { + resultData.contains("#SC") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_COMPLETED -> { + this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_COMPLETED hemoCubeViewModel.messages.postValue( getString(R.string.sample_completed) + "\n" + getString(R.string.gathering_data)) fetchResult() testingTrace.stop() } - resultData.contains("REND") -> { + 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) ) diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index b9af079..f32fa04 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -51,6 +51,7 @@ class HemoCubeViewModel @Inject constructor( val deviceData = MutableLiveData() val networkStatusLiveData: LiveData get() = _networkStatusLiveData + val deviceMessages = MutableLiveData() val fireBaseUpload = MutableLiveData() val fireBaseBulkUpload = MutableLiveData() 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 a9aa2dd..9b166f9 100644 --- a/app/src/main/res/layout/fragment_hemo_cube_reference.xml +++ b/app/src/main/res/layout/fragment_hemo_cube_reference.xml @@ -195,16 +195,31 @@ style="@style/title1_1" android:visibility="gone" android:layout_width="match_parent" - android:layout_height="80dp" + android:layout_height="40dp" android:layout_marginHorizontal="24dp" - android:layout_marginTop="172dp" + android:layout_marginTop="72dp" android:gravity="center" android:textColor="@color/red" - android:textSize="18sp" + android:textSize="12sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btn_submit" /> + +