From 610e206f27d8ce39c57e9e76b95bfdb7b6047307 Mon Sep 17 00:00:00 2001 From: Mariya Date: Mon, 4 Dec 2023 13:52:30 +0530 Subject: [PATCH] kannada and hindi version of strings added --- .idea/.gitignore | 3 + app/build.gradle | 27 ++++---- .../adapters/UserListOnlineAdapter.kt | 5 +- .../hposregistration/data/LanguageManager.kt | 30 ++++++++ .../ui/activities/MainActivity.kt | 8 +++ .../ui/fragments/LanguageSettingsFragment.kt | 69 +++++++++++++++++++ .../ui/fragments/LoginFragment.kt | 4 +- .../ui/fragments/UserListFragment.kt | 8 ++- .../registration/AbhaRegistrationFragment.kt | 12 ++-- .../UserDetailsRegistrationFragment.kt | 28 ++++---- .../res/drawable/baseline_settings_24.xml | 5 ++ .../res/layout/fragment_language_settings.xml | 13 ++++ .../main/res/layout/fragment_user_list.xml | 8 +++ .../main/res/navigation/main_nav_graph.xml | 15 ++++ app/src/main/res/values-hi/strings.xml | 9 +++ .../res/{values-ka => values-kn}/strings.xml | 11 ++- app/src/main/res/values/strings.xml | 12 +++- 17 files changed, 223 insertions(+), 44 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 app/src/main/java/com/example/hposregistration/data/LanguageManager.kt create mode 100644 app/src/main/java/com/example/hposregistration/ui/fragments/LanguageSettingsFragment.kt create mode 100644 app/src/main/res/drawable/baseline_settings_24.xml create mode 100644 app/src/main/res/layout/fragment_language_settings.xml rename app/src/main/res/{values-ka => values-kn}/strings.xml (95%) diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/app/build.gradle b/app/build.gradle index 368fba3..07b1ee5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,9 +42,9 @@ android { dependencies { - implementation 'androidx.core:core-ktx:1.10.1' + implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.9.0' + implementation 'com.google.android.material:material:1.10.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' @@ -58,24 +58,24 @@ dependencies { implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-storage-ktx' implementation 'com.firebaseui:firebase-ui-firestore:8.0.2' - implementation 'com.google.android.gms:play-services-auth:20.6.0' + implementation 'com.google.android.gms:play-services-auth:20.7.0' // Coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1' // Coroutine Lifecycle Scopes - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" - implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2" + implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2" //Dagger - Hilt implementation "com.google.dagger:hilt-android:2.46" kapt "com.google.dagger:hilt-android-compiler:2.46" - kapt "androidx.hilt:hilt-compiler:1.0.0" + kapt "androidx.hilt:hilt-compiler:1.1.0" // Navigation Component - implementation "androidx.navigation:navigation-fragment-ktx:2.7.0" - implementation "androidx.navigation:navigation-ui-ktx:2.7.0" + implementation "androidx.navigation:navigation-fragment-ktx:2.7.5" + implementation "androidx.navigation:navigation-ui-ktx:2.7.5" // Retrofit + GSON implementation "com.squareup.retrofit2:retrofit:2.9.0" @@ -85,19 +85,20 @@ dependencies { implementation 'com.jakewharton.timber:timber:4.7.1' // Activity KTX for viewModels() - implementation "androidx.activity:activity-ktx:1.7.2" + implementation "androidx.activity:activity-ktx:1.8.1" //image implementation 'com.github.bumptech.glide:glide:4.13.2' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' //Room - implementation "androidx.room:room-ktx:2.6.0-alpha03" - implementation "androidx.room:room-runtime:2.6.0-alpha03" - kapt ("androidx.room:room-compiler:2.6.0-alpha03") + implementation "androidx.room:room-ktx:2.6.0" + implementation "androidx.room:room-runtime:2.6.0" + kapt ("androidx.room:room-compiler:2.6.0") // Barcode scanner implementation 'com.journeyapps:zxing-android-embedded:4.3.0' - + implementation 'androidx.preference:preference-ktx:1.2.1' + implementation 'androidx.preference:preference-ktx:1.2.1' } \ No newline at end of file diff --git a/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt b/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt index a475764..7d0ca41 100644 --- a/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt +++ b/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt @@ -9,6 +9,7 @@ import com.bumptech.glide.Glide import com.example.hposregistration.data.user.UserData import com.firebase.ui.firestore.FirestoreRecyclerAdapter import com.firebase.ui.firestore.FirestoreRecyclerOptions +import `in`.sminnovations.hposregistration.R import `in`.sminnovations.hposregistration.databinding.UserItemViewBinding class UserListOnlineAdapter(options: FirestoreRecyclerOptions, private val view: View) : @@ -27,8 +28,8 @@ class UserListOnlineAdapter(options: FirestoreRecyclerOptions, private @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int, model: UserData) { holder.binding.apply { - userName.text = "Name: ${model.name}" - userId.text = "User ID: ${model._id}" + userName.text = view.context.getString(R.string.name) + ": ${model.name}" + userId.text = view.context.getString(R.string.userid) + ": ${model._id}" Glide.with(view).load(model.userImageURL).into(userImage) } } diff --git a/app/src/main/java/com/example/hposregistration/data/LanguageManager.kt b/app/src/main/java/com/example/hposregistration/data/LanguageManager.kt new file mode 100644 index 0000000..2ed4bff --- /dev/null +++ b/app/src/main/java/com/example/hposregistration/data/LanguageManager.kt @@ -0,0 +1,30 @@ +package com.example.hposregistration.data + +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/hposregistration/ui/activities/MainActivity.kt b/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt index 51c0221..0793368 100644 --- a/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt @@ -1,7 +1,9 @@ package com.example.hposregistration.ui.activities +import android.content.Context import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import com.example.hposregistration.data.LanguageManager import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hposregistration.databinding.ActivityMainBinding @@ -9,6 +11,12 @@ import `in`.sminnovations.hposregistration.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding + 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/hposregistration/ui/fragments/LanguageSettingsFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/LanguageSettingsFragment.kt new file mode 100644 index 0000000..6533bbe --- /dev/null +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/LanguageSettingsFragment.kt @@ -0,0 +1,69 @@ +package com.example.hposregistration.ui.fragments + +import android.content.Context +import android.content.pm.PackageManager +import android.os.Bundle +import android.preference.ListPreference +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import com.example.hposregistration.data.LanguageManager +import `in`.sminnovations.hposregistration.R + +private var isLanguageChanged = false +class LanguageSettingsFragment : PreferenceFragmentCompat() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + val preferenceScreen = preferenceManager.createPreferenceScreen(requireContext()) + + val languagePreference = androidx.preference.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") + + languagePreference.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, newValue -> + val languageCode = newValue as String + updateLanguage(requireContext(), languageCode) + true + } + + 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() + } + } + + 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 + } + + 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 diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt index 40a6a69..670a677 100644 --- a/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt @@ -47,10 +47,10 @@ class LoginFragment : Fragment() { performLogin(loginId, password) } else { if (loginId.isBlank()) { - binding.loginId.error = R.string.enter_proper_login_id.toString() + binding.loginId.error = getString(R.string.enter_proper_login_id) } if (password.isBlank()) { - binding.password.error = R.string.enter_proper_password.toString() + binding.password.error = getString(R.string.enter_proper_password) } } } diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt index 61362cd..5b303e2 100644 --- a/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt @@ -80,6 +80,10 @@ class UserListFragment : BaseFragment() { showUploadDialog(requireContext()) } + binding.btnsettings.setOnClickListener{ + findNavController().navigate(R.id.action_userListFragment_to_languageSettingsFragment) + + } viewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> deteleIncompleteRegistration(userDataList) } @@ -91,14 +95,14 @@ class UserListFragment : BaseFragment() { builder.setMessage(R.string.do_log_out) // Positive button - builder.setPositiveButton("Yes") { dialog, _ -> + builder.setPositiveButton(R.string.yes) { dialog, _ -> saveUserId() findNavController().navigate(R.id.action_userListFragment_to_loginFragment) dialog.dismiss() } // Negative button - builder.setNegativeButton("No") { dialog, _ -> + builder.setNegativeButton(R.string.no) { dialog, _ -> dialog.dismiss() } diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt index d306b96..5f91124 100644 --- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt @@ -144,7 +144,7 @@ class AbhaRegistrationFragment : BaseFragment() { private fun saveUserDataAsPerAbhaId() { with(binding) { tvScanMessage.visibility = View.VISIBLE - tvScanMessage.text = R.string.enter_aadhar_manually.toString() + tvScanMessage.text = getString(R.string.enter_aadhar_manually) etAbhaId.setText(userData.abhaId) etName.setText(userData.name) } @@ -156,7 +156,7 @@ class AbhaRegistrationFragment : BaseFragment() { private fun saveUserDataAsPerAadharId() { with(binding) { tvScanMessage.text = - R.string.scanned_aadhar_id.toString() + getString(R.string.scanned_aadhar_id) etName.setText(userData.name) } Toast.makeText( @@ -169,19 +169,19 @@ class AbhaRegistrationFragment : BaseFragment() { ): Boolean { with(binding) { if (!checkAbhaIDNumber(abhaId)) { - etAbhaId.error = R.string.invalid_abha_id.toString() + etAbhaId.error = getString(R.string.invalid_abha_id) return false } if (!checkAadharIDNumber(aadharId)) { - aadharID.error = R.string.invalid_aadhar_id.toString() + aadharID.error = getString(R.string.invalid_aadhar_id) return false } if (!checkUserName(userName)) { - etName.error = R.string.name_field_error.toString() + etName.error = getString(R.string.name_field_error) return false } if (!checkCenterName(centerName)) { - etCenterName.error = R.string.center_name_error.toString() + etCenterName.error = getString(R.string.center_name_error) return false } } diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt index a618e00..4b03516 100644 --- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt @@ -179,7 +179,7 @@ class UserDetailsRegistrationFragment : Fragment() { viewModel.insert(userData) navigateToCaptureUserImageFragment() } else { - showToast(R.string.enter_details_properly.toString()) + showToast(getString(R.string.enter_details_properly)) } } } @@ -194,7 +194,7 @@ class UserDetailsRegistrationFragment : Fragment() { with(binding) { val yob = etYob.text.toString() if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) { - etYob.error = R.string.enter_valid_birth_year.toString() + etYob.error = getString(R.string.enter_valid_birth_year) return false } else { userData.birthYear = yob @@ -211,7 +211,7 @@ class UserDetailsRegistrationFragment : Fragment() { val genderother= binding.etOthergender.text.toString() userData.gender = genderother if (genderother.isEmpty()) { - etOthergender.error = R.string.fill_field.toString() + etOthergender.error = getString(R.string.fill_field) return false } } @@ -225,7 +225,7 @@ class UserDetailsRegistrationFragment : Fragment() { val mobile = etMobile.text.toString() if (mobile.isEmpty() || mobile.length != 10) { - etMobile.error = R.string.valid_mobile_number.toString() + etMobile.error = getString(R.string.valid_mobile_number) return false } else { userData.phoneNumber = mobile @@ -233,7 +233,7 @@ class UserDetailsRegistrationFragment : Fragment() { val careOf = etCareof.text.toString() if (careOf.isEmpty()) { - etCareof.error = R.string.enter_father_husband_name.toString() + etCareof.error = getString(R.string.enter_father_husband_name) return false } else { userData.careOf = careOf @@ -241,7 +241,7 @@ class UserDetailsRegistrationFragment : Fragment() { val maritalStatus = etIsMarried.text.toString() if (maritalStatus.isEmpty()) { - etIsMarried.error = R.string.enter_marital_status.toString() + etIsMarried.error = getString(R.string.enter_marital_status) return false } else { userData.maritalStatus = maritalStatus @@ -250,7 +250,7 @@ class UserDetailsRegistrationFragment : Fragment() { val category = etCategory.text.toString() val other = etOther.text.toString() if (category.isEmpty()) { - etCategory.error = R.string.enter_category.toString() + etCategory.error = getString(R.string.enter_category) return false } else if (category == "OTHER" && tilOther.isVisible) { userData.category = other @@ -261,7 +261,7 @@ class UserDetailsRegistrationFragment : Fragment() { val caste = etCaste.text.toString() val othercaste = etOthercaste.text.toString() if (caste.isEmpty()) { - etCaste.error = R.string.enter_caste.toString() + etCaste.error = getString(R.string.enter_caste) return false } else if (caste == "OTHER" && tilOthercaste.isVisible) { userData.caste = othercaste @@ -277,7 +277,7 @@ class UserDetailsRegistrationFragment : Fragment() { val house = etHouse.text.toString() if (house.isEmpty()) { - etHouse.error = R.string.enter_house_address.toString() + etHouse.error = getString(R.string.enter_house_address) return false } else { userData.house = house @@ -285,7 +285,7 @@ class UserDetailsRegistrationFragment : Fragment() { val city = etCity.text.toString() if (city.isEmpty()) { - etCity.error = R.string.enter_city.toString() + etCity.error = getString(R.string.enter_city) return false } else { userData.city = city @@ -293,7 +293,7 @@ class UserDetailsRegistrationFragment : Fragment() { val district = etDistrict.text.toString() if (district.isEmpty()) { - etDistrict.error = R.string.enter_district.toString() + etDistrict.error = getString(R.string.enter_district) return false } else { userData.district = district @@ -301,7 +301,7 @@ class UserDetailsRegistrationFragment : Fragment() { val state = etState.text.toString() if (state.isEmpty()) { - etState.error = R.string.enter_state.toString() + etState.error = getString(R.string.enter_state) return false } else { userData.state = state @@ -309,7 +309,7 @@ class UserDetailsRegistrationFragment : Fragment() { val pincode = etPincode.text.toString() if (pincode.isEmpty() || pincode.length != 6) { - etPincode.error = R.string.enter_pincode.toString() + etPincode.error = getString(R.string.enter_pincode) return false } else { userData.pinCode = pincode @@ -322,7 +322,7 @@ class UserDetailsRegistrationFragment : Fragment() { if (yes1history.isChecked) { val familyHistory = etFamilyHistory.text.toString() if (familyHistory.isEmpty()) { - etFamilyHistory.error = R.string.enter_family_history.toString() + etFamilyHistory.error = getString(R.string.enter_family_history) return false } diff --git a/app/src/main/res/drawable/baseline_settings_24.xml b/app/src/main/res/drawable/baseline_settings_24.xml new file mode 100644 index 0000000..298a5a1 --- /dev/null +++ b/app/src/main/res/drawable/baseline_settings_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_language_settings.xml b/app/src/main/res/layout/fragment_language_settings.xml new file mode 100644 index 0000000..5f12e67 --- /dev/null +++ b/app/src/main/res/layout/fragment_language_settings.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_user_list.xml b/app/src/main/res/layout/fragment_user_list.xml index 53e02b3..4c3db74 100644 --- a/app/src/main/res/layout/fragment_user_list.xml +++ b/app/src/main/res/layout/fragment_user_list.xml @@ -16,6 +16,14 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + + + \ 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 2645929..4c7a0b1 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -128,7 +128,16 @@ आपने आधार आईडी स्कैन की है, कृपया आधार आईडी नंबर और अभा आईडी को मैन्युअली दर्ज करें आपने आभा आईडी स्कैन की है आपने आधार आईडी स्कैन की है + भाषा सफलतापूर्वक अपडेट की गई है + अपनी पसंदीदा भाषा का चयन करें + ऐप भाषा + रक्त समूह जोड़ें + ठीक है + उपयोगकर्ता आईडी + हाँ + नहीं + नाम NT-A NT-B diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-kn/strings.xml similarity index 95% rename from app/src/main/res/values-ka/strings.xml rename to app/src/main/res/values-kn/strings.xml index 91bbd61..b61ab9a 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -132,8 +132,15 @@ ನೀವು ಅಭಾ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ - - + ಭಾಷೆ ಯಶಸ್ವಿಯಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ + ನಿಮ್ಮ ಆದರಿತ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ + ಅಪ್ಲಿಕೇಶನ್ ಭಾಷೆ + ರಕ್ತ ಗುಂಡನ್ನು ಸೇರಿಸಿ + ಬಳಕೆದಾರ ಐಡಿ + ಸರಿ + ಹೌದು + ಇಲ್ಲ + ಹೆಸರು ಹೌದು ಇಲ್ಲ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b947e2d..a600066 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,7 +7,8 @@ Retry Failed to connect Cancel - + Yes + No Yes No @@ -125,12 +126,17 @@ Do you want to upload the local DB Registration to the cloud? Upload Upload done successfully - + Language updated successfully + Select your preferred language + App Language Please enter a proper Login ID Please enter a proper password Wrong Password Wrong UserID - + User Id + Name + OK + Add Blood Group You have scanned the Aadhar ID, need to enter Aadhar ID number you have scanned and Abha ID manually You have scanned the Abha ID You have scanned the Aadhar ID