From 10d822c5d67c09803fa638bb1ff7cf5e98468619 Mon Sep 17 00:00:00 2001 From: Kaif Date: Fri, 1 Dec 2023 15:55:49 +0530 Subject: [PATCH 1/5] Kannada and Hindi language support added --- app/build.gradle | 2 + .../data/constant/LanguageManager.kt | 30 ++++++++ .../presentation/KitScanActivity.kt | 7 ++ .../hpostesting/presentation/MainActivity.kt | 7 ++ .../presentation/SplashActivity.kt | 8 +++ .../HemocubeBufferCheckActivity.kt | 7 ++ .../dashboard/DashboardActivity.kt | 9 ++- .../presentation/dashboard/HomeFragment.kt | 8 +-- .../dashboard/SlideshowFragment.kt | 70 +++++++++---------- .../diagnostics/DiagnosticsActivity.kt | 7 ++ .../hemocube/DigitalCardActivity.kt | 8 +++ .../presentation/hemocube/HemocubeActivity.kt | 7 ++ .../main/res/layout/fragment_slideshow.xml | 33 +-------- app/src/main/res/values-hi/strings.xml | 3 + .../res/{values-ka => values-kn}/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 16 files changed, 142 insertions(+), 70 deletions(-) create mode 100644 app/src/main/java/com/example/hpostesting/data/constant/LanguageManager.kt rename app/src/main/res/{values-ka => values-kn}/strings.xml (98%) diff --git a/app/build.gradle b/app/build.gradle index 35f690a..c404a7b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -133,4 +133,6 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:converter-gson:2.9.0" + implementation "androidx.preference:preference-ktx:1.2.1" + } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/data/constant/LanguageManager.kt b/app/src/main/java/com/example/hpostesting/data/constant/LanguageManager.kt new file mode 100644 index 0000000..85d6a7c --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/data/constant/LanguageManager.kt @@ -0,0 +1,30 @@ +package com.example.hpostesting.data.constant + +import android.content.Context +import android.content.SharedPreferences +import java.util.Locale + +object LanguageManager { + private const val LANGUAGE_PREF_KEY = "language_pref" + + fun setLocale(context: Context, languageCode: String) { + val locale = Locale(languageCode) + Locale.setDefault(locale) + + val resources = context.resources + val configuration = resources.configuration + configuration.setLocale(locale) + + context.createConfigurationContext(configuration) + } + + fun persistLanguagePreference(context: Context, languageCode: String) { + val prefs: SharedPreferences = context.getSharedPreferences("AppPrefs", Context.MODE_PRIVATE) + prefs.edit().putString(LANGUAGE_PREF_KEY, languageCode).apply() + } + + fun getSavedLanguage(context: Context): String { + val prefs: SharedPreferences = context.getSharedPreferences("AppPrefs", Context.MODE_PRIVATE) + return prefs.getString(LANGUAGE_PREF_KEY, "en") ?: "en" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt index a1420c1..3c52ec8 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt @@ -11,6 +11,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.presentation.hemocube.HemocubeActivity import com.example.hpostesting.presentation.testRight.TestRightActivity @@ -44,6 +45,12 @@ class KitScanActivity : AppCompatActivity() { binding.nameEditText.setText(contents) } + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) 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 1381a56..85d5052 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt @@ -17,6 +17,7 @@ import androidx.core.content.ContextCompat import androidx.core.view.get import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.data.model.patient.UserData import com.example.hpostesting.data.model.test.TestType import com.google.android.gms.location.* @@ -44,6 +45,12 @@ class MainActivity : AppCompatActivity() { } } + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) diff --git a/app/src/main/java/com/example/hpostesting/presentation/SplashActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/SplashActivity.kt index 41d77ba..c8e4a3a 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/SplashActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/SplashActivity.kt @@ -2,6 +2,7 @@ package com.example.hpostesting.presentation import com.example.hpostesting.presentation.dashboard.DashboardActivity import android.Manifest +import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.os.Build @@ -14,6 +15,7 @@ import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import com.example.hpostesting.data.DataHolder +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.util.MyUtils import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.ActivitySplashBinding @@ -32,6 +34,12 @@ class SplashActivity : AppCompatActivity() { private var allPermissionsGranted = false + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySplashBinding.inflate(layoutInflater) diff --git a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemocubeBufferCheckActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemocubeBufferCheckActivity.kt index 4f1a692..2b27d63 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemocubeBufferCheckActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/buffercheck/HemocubeBufferCheckActivity.kt @@ -21,6 +21,7 @@ import androidx.core.content.ContextCompat import androidx.core.view.get import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel import com.example.hpostesting.presentation.testRight.UsbService import com.hoho.android.usbserial.driver.UsbSerialDriver @@ -73,6 +74,12 @@ open class HemocubeBufferCheckActivity : AppCompatActivity() { } } + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityHemocubeBinding.inflate(layoutInflater) 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 fe96862..1117c9c 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 @@ -1,5 +1,6 @@ package com.example.hpostesting.presentation.dashboard +import android.content.Context import android.os.Bundle import android.view.Menu import android.widget.Toast @@ -10,7 +11,7 @@ import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.navigateUp import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController -import com.example.hpostesting.presentation.dashboard.SlideshowSettingsFragment +import com.example.hpostesting.data.constant.LanguageManager import com.google.android.material.navigation.NavigationView import com.google.firebase.appdistribution.FirebaseAppDistribution import com.google.firebase.appdistribution.FirebaseAppDistributionException @@ -25,6 +26,12 @@ class DashboardActivity : AppCompatActivity() { private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var binding: ActivityDashboardBinding + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) 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 d74f22d..f714436 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 @@ -162,10 +162,10 @@ class HomeFragment : Fragment() { val dateFormat = SimpleDateFormat("yyyy-MM-dd") val currentDate = Date() val formattedDate = dateFormat.format(currentDate) -// val query = Firebase.firestore.collection("patientData") -// .whereGreaterThanOrEqualTo("createdAt", formattedDate) -// .orderBy("createdAt", Query.Direction.DESCENDING) - val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false) + val query = Firebase.firestore.collection("patientData") + .whereGreaterThanOrEqualTo("createdAt", formattedDate) + .orderBy("createdAt", Query.Direction.DESCENDING) +// val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false) query.get().addOnSuccessListener { if (it.documents.isEmpty()) { binding.pendingTest.visibility = View.VISIBLE diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt index d8fa656..be2f2ff 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt @@ -1,47 +1,47 @@ package com.example.hpostesting.presentation.dashboard + +import android.content.Context import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider -import com.example.hpostesting.presentation.dashboard.ui.slideshow.SlideshowViewModel +import android.widget.Toast +import androidx.preference.ListPreference +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import com.example.hpostesting.data.constant.LanguageManager +import `in`.sminnovations.hpostesting.R -import `in`.sminnovations.hpostesting.databinding.FragmentSlideshowBinding +private var isLanguageChanged = false -class SlideshowFragment : Fragment() { - private var _binding: FragmentSlideshowBinding? = null +class SlideshowFragment : PreferenceFragmentCompat() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + val preferenceScreen = preferenceManager.createPreferenceScreen(requireContext()) - // This property is only valid between onCreateView and - // onDestroyView. - private val binding get() = _binding!! + val languagePreference = ListPreference(requireContext()) + languagePreference.key = "language_preference" + languagePreference.title = getString(R.string.app_language) + languagePreference.summary = getString(R.string.select_language) + languagePreference.entries = arrayOf("English", "Kannada", "Hindi") + languagePreference.entryValues = arrayOf("en", "kn", "hi") + languagePreference.setDefaultValue("en") - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View { - val slideshowViewModel = - ViewModelProvider(this).get(SlideshowViewModel::class.java) + languagePreference.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, newValue -> + val languageCode = newValue as String + updateLanguage(requireContext(), languageCode) + true + } - _binding = FragmentSlideshowBinding.inflate(inflater, container, false) - val root: View = binding.root + preferenceScreen.addPreference(languagePreference) + setPreferenceScreen(preferenceScreen) - val pInfo = requireActivity().packageManager.getPackageInfo( - requireActivity().packageName, 0 - ) - val version = pInfo.versionName - binding.textSlideshow.text = version - -// val textView: TextView = binding.textSlideshow -// slideshowViewModel.text.observe(viewLifecycleOwner) { -// textView.text = it -// } - return root + if (isLanguageChanged) { + Toast.makeText(requireContext(), R.string.language_update, Toast.LENGTH_SHORT).show() + } } - override fun onDestroyView() { - super.onDestroyView() - _binding = null + private fun updateLanguage(context: Context, languageCode: String) { + LanguageManager.persistLanguagePreference(context, languageCode) + LanguageManager.setLocale(context, languageCode) + requireActivity().recreate() // Recreate activity to apply language changes + isLanguageChanged = true } } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsActivity.kt index df5d356..25b41b4 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsActivity.kt @@ -21,6 +21,7 @@ import androidx.core.content.ContextCompat import androidx.core.view.get import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.presentation.hemocube.HemoCubeFragment import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel import com.example.hpostesting.presentation.testRight.UsbService @@ -77,6 +78,12 @@ class DiagnosticsActivity : AppCompatActivity() { } } + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityDiagnosticsBinding.inflate(layoutInflater) diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/DigitalCardActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/DigitalCardActivity.kt index 95c08d1..6e82bf7 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/DigitalCardActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/DigitalCardActivity.kt @@ -14,6 +14,7 @@ import android.os.IBinder import android.view.Menu import androidx.activity.viewModels import com.example.hpostesting.data.DataHolder +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.presentation.testRight.UsbService import com.hoho.android.usbserial.driver.UsbSerialDriver import `in`.sminnovations.hpostesting.R @@ -21,8 +22,15 @@ import `in`.sminnovations.hpostesting.databinding.ActivityDigitalCardBinding import `in`.sminnovations.hpostesting.databinding.ActivityHemocubeBinding class DigitalCardActivity : AppCompatActivity() { + private lateinit var binding: ActivityDigitalCardBinding + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityDigitalCardBinding.inflate(layoutInflater) diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt index fcc4110..ca197fe 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt @@ -21,6 +21,7 @@ import androidx.core.content.ContextCompat import androidx.core.view.get import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants +import com.example.hpostesting.data.constant.LanguageManager import com.example.hpostesting.presentation.testRight.UsbService import com.hoho.android.usbserial.driver.UsbSerialDriver import com.hoho.android.usbserial.driver.UsbSerialProber @@ -72,6 +73,12 @@ open class HemocubeActivity : AppCompatActivity() { viewModel.isServiceConnected = false } } + override fun attachBaseContext(newBase: Context?) { + val languageCode = LanguageManager.getSavedLanguage(newBase!!) + LanguageManager.setLocale(newBase, languageCode) + super.attachBaseContext(newBase) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/res/layout/fragment_slideshow.xml b/app/src/main/res/layout/fragment_slideshow.xml index dac927e..5757871 100644 --- a/app/src/main/res/layout/fragment_slideshow.xml +++ b/app/src/main/res/layout/fragment_slideshow.xml @@ -1,36 +1,9 @@ - - + - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 28cf949..2ef1c6f 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -255,5 +255,8 @@ सैम्पल रखें अमान्य त्रुटि + भाषा सफलतापूर्वक अपडेट की गई है + अपनी पसंदीदा भाषा का चयन करें + ऐप भाषा \ No newline at end of file diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-kn/strings.xml similarity index 98% rename from app/src/main/res/values-ka/strings.xml rename to app/src/main/res/values-kn/strings.xml index 1babc00..b653f26 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -255,5 +255,8 @@ ನಮೂನೆ ಇಟ್ಟುಕೊಳ್ಳಿ ಅಮಾನ್ಯ ದೋಷ + ಭಾಷೆ ಯಶಸ್ವಿಯಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ + ನಿಮ್ಮ ಆದರಿತ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ + ಅಪ್ಲಿಕೇಶನ್ ಭಾಷೆ \ 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 e8ef341..0720acd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -255,5 +255,8 @@ Place Sample Invalid Error + Language updated successfully + Select your preferred language + App Language \ No newline at end of file From 8a22b4449601234991d02ca44c573006e8d8e77c Mon Sep 17 00:00:00 2001 From: Kaif Date: Fri, 1 Dec 2023 16:10:15 +0530 Subject: [PATCH 2/5] Added app version --- .../dashboard/SlideshowFragment.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt index be2f2ff..5b89238 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/SlideshowFragment.kt @@ -1,6 +1,7 @@ package com.example.hpostesting.presentation.dashboard import android.content.Context +import android.content.pm.PackageManager import android.os.Bundle import android.widget.Toast import androidx.preference.ListPreference @@ -33,6 +34,15 @@ class SlideshowFragment : PreferenceFragmentCompat() { preferenceScreen.addPreference(languagePreference) setPreferenceScreen(preferenceScreen) + // App Version Preference + val appVersionPreference = Preference(requireContext()) + appVersionPreference.title = "App Version" + appVersionPreference.summary = getAppVersion(requireContext()) + + preferenceScreen.addPreference(languagePreference) + preferenceScreen.addPreference(appVersionPreference) + setPreferenceScreen(preferenceScreen) + if (isLanguageChanged) { Toast.makeText(requireContext(), R.string.language_update, Toast.LENGTH_SHORT).show() } @@ -44,4 +54,13 @@ class SlideshowFragment : PreferenceFragmentCompat() { requireActivity().recreate() // Recreate activity to apply language changes isLanguageChanged = true } + + private fun getAppVersion(context: Context): String { + return try { + val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) + pInfo.versionName + } catch (e: PackageManager.NameNotFoundException) { + "N/A" + } + } } \ No newline at end of file From fb5e6f3b497cded766319dd66779c51e3a75afee Mon Sep 17 00:00:00 2001 From: Kaif Date: Fri, 1 Dec 2023 16:22:13 +0530 Subject: [PATCH 3/5] Fixed string error --- .../presentation/hemocube/HemoCubeFragment.kt | 131 ++++++++++-------- 1 file changed, 74 insertions(+), 57 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 9bc21ea..2253baa 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 @@ -1,6 +1,5 @@ package com.example.hpostesting.presentation.hemocube -import com.example.hpostesting.presentation.dashboard.DashboardActivity import android.content.Context import android.content.Intent import android.content.SharedPreferences @@ -19,7 +18,7 @@ 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.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 @@ -231,7 +230,7 @@ class HemoCubeFragment : Fragment() { activity?.runOnUiThread { binding.btnPlacebuffer.visibility = View.GONE binding.btnSamplestart.visibility = View.VISIBLE - binding.tvSubtitle4.text = R.string.place_sample.toString() + binding.tvSubtitle4.text = getString(R.string.place_sample) } isUsingExistingBuffer = true } @@ -308,36 +307,37 @@ class HemoCubeFragment : Fragment() { activity?.runOnUiThread { binding.btnPlacebuffer.visibility = View.VISIBLE } - hemoCubeViewModel.messages.postValue(R.string.start.toString()) + hemoCubeViewModel.messages.postValue(getString(R.string.start)) } stringData.contains("#BS") -> { - hemoCubeViewModel.messages.postValue(R.string.buffer_started.toString()) + hemoCubeViewModel.messages.postValue(getString(R.string.buffer_started)) } stringData.contains("#BC") -> { activity?.runOnUiThread { - binding.tvSubtitle4.text = R.string.buffer_completed.toString() + binding.tvSubtitle4.text = getString(R.string.buffer_completed) binding.btnSamplestart.visibility = View.VISIBLE } } stringData.contains("#SS") -> { activity?.runOnUiThread { - binding.tvSubtitle4.text = R.string.sample_started.toString() + binding.tvSubtitle4.text = getString(R.string.sample_started) binding.btnSamplestart.visibility = View.GONE } } stringData.contains("#SC") -> { - hemoCubeViewModel.messages.postValue(R.string.sample_completed.toString() +"\n" + R.string.gathering_data.toString()) - fetchResult() - testingTrace.stop() + hemoCubeViewModel.messages.postValue( + getString(R.string.sample_completed) + "\n" + getString(R.string.gathering_data)) + fetchResult() + testingTrace.stop() } resultData.contains("REND") -> { hemoCubeViewModel.messages.postValue( - R.string.data_collected_processing_data.toString() + getString(R.string.data_collected_processing_data) ) val resultLines = resultData.split("\\s+(?=LB|LS)".toRegex()) var bufferIntensity = resultLines[1].split(' ')[1].trim() @@ -410,7 +410,7 @@ class HemoCubeFragment : Fragment() { private fun processResult() { try { - hemoCubeViewModel.messages.postValue(R.string.processing_result.toString()) + hemoCubeViewModel.messages.postValue(getString(R.string.processing_result)) val deviceLog = resultData val pInfo = requireActivity().packageManager.getPackageInfo( @@ -418,35 +418,49 @@ class HemoCubeFragment : Fragment() { ) val version = pInfo.versionName - val led1Average = log10(led1BufferForDevice?.div(led1SampleForDevice!!) ?: 0.0) - val led2Average = log10(led2BufferForDevice?.div(led2SampleForDevice!!) ?: 0.0) - val led3Average = log10(led3BufferForDevice?.div(led3SampleForDevice!!) ?: 0.0) - val led4Average = log10(led4BufferForDevice?.div(led4SampleForDevice!!) ?: 0.0) + val led1Average = log10(led1BufferForDevice.div(led1SampleForDevice)) + val led2Average = log10(led2BufferForDevice.div(led2SampleForDevice)) + val led3Average = log10(led3BufferForDevice.div(led3SampleForDevice)) + val led4Average = log10(led4BufferForDevice.div(led4SampleForDevice)) val deviceRatio = led3Average / led1Average - if (led1BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(0)?.get(0)!! - || led2BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(1)?.get(0)!! - || led3BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(2)?.get(0)!! - || led4BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(3)?.get(0)!! + if (led1BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(0) + ?.get(0)!! + || led2BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get( + 1 + )?.get(0)!! + || led3BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get( + 2 + )?.get(0)!! + || led4BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get( + 3 + )?.get(0)!! ) { validationError = true allErrorMessages += "Error: Invalid Test. Improper buffer reading (low)" activity?.runOnUiThread { - binding.errorMessage.text = R.string.error_improper_buffer_low.toString() + binding.errorMessage.text = getString(R.string.error_improper_buffer_low) binding.errorMessage.visibility = View.VISIBLE } } - if (led1BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(0)?.get(1)!! - || led2BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(1)?.get(1)!! - || led3BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(2)?.get(1)!! - || led4BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(3)?.get(1)!! + if (led1BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(0) + ?.get(1)!! + || led2BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get( + 1 + )?.get(1)!! + || led3BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get( + 2 + )?.get(1)!! + || led4BufferForDevice > Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get( + 3 + )?.get(1)!! ) { validationError = true allErrorMessages += "Error: Invalid Test. Improper buffer reading (high)" + "\n" activity?.runOnUiThread { binding.errorMessage.text = - R.string.error_improper_buffer_high.toString() + getString(R.string.error_improper_buffer_high) binding.errorMessage.visibility = View.VISIBLE binding.btnSubmit.isEnabled = true binding.btnSubmit.isClickable = true @@ -469,13 +483,13 @@ class HemoCubeFragment : Fragment() { constant = Constants.DEVICE_CONFIGURATION[deviceHardwareId]?.get(3)?.get(1) fittedAbs4 = gradient?.times(led4Average)?.plus(constant!!)!! - _predictedDenovixRatio = fittedAbs3?.div(fittedAbs1!!)!! + _predictedDenovixRatio = fittedAbs3.div(fittedAbs1) - if (fittedAbs1!! <= fittedAbs2!!) { + if (fittedAbs1 <= fittedAbs2) { validationError = true allErrorMessages += "Error: Invalid Test. Problem with de-oxygenation" + "\n" activity?.runOnUiThread { - binding.errorMessage.text = R.string.error_invalid_test.toString() + binding.errorMessage.text = getString(R.string.error_invalid_test) binding.errorMessage.visibility = View.VISIBLE } } @@ -483,7 +497,7 @@ class HemoCubeFragment : Fragment() { if (fittedAbs1 < 0 || fittedAbs2 < 0 || fittedAbs3 < 0 || fittedAbs4 < 0) { validationError = true activity?.runOnUiThread { - binding.errorMessage.text = R.string.error_negative_abs.toString() + binding.errorMessage.text = getString(R.string.error_negative_abs) binding.errorMessage.visibility = View.VISIBLE } } @@ -527,10 +541,13 @@ class HemoCubeFragment : Fragment() { this.errorMessages = allErrorMessages this.resultData = deviceLog this.batteryLevel = hemoCubeViewModel.getBatteryLevel().toString() - this.batteryCapacity = hemoCubeViewModel.getBatteryCapacity(requireContext()).toString() - this.batteryMaxCapacity = hemoCubeViewModel.getBatteryMaxCapacity(requireContext()).toString() + this.batteryCapacity = + hemoCubeViewModel.getBatteryCapacity(requireContext()).toString() + this.batteryMaxCapacity = + hemoCubeViewModel.getBatteryMaxCapacity(requireContext()).toString() this.batteryTemperature = hemoCubeViewModel.getBatteryTemperature().toString() - this.batteryVoltage = hemoCubeViewModel.getBatteryVoltage(requireContext()).toString() + this.batteryVoltage = + hemoCubeViewModel.getBatteryVoltage(requireContext()).toString() } if (!isUsingExistingBuffer) { @@ -544,12 +561,12 @@ class HemoCubeFragment : Fragment() { } // if (!validationError) { - activity?.runOnUiThread { - binding.btnSubmit.visibility = View.VISIBLE - binding.btnSubmit.isEnabled = true - binding.btnSubmit.isClickable = true - binding.clParent.setBackgroundColor(Color.parseColor("#edfffd")) - } + activity?.runOnUiThread { + binding.btnSubmit.visibility = View.VISIBLE + binding.btnSubmit.isEnabled = true + binding.btnSubmit.isClickable = true + binding.clParent.setBackgroundColor(Color.parseColor("#edfffd")) + } // } } catch (e: Exception) { Toast.makeText( @@ -566,28 +583,28 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.messages.postValue("result classification") if (calculatedRatio != null) { if (calculatedRatio < 0.05) - return R.string.error_repeat_test_higher_volume.toString() + return getString(R.string.error_repeat_test_higher_volume) if (calculatedRatio in 0.05..0.155) - return R.string.normal.toString() + return getString(R.string.normal) if (calculatedRatio in 0.155..0.175) - return R.string.negative_borderline.toString() + return getString(R.string.negative_borderline) if (calculatedRatio in 0.175..0.22) - return R.string.sickle_cell_trait.toString() + return getString(R.string.sickle_cell_trait) if (calculatedRatio in 0.22..0.25) - return R.string.positive_for_sickle_cell.toString() + return getString(R.string.positive_for_sickle_cell) if (calculatedRatio in 0.25..0.35) - return R.string.sickle_cell_disease.toString() + return getString(R.string.sickle_cell_disease) if (calculatedRatio > 0.35) - return R.string.error_repeat_test_lower_volume.toString() + return getString(R.string.error_repeat_test_lower_volume) } else { - return R.string.invalid.toString() + return getString(R.string.invalid) } } catch (e: Exception) { showToast(R.string.error_classification) Firebase.crashlytics.recordException(e) - return R.string.error.toString() + return getString(R.string.error) } - return R.string.invalid.toString() + return getString(R.string.invalid) } private fun absorbanceBasedClassification(predictedDenovixRatio: Double?): String { @@ -595,24 +612,24 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.messages.postValue("result classification") if (predictedDenovixRatio != null) { if (predictedDenovixRatio in 0.0..0.16) - return R.string.normal.toString() + return getString(R.string.normal) if (predictedDenovixRatio in 0.16..0.165) - return R.string.negative_borderline.toString() + return getString(R.string.negative_borderline) if (predictedDenovixRatio in 0.165..0.235) - return R.string.sickle_cell_trait.toString() + return getString(R.string.sickle_cell_trait) if (predictedDenovixRatio in 0.235..0.24) - return R.string.positive_borderline.toString() + return getString(R.string.positive_borderline) if (predictedDenovixRatio in 0.24..1.0) - return R.string.sickle_cell_disease.toString() + return getString(R.string.sickle_cell_disease) } else { - return R.string.invalid.toString() + return getString(R.string.invalid) } } catch (e: Exception) { showToast(R.string.error_classification) Firebase.crashlytics.recordException(e) - return R.string.error.toString() + return getString(R.string.error) } - return R.string.invalid.toString() + return getString(R.string.invalid) } private fun showToast(messageResId: Int) { From a3a5c0d6fbdec4949ec60d11bb737e3fc2644024 Mon Sep 17 00:00:00 2001 From: Mariya Date: Mon, 4 Dec 2023 15:49:39 +0530 Subject: [PATCH 4/5] pending strings added --- .../hpostesting/presentation/adapter/UserListAdapter.kt | 8 ++++---- app/src/main/res/values-hi/strings.xml | 3 ++- app/src/main/res/values-kn/strings.xml | 3 +++ app/src/main/res/values/strings.xml | 3 ++- 4 files changed, 11 insertions(+), 6 deletions(-) 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 af1dc97..e0034c0 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 @@ -94,13 +94,13 @@ class UserListAdapter( val builder = AlertDialog.Builder(context) .setView(dialogView) - .setTitle("Add Blood Group") + .setTitle(R.string.blood_group) val etBloodGroup = dialogView.findViewById(R.id.et_blood_group) - builder.setPositiveButton("OK") { dialog, which -> + builder.setPositiveButton(R.string.ok) { dialog, which -> val bloodGroup = etBloodGroup.text.toString() - if (bloodGroup.equals("Select Blood Group") || bloodGroup.isNullOrBlank()) { + if (bloodGroup.equals("Select Blood Group") ||bloodGroup.equals("ರಕ್ತ ಗುಂಪು ಆಯ್ಕೆಮಾಡಿ") || bloodGroup.isNullOrBlank()) { if (view != null) { etBloodGroup.error =view.context.getString(R.string.blood_group_error) } @@ -166,7 +166,7 @@ class UserListAdapter( // Handle the selected blood group here } - builder.setNegativeButton("Cancel") { dialog, which -> + builder.setNegativeButton(R.string.cancel) { dialog, which -> dialog.dismiss() } diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 2ef1c6f..6c5189e 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -258,5 +258,6 @@ भाषा सफलतापूर्वक अपडेट की गई है अपनी पसंदीदा भाषा का चयन करें ऐप भाषा - + रक्त समूह जोड़ें + ठीक है \ 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 b653f26..001b10c 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -258,5 +258,8 @@ ಭಾಷೆ ಯಶಸ್ವಿಯಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ ನಿಮ್ಮ ಆದರಿತ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ ಅಪ್ಲಿಕೇಶನ್ ಭಾಷೆ + ರಕ್ತ ಗುಂಡನ್ನು ಸೇರಿಸಿ + ಸರಿ + \ 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 0720acd..47fd564 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -155,6 +155,7 @@ Is Patient Married? (Yes/No) Category Blood Group + Add Blood Group Digital Counselling Card Patient Medical Records Patient Address Details @@ -258,5 +259,5 @@ Language updated successfully Select your preferred language App Language - + OK \ No newline at end of file From 41e30cf1787309b55ce4f2ce65a744cab6cb4cae Mon Sep 17 00:00:00 2001 From: Kaif Date: Fri, 8 Dec 2023 13:59:07 +0530 Subject: [PATCH 5/5] Incremented the version number for giving testing release --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 6cfcbda..8db906e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ android { minSdk 21 targetSdk 34 versionCode 44 - versionName "2.1.44" + versionName "2.1.45" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" }