From 10d822c5d67c09803fa638bb1ff7cf5e98468619 Mon Sep 17 00:00:00 2001 From: Kaif Date: Fri, 1 Dec 2023 15:55:49 +0530 Subject: [PATCH] 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