diff --git a/app/build.gradle b/app/build.gradle index 9343354..d054cb2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -106,7 +106,7 @@ dependencies { implementation "androidx.fragment:fragment-ktx:1.6.2" // CSV read, write - implementation 'com.opencsv:opencsv:5.5' + implementation 'com.opencsv:opencsv:5.9' // Barcode scanner implementation 'com.journeyapps:zxing-android-embedded:4.3.0' diff --git a/app/src/main/java/com/example/hpostesting/data/datasource/LocalFileDataSource.kt b/app/src/main/java/com/example/hpostesting/data/datasource/LocalFileDataSource.kt index cdc1f38..d157a26 100644 --- a/app/src/main/java/com/example/hpostesting/data/datasource/LocalFileDataSource.kt +++ b/app/src/main/java/com/example/hpostesting/data/datasource/LocalFileDataSource.kt @@ -9,13 +9,13 @@ import java.io.IOException class LocalFileDataSource { - fun saveCsvToDisk(filepath: String, contents: ArrayList>){ + fun saveCsvToDisk(filepath: String, contents: ArrayList>) { val writer = CSVWriter(FileWriter(filepath)) writer.writeAll(contents) // data is adding to csv writer.close() } - fun saveTextToDisk(filepath: String, contents: String){ + fun saveTextToDisk(filepath: String, contents: String) { val writer = FileWriter(File(filepath)) writer.append(contents) @@ -23,7 +23,6 @@ class LocalFileDataSource { writer.close() } - fun exportDataToCSV( fileName: String, dataList: List ): Boolean { @@ -57,16 +56,32 @@ class LocalFileDataSource { "resultData", "led1Buffer", "led2Buffer", + "led3Buffer", + "led4Buffer", "led1Sample", "led2Sample", + "led3Sample", + "led4Sample", "led1Average", "led2Average", + "led3Average", + "led4Average", + "abs1", + "abs2", + "abs3", + "abs4", "deviceRatio", "calculatedRatio", + "predictedDenovixRatio", "coefficients", "classificationResult", + "prdClassification", "errorMessages", - "batteryLevel" + "batteryLevel", + "batteryCapacity", + "batteryMaxCapacity", + "batteryTemperature", + "batteryVoltage" ) csvWriter.writeNext(header) @@ -96,14 +111,32 @@ class LocalFileDataSource { data.resultData, data.led1Buffer?.toString() ?: "", data.led2Buffer?.toString() ?: "", + data.led3Buffer?.toString() ?: "", + data.led4Buffer?.toString() ?: "", data.led1Sample?.toString() ?: "", data.led2Sample?.toString() ?: "", + data.led3Sample?.toString() ?: "", + data.led4Sample?.toString() ?: "", data.led1Average?.toString() ?: "", data.led2Average?.toString() ?: "", + data.led3Average?.toString() ?: "", + data.led4Average?.toString() ?: "", + data.abs1?.toString() ?: "", + data.abs2?.toString() ?: "", + data.abs3?.toString() ?: "", + data.abs4?.toString() ?: "", data.deviceRatio?.toString() ?: "", data.calculatedRatio?.toString() ?: "", + data.predictedDenovixRatio?.toString() ?: "", data.coefficients ?: "", - data.classificationResult + data.classificationResult, + data.prdClassification, + data.errorMessages, + data.batteryLevel, + data.batteryCapacity, + data.batteryMaxCapacity, + data.batteryTemperature, + data.batteryVoltage ) csvWriter.writeNext(row) } @@ -124,6 +157,4 @@ class LocalFileDataSource { return folder } - - } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/domain/di/AppModule.kt b/app/src/main/java/com/example/hpostesting/domain/di/AppModule.kt index ca277e2..9c65327 100644 --- a/app/src/main/java/com/example/hpostesting/domain/di/AppModule.kt +++ b/app/src/main/java/com/example/hpostesting/domain/di/AppModule.kt @@ -176,4 +176,10 @@ object AppModule { fun provideLocalFileDataSource(): LocalFileDataSource { return LocalFileDataSource() } + + @Provides + @Singleton + fun provideLocalFileDataSource(): LocalFileDataSource { + return LocalFileDataSource() + } } \ No newline at end of file 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 233bcb9..c0e425b 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 @@ -9,6 +9,7 @@ import android.content.SharedPreferences import android.os.BatteryManager import android.os.Bundle import android.util.Base64 +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -84,6 +85,7 @@ class HomeFragment : Fragment() { binding.btnQuickCapture.visibility = View.VISIBLE } + checkUnprocessedCSVData() viewModel.allUserData.observe(viewLifecycleOwner) { userData -> deleteIncompleteRegistrations(userData) } @@ -175,6 +177,10 @@ class HomeFragment : Fragment() { ) startActivity(i) } + + binding.downloadCSV.setOnClickListener { + showDownloadDialog(requireContext()) + } } private fun checkForTokenAndUpdate() { @@ -529,6 +535,14 @@ class HomeFragment : Fragment() { } } + private fun checkUnprocessedCSVData() { + hemoCubeViewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> + val downloadDataVisibility = + if (userDataList.any { !it.isCSVCreated && it.testStatus == true }) View.VISIBLE else View.GONE + binding.downloadCSV.visibility = downloadDataVisibility + } + } + private fun showUploadDialog(context: Context) { val builder = AlertDialog.Builder(context) builder.setTitle(R.string.upload_db_registration_title) @@ -546,6 +560,23 @@ class HomeFragment : Fragment() { dialog.show() } +// private fun showDownloadDialog(context: Context) { +// val builder = AlertDialog.Builder(context) +// builder.setTitle(R.string.download_db_registration_title) +// builder.setMessage(R.string.download_db_registration_message) +// +// builder.setPositiveButton(R.string.downloadcsv) { dialog, _ -> +// downloadLocalDBData(dialog) +// } +// +// builder.setNegativeButton(R.string.cancel) { dialog, _ -> +// dialog.dismiss() +// } +// +// val dialog = builder.create() +// dialog.show() +// } + private fun uploadLocalDBData(dialog: DialogInterface) { viewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> if (userDataList.isEmpty()) { @@ -583,6 +614,28 @@ class HomeFragment : Fragment() { } } +// private fun downloadLocalDBData(dialog: DialogInterface) { +// hemoCubeViewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> +// val downloadList = mutableListOf() +// +// userDataList.forEach { userData -> +// if (!userData.isCSVCreated) { +// downloadList.add(userData) // Add the userData to downloadList +// } +// } +// +// if (downloadList.isNotEmpty()) { +// // Call ViewModel function to create CSV with filtered data +// hemoCubeViewModel.createCSV(downloadList, requireContext()) +// Toast.makeText(requireContext(), "Done", Toast.LENGTH_SHORT).show() +// } else { +// Toast.makeText(requireContext(), "Failed", Toast.LENGTH_SHORT).show() +// } +// +// dialog.dismiss() +// } +// } + private fun deleteIncompleteRegistrations(userDataList: List) { userDataList.forEach { userData -> if (userData.csvPath.isEmpty()) { 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 3a478c7..e2af3d1 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 @@ -446,26 +446,6 @@ class HemoCubeViewModel @Inject constructor( return true // Assuming success, you might want to modify this based on your actual logic } - private fun getCurrentDate(): String { - val dateFormat = SimpleDateFormat("dd-MM-yy", Locale.getDefault()) - val currentDate = Date() - return dateFormat.format(currentDate) - } - - fun createCSV(hemoCubeTestData: List, appContext: Context) = - viewModelScope.launch { - val fileName = "HPOS${getCurrentDate()}.csv" - if (localFileDataSource.exportDataToCSV(fileName, hemoCubeTestData)) { - hemoCubeTestData.forEach { data -> - data.localFlag = true - hemoCubeDao.updateCSVFieldById( - data._id, - true - ) - } - } - } - fun getBatteryLevel(): Float? { val batteryPct: Float? = batteryStatus?.let { intent -> val level: Int = @@ -533,4 +513,24 @@ class HemoCubeViewModel @Inject constructor( return maxCapacity } + + fun createCSV(hemoCubeTestData: List, appContext: Context) = + viewModelScope.launch { + val fileName = "HPOS${getCurrentDate()}.csv" + if (localFileDataSource.exportDataToCSV(fileName, hemoCubeTestData)) { + hemoCubeTestData.forEach { data -> + data.localFlag = true + hemoCubeDao.updateCSVFieldById( + data._id, + true + ) + } + } + } + + private fun getCurrentDate(): String { + return SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", Locale.getDefault() + ).format(Calendar.getInstance().time) + } } diff --git a/app/src/main/res/drawable/download_csv.xml b/app/src/main/res/drawable/download_csv.xml new file mode 100644 index 0000000..17e7f58 --- /dev/null +++ b/app/src/main/res/drawable/download_csv.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 21e268f..df38b54 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -18,11 +18,24 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + उपयोगकर्ता आईडी 18 अंकों की होनी चाहिए और कृपया रक्त समूह का चयन करें डीबी टेस्ट अपलोड करें क्या आप स्थानीय डीबी टेस्ट को क्लाउड पर अपलोड करना चाहते हैं? + डाउनलोड डीबी टेस्ट + क्या आप लोकल डीबी टेस्ट्स को सीएसवी प्रारूप में डाउनलोड करना चाहते हैं? अपलोड रद्द करें अपलोड सफलता पूर्वक हुआ @@ -266,4 +268,5 @@ ठीक है डिवाइस जानकारी + सीएसवी डाउनलोड करें \ No newline at end of file diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index bb133ad..e7bd360 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -188,6 +188,8 @@ ಬಳಕೆದಾರ ಐಡಿ 18 ಅಂಕಗಳಿರಬೇಕು ಮತ್ತು ದಯವಿಟ್ಟು ರಕ್ತ ಗುಂಪುವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ ಸ್ಥಾನಿಕ DB ಪರೀಕ್ಷೆಗಳನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಿ ನೀವು ಸ್ಥಾನಿಕ DB ಪರೀಕ್ಷೆಗಳನ್ನು ಕ್ಲೌಡ್‌ಗೆ ಅಪ್ಲೋಡ್ ಮಾಡಲು ಬಯಸುತ್ತೀರಾ? + ಡೌನ್ಲೋಡ್ ಡಿಬಿ ಟೆಸ್ಟ್‌ಗಳು + ನೀವು ಲೋಕಲ್ ಡಿಬಿ ಟೆಸ್ಟ್‌ಗಳನ್ನು CSV ಆಕರದಲ್ಲಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಬಯಸುತ್ತೀರಾ? ಅಪ್ಲೋಡ್ ಮಾಡಿ ರದ್ದು ಮಾಡಿ ಯಶಸ್ವಿಯಾಗಿ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ @@ -265,6 +267,7 @@ ಅಪ್ಲಿಕೇಶನ್ ಭಾಷೆ ರಕ್ತ ಗುಂಡನ್ನು ಸೇರಿಸಿ ಸರಿ - + CSV ಡೌನ್ಲೋಡ್ ಮಾಡಿ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9e5ded7..40608b4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -191,6 +191,8 @@ User ID should be 18 digits and please select the blood group Upload DB Tests Do you want to upload the local DB tests to the cloud? + Download DB Tests + Do you want to download the local DB tests in CSV format? Upload Cancel @@ -271,4 +273,5 @@ Select your preferred language App Language OK + Download CSV \ No newline at end of file