diff --git a/app/build.gradle b/app/build.gradle index 15f5b63..2765cb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { applicationId "in.sminnovations.hpostesting.dev" minSdk 21 targetSdk 34 - versionCode 119 - versionName "2.1.119" + versionCode 120 + versionName "2.1.120" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index 6bf57a1..639b5c0 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -149,31 +149,34 @@ class HomeFragment : Fragment() { ": USER DATA", originalUserDataList.count().toString() + " : " + userData._id ) - - if (!userData.molbioFlag && isTokenAvailable && Constants.MOLBIO_INTEGRATION) { - val currentTimeFormatted = SimpleDateFormat( - "yyyy-MM-dd'T'HH:mm:ssZZZZZ", - Locale.getDefault() - ).format(Calendar.getInstance().time) - val bufferIntensityThreshold = - Constants.BUFFER_INTENSITY_THRESHOLDS[userData.deviceId]?.toString() - ?: "defaultThreshold" // Handle possible nulls safely - resultList.results?.add( - MolbioV2Result( - rawData = userData, - analysisId = userData._id, - analysisDate = currentTimeFormatted, - analysisStatus = userData.classificationResult - ?: "defaultStatus", // Handle possible nulls - thresholds = bufferIntensityThreshold, - interpretation = userData.classificationResult - ?: "defaultInterpretation", // Handle possible nulls - testId = userData._id, - testTime = currentTimeFormatted, - collectionTime = currentTimeFormatted, - expiryTime = currentTimeFormatted + var accessToken = sharedPreference.getString(Constants.ACCESS_TOKEN, "").toString() + // Upload results after processing all userData to avoid duplicates and ensure all modifications are done + if(accessToken.isNotEmpty()) { + if (!userData.molbioFlag && isTokenAvailable && Constants.MOLBIO_INTEGRATION) { + val currentTimeFormatted = SimpleDateFormat( + "yyyy-MM-dd'T'HH:mm:ssZZZZZ", + Locale.getDefault() + ).format(Calendar.getInstance().time) + val bufferIntensityThreshold = + Constants.BUFFER_INTENSITY_THRESHOLDS[userData.deviceId]?.toString() + ?: "defaultThreshold" // Handle possible nulls safely + resultList.results?.add( + MolbioV2Result( + rawData = userData, + analysisId = userData._id, + analysisDate = currentTimeFormatted, + analysisStatus = userData.classificationResult + ?: "defaultStatus", // Handle possible nulls + thresholds = bufferIntensityThreshold, + interpretation = userData.classificationResult + ?: "defaultInterpretation", // Handle possible nulls + testId = userData._id, + testTime = currentTimeFormatted, + collectionTime = currentTimeFormatted, + expiryTime = currentTimeFormatted + ) ) - ) + } } } Log.d("USER DATA LIST SIZE", resultList.results?.count().toString()) @@ -188,15 +191,16 @@ class HomeFragment : Fragment() { } } } - - var accessToken = sharedPreference.getString(Constants.ACCESS_TOKEN, "").toString() - // Upload results after processing all userData to avoid duplicates and ensure all modifications are done - if(accessToken.isNotEmpty()) { - if (resultList.results?.isNotEmpty() == true) { - hemoCubeViewModel.uploadResult(resultList) - Log.d("resultcount1","resultcount") - } + resultList.results?.forEach { result -> + result.rawData?.let { sanitizeDoubleValues(it) } } + +// Then, check if there are any results to upload. + if (resultList.results?.isNotEmpty() == true) { + hemoCubeViewModel.uploadResult(resultList) + Log.d("resultcount1", "Uploading sanitized results") + } + } } else { @@ -279,19 +283,20 @@ class HomeFragment : Fragment() { deviceId = sharedPreference.getString(Constants.DEVICE_ID, "").toString() if(userID.isNotEmpty() && password.isNotEmpty()) { Log.d("istoken",isTokenAvailable.toString()) - if (isTokenAvailable) { + if (!isTokenAvailable) { + Log.d("istoken1",isTokenAvailable.toString()) + hemoCubeViewModel.login(createLoginRequestData(userID, password)) + isTokenAvailable = true + + }else if(isTokenAvailable){ Log.d("istoken7",isTokenAvailable.toString()) isTokenAvailable = true hemoCubeViewModel.startPeriodicCheckUpdate() hemoCubeViewModel.checkUpdate(createCheckUpdateRequestData()) - }else{ + }else{ if(isTokenExpired(accessToken)) { Log.d("istoken8",isTokenAvailable.toString()) hemoCubeViewModel.login(createLoginRequestData(userID, password)) - }else { - Log.d("istoken1",isTokenAvailable.toString()) - hemoCubeViewModel.login(createLoginRequestData(userID, password)) - isTokenAvailable = true } } } else if (userID.isEmpty() && password.isEmpty() && deviceId.isNotEmpty()) { @@ -332,6 +337,36 @@ class HomeFragment : Fragment() { } } + hemoCubeViewModel.resultUpload.observe(viewLifecycleOwner) { + when (it) { + is Result.Success -> { + + Log.d("success,","uploded") + it.data.data?.forEach { id -> + id.rawData?.let { it1 -> + hemoCubeViewModel.updateMolbioFlag( + it1._id + ) + } + } + Toast.makeText(activity, "Molbio Result is successfully uploaded", Toast.LENGTH_LONG) + .show() + } + + is Result.Error -> { + binding.btnSubmit.visibility = View.VISIBLE + //Remove this line of code while deploying to IOCL + it.exception.let { message -> + Toast.makeText(activity, "$message", Toast.LENGTH_LONG) + .show() + Log.d("resultuploadfail", message.toString()) + } + } + + else -> {} + } + } + hemoCubeViewModel.uploadLogs.observe(viewLifecycleOwner) { response -> when (response) { is Result.Success -> { @@ -461,31 +496,6 @@ class HomeFragment : Fragment() { } } - hemoCubeViewModel.resultUpload.observe(viewLifecycleOwner) { - when (it) { - is Result.Success -> { - it.data.data?.forEach { id -> - id.rawData?.let { it1 -> - hemoCubeViewModel.updateMolbioFlag( - it1._id - ) - } - } - } - - is Result.Error -> { - binding.btnSubmit.visibility = View.VISIBLE - //Remove this line of code while deploying to IOCL - it.exception.let { message -> - Toast.makeText(activity, "An error occurred: $message", Toast.LENGTH_LONG) - .show() - } - } - - else -> {} - } - } - } @@ -851,6 +861,21 @@ class HomeFragment : Fragment() { } } + private fun sanitizeDoubleValues(hemoCubeTestData: HemoCubeTestData): HemoCubeTestData { + hemoCubeTestData::class.java.declaredFields.forEach { field -> + if (field.type == Double::class.javaObjectType || field.type == Double::class.javaPrimitiveType) { + field.isAccessible = true + val value = field.get(hemoCubeTestData) as Double? + if (value != null && (value.isInfinite() || value.isNaN())) { + field.set(hemoCubeTestData, 0.0) // Replace with a suitable default value + } + } + } + return hemoCubeTestData + } + + + private fun showUploadDialog(context: Context) { val builder = AlertDialog.Builder(context) builder.setTitle(R.string.upload_db_registration_title) 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 c710a49..f6ef870 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 @@ -151,7 +151,7 @@ class HemoCubeFragment : Fragment() { uploadedToCloud = true var accessToken = sharedPreferences.getString(Constants.ACCESS_TOKEN, "").toString() showToast(R.string.test_upload) - if (Constants.MOLBIO_INTEGRATION && accessToken.isNotEmpty()) { + if (Constants.MOLBIO_INTEGRATION) { hemoCubeViewModel.resultUpload.observe(viewLifecycleOwner) { when (it) { is Result.Success -> { 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 25671ca..dcfd891 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 @@ -328,8 +328,7 @@ class HemoCubeViewModel @Inject constructor( Log.i("Testdb", "Data uploaded to Firestore successfully") fireBaseUpload.postValue("Success") testDetails.localFlag = true - var accessToken = sharedPreference.getString(Constants.ACCESS_TOKEN, "").toString() - if (Constants.MOLBIO_INTEGRATION && accessToken.isNotEmpty()) { + if (Constants.MOLBIO_INTEGRATION) { uploadResult( MolbioV2ResultRequest( mutableListOf( @@ -417,6 +416,8 @@ class HemoCubeViewModel @Inject constructor( Log.e("Testdb", "Error uploading data to Firestore: $response") fireBaseUpload.postValue("Error") } + + else -> {} } } catch (e: Exception) { Log.e("Testdb", "Exception during data upload: ${e.message}")