From 51d6cd57c324ed4d95aa9b730bb482e965abefd5 Mon Sep 17 00:00:00 2001 From: Mariya Date: Tue, 28 Nov 2023 15:38:33 +0530 Subject: [PATCH 1/5] kannada and hindi version of strings added --- .../ui/fragments/LoginFragment.kt | 8 +- .../ui/fragments/UserListFragment.kt | 14 +- .../registration/AbhaRegistrationFragment.kt | 21 +- .../ReviewDetailsRegistrationFragment.kt | 4 +- .../UserDetailsRegistrationFragment.kt | 29 +-- .../fragment_user_details_registration.xml | 6 +- app/src/main/res/values-hi/strings.xml | 206 +++++++++++++++++ app/src/main/res/values-ka/strings.xml | 211 ++++++++++++++++++ app/src/main/res/values/strings.xml | 46 ++++ 9 files changed, 505 insertions(+), 40 deletions(-) create mode 100644 app/src/main/res/values-hi/strings.xml create mode 100644 app/src/main/res/values-ka/strings.xml 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 2891ca7..40a6a69 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 = "Please enter a proper Login ID" + binding.loginId.error = R.string.enter_proper_login_id.toString() } if (password.isBlank()) { - binding.password.error = "Please enter a proper password" + binding.password.error = R.string.enter_proper_password.toString() } } } @@ -72,10 +72,10 @@ class LoginFragment : Fragment() { navigateToUserListFragment() return } else { - Toast.makeText(requireContext(), "Wrong Password", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), R.string.wrong_password, Toast.LENGTH_SHORT).show() } } - Toast.makeText(requireContext(), "Wrong UserID", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), R.string.wrong_user_id, Toast.LENGTH_SHORT).show() } private fun saveUserId(userId: String) { 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 ea1f623..61362cd 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 @@ -87,8 +87,8 @@ class UserListFragment : BaseFragment() { private fun logoutUser(context: Context) { val builder = AlertDialog.Builder(context) - builder.setTitle("Log Out") - builder.setMessage("Do you want to LogOut the Application?") + builder.setTitle(R.string.log_out) + builder.setMessage(R.string.do_log_out) // Positive button builder.setPositiveButton("Yes") { dialog, _ -> @@ -114,16 +114,16 @@ class UserListFragment : BaseFragment() { } private fun showUploadDialog(context: Context) { val builder = AlertDialog.Builder(context) - builder.setTitle("Upload DB Registration") - builder.setMessage("Do you want to upload the local DB Registration to the cloud?") + builder.setTitle(R.string.upload_db_registration) + builder.setMessage(R.string.upload_local_db_to_cloud) // Positive button - builder.setPositiveButton("Upload") { dialog, _ -> + builder.setPositiveButton(R.string.upload) { dialog, _ -> uploadLoadDBData(dialog) } // Negative button - builder.setNegativeButton("Cancel") { dialog, _ -> + builder.setNegativeButton(R.string.cancel) { dialog, _ -> dialog.dismiss() } @@ -141,7 +141,7 @@ class UserListFragment : BaseFragment() { viewModel.deleteById(userData._id) } dialog.dismiss() - Toast.makeText(requireContext(), "Upload done successfully", Toast.LENGTH_SHORT) + Toast.makeText(requireContext(), R.string.upload_done_successfully, Toast.LENGTH_SHORT) .show() } } 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 17b2c0e..d306b96 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 @@ -17,6 +17,7 @@ import com.example.hposregistration.ui.viewmodels.RegistrationViewModel import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanIntentResult import dagger.hilt.android.AndroidEntryPoint +import `in`.sminnovations.hposregistration.R import `in`.sminnovations.hposregistration.databinding.FragmentAbhaRegistrationBinding import org.json.JSONObject @@ -34,7 +35,7 @@ class AbhaRegistrationFragment : BaseFragment() { registerForActivityResult(ScanContract()) { result: ScanIntentResult -> if (result.contents == null) { Toast.makeText( - requireContext(), "Cancelled: Unable to scan, Try Again!!", Toast.LENGTH_LONG + requireContext(), R.string.cancelled_unable_scan, Toast.LENGTH_LONG ).show() } else { processScannedData(result.contents) @@ -133,7 +134,7 @@ class AbhaRegistrationFragment : BaseFragment() { } catch (e: Exception) { Toast.makeText( requireContext(), - "The QR Code you have scanned is not valid, enter the data manually", + R.string.invalid_qr_code, Toast.LENGTH_SHORT ).show() } @@ -143,23 +144,23 @@ class AbhaRegistrationFragment : BaseFragment() { private fun saveUserDataAsPerAbhaId() { with(binding) { tvScanMessage.visibility = View.VISIBLE - tvScanMessage.text = "You have scanned the Abha ID, need to enter Aadhar ID manually" + tvScanMessage.text = R.string.enter_aadhar_manually.toString() etAbhaId.setText(userData.abhaId) etName.setText(userData.name) } Toast.makeText( - requireContext(), "You have scanned the Abha ID", Toast.LENGTH_SHORT + requireContext(), R.string.scanned_abha_id, Toast.LENGTH_SHORT ).show() } private fun saveUserDataAsPerAadharId() { with(binding) { tvScanMessage.text = - "You have scanned the Aadhar ID, need to enter Aadhar ID number you have scan and Abha ID manually" + R.string.scanned_aadhar_id.toString() etName.setText(userData.name) } Toast.makeText( - requireContext(), "You have scanned the Aadhar ID", Toast.LENGTH_SHORT + requireContext(), R.string.scanned_aadharid, Toast.LENGTH_SHORT ).show() } @@ -168,19 +169,19 @@ class AbhaRegistrationFragment : BaseFragment() { ): Boolean { with(binding) { if (!checkAbhaIDNumber(abhaId)) { - etAbhaId.error = "Invalid Abha ID" + etAbhaId.error = R.string.invalid_abha_id.toString() return false } if (!checkAadharIDNumber(aadharId)) { - aadharID.error = "Invalid Aadhar ID" + aadharID.error = R.string.invalid_aadhar_id.toString() return false } if (!checkUserName(userName)) { - etName.error = "Name field can't be empty or less than 3 characters" + etName.error = R.string.name_field_error.toString() return false } if (!checkCenterName(centerName)) { - etCenterName.error = "Center name can't be empty or less than 3 characters" + etCenterName.error = R.string.center_name_error.toString() return false } } diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/ReviewDetailsRegistrationFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/ReviewDetailsRegistrationFragment.kt index 780067c..ae2c5f1 100644 --- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/ReviewDetailsRegistrationFragment.kt +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/ReviewDetailsRegistrationFragment.kt @@ -67,7 +67,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { } else { Toast.makeText( requireContext(), - "Internet not available, Data stored in local DB", + R.string.internt_not_local, Toast.LENGTH_SHORT ).show() navigateToUserListFragment() @@ -86,7 +86,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { if (it == "Success") { Toast.makeText( requireContext(), - "Registration Done Successfully", + R.string.registration_success, Toast.LENGTH_SHORT ).show() navigateToUserListFragment() 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 2d75e7a..a618e00 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 @@ -13,6 +13,7 @@ import androidx.navigation.fragment.navArgs import com.example.hposregistration.data.user.UserData import com.example.hposregistration.ui.viewmodels.RegistrationViewModel import dagger.hilt.android.AndroidEntryPoint +import `in`.sminnovations.hposregistration.R import `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding @@ -178,7 +179,7 @@ class UserDetailsRegistrationFragment : Fragment() { viewModel.insert(userData) navigateToCaptureUserImageFragment() } else { - showToast("Please enter all the details properly") + showToast(R.string.enter_details_properly.toString()) } } } @@ -193,7 +194,7 @@ class UserDetailsRegistrationFragment : Fragment() { with(binding) { val yob = etYob.text.toString() if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) { - etYob.error = "Please enter a valid birth year between 1900 and 2023" + etYob.error = R.string.enter_valid_birth_year.toString() return false } else { userData.birthYear = yob @@ -210,7 +211,7 @@ class UserDetailsRegistrationFragment : Fragment() { val genderother= binding.etOthergender.text.toString() userData.gender = genderother if (genderother.isEmpty()) { - etOthergender.error = "Please fill the field" + etOthergender.error = R.string.fill_field.toString() return false } } @@ -224,7 +225,7 @@ class UserDetailsRegistrationFragment : Fragment() { val mobile = etMobile.text.toString() if (mobile.isEmpty() || mobile.length != 10) { - etMobile.error = "Please enter a valid 10-digit mobile number" + etMobile.error = R.string.valid_mobile_number.toString() return false } else { userData.phoneNumber = mobile @@ -232,7 +233,7 @@ class UserDetailsRegistrationFragment : Fragment() { val careOf = etCareof.text.toString() if (careOf.isEmpty()) { - etCareof.error = "Please enter your name" + etCareof.error = R.string.enter_father_husband_name.toString() return false } else { userData.careOf = careOf @@ -240,7 +241,7 @@ class UserDetailsRegistrationFragment : Fragment() { val maritalStatus = etIsMarried.text.toString() if (maritalStatus.isEmpty()) { - etIsMarried.error = "Please enter your marital status" + etIsMarried.error = R.string.enter_marital_status.toString() return false } else { userData.maritalStatus = maritalStatus @@ -249,7 +250,7 @@ class UserDetailsRegistrationFragment : Fragment() { val category = etCategory.text.toString() val other = etOther.text.toString() if (category.isEmpty()) { - etCategory.error = "Please enter your category" + etCategory.error = R.string.enter_category.toString() return false } else if (category == "OTHER" && tilOther.isVisible) { userData.category = other @@ -260,7 +261,7 @@ class UserDetailsRegistrationFragment : Fragment() { val caste = etCaste.text.toString() val othercaste = etOthercaste.text.toString() if (caste.isEmpty()) { - etCaste.error = "Please enter your caste" + etCaste.error = R.string.enter_caste.toString() return false } else if (caste == "OTHER" && tilOthercaste.isVisible) { userData.caste = othercaste @@ -276,7 +277,7 @@ class UserDetailsRegistrationFragment : Fragment() { val house = etHouse.text.toString() if (house.isEmpty()) { - etHouse.error = "Please enter your house address" + etHouse.error = R.string.enter_house_address.toString() return false } else { userData.house = house @@ -284,7 +285,7 @@ class UserDetailsRegistrationFragment : Fragment() { val city = etCity.text.toString() if (city.isEmpty()) { - etCity.error = "Please enter your city" + etCity.error = R.string.enter_city.toString() return false } else { userData.city = city @@ -292,7 +293,7 @@ class UserDetailsRegistrationFragment : Fragment() { val district = etDistrict.text.toString() if (district.isEmpty()) { - etDistrict.error = "Please enter your district" + etDistrict.error = R.string.enter_district.toString() return false } else { userData.district = district @@ -300,7 +301,7 @@ class UserDetailsRegistrationFragment : Fragment() { val state = etState.text.toString() if (state.isEmpty()) { - etState.error = "Please enter your state" + etState.error = R.string.enter_state.toString() return false } else { userData.state = state @@ -308,7 +309,7 @@ class UserDetailsRegistrationFragment : Fragment() { val pincode = etPincode.text.toString() if (pincode.isEmpty() || pincode.length != 6) { - etPincode.error = "Please enter a valid 6-digit pin code" + etPincode.error = R.string.enter_pincode.toString() return false } else { userData.pinCode = pincode @@ -321,7 +322,7 @@ class UserDetailsRegistrationFragment : Fragment() { if (yes1history.isChecked) { val familyHistory = etFamilyHistory.text.toString() if (familyHistory.isEmpty()) { - etFamilyHistory.error = "Please enter your family history" + etFamilyHistory.error = R.string.enter_family_history.toString() return false } diff --git a/app/src/main/res/layout/fragment_user_details_registration.xml b/app/src/main/res/layout/fragment_user_details_registration.xml index 7f06efc..6d6df39 100644 --- a/app/src/main/res/layout/fragment_user_details_registration.xml +++ b/app/src/main/res/layout/fragment_user_details_registration.xml @@ -97,7 +97,7 @@ android:id="@+id/et_othergender" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Enter Other" + android:hint="@string/other" android:inputType="text" android:maxLength="10" /> @@ -203,7 +203,7 @@ android:id="@+id/et_other" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Enter Other Category" + android:hint="@string/other" android:inputType="text" android:maxLength="10" /> @@ -245,7 +245,7 @@ android:id="@+id/et_othercaste" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Enter Other Caste" + android:hint="@string/other" android:inputType="text" android:maxLength="10" /> diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml new file mode 100644 index 0000000..2645929 --- /dev/null +++ b/app/src/main/res/values-hi/strings.xml @@ -0,0 +1,206 @@ + + HPOS रजिस्ट्रेशन + + नमस्ते खाली फ़्रेग्मेंट + + + पुनः प्रयास करें + कनेक्ट करने में विफल + रद्द करें + + + व्यक्ति का ABHA ID/Aadhar ID कार्ड स्कैन करें + अब स्कैन करें + या + ABHA और Aadhar नंबर दर्ज करें + ABHA नंबर + ABHA ID कार्ड बनाएं + यहां क्लिक करें + व्यक्ति का Aadhaar कार्ड स्कैन करें + आगे बढ़ें + Aadhaar नंबर मैन्युअली दर्ज करें + Aadhaar नंबर + व्यक्ति का विवरण दर्ज करें + व्यक्ति का नाम + आयु (वर्षों में) + लिंग चयन करें + नाम खाली नहीं हो सकता + आयु खाली नहीं हो सकती + लिंग खाली नहीं हो सकता + आयु मान्य होनी चाहिए + जन्म साल + वैवाहिक स्थिति चयन करें + पिता/पति का नाम + जाति + व्यक्ति का पता विवरण + जिला + शहर / गाँव + राज्य + पिनकोड + रोगी का चिकित्सा रेकॉर्ड + समीक्षा + रक्त समूह चयन करें + घर + क्या आप पिछले तीन महीनों से सिक्ल सेल के लिए दवा ले रहे हैं? + क्या आपने पिछले तीन महीनों में कोई रक्त प्रवाहन किया है? + + उपयोगकर्ता सूची + उपयोगकर्ता पंजीकृत करें + क्या उपयोगकर्ता के पास सिक्ल सेल के लिए कोई परिवार का इतिहास है? + सिक्ल सेल का परिवारिक इतिहास + मोबाइल नंबर (10 अंक) + उपजाति + उपयोगकर्ता की छवि कैद करें + मोबाइल नंबर + संपादित करें + उपयोगकर्ता विवरण + इंटरनेट उपलब्ध नहीं है और स्थानीय डेटाबेस में कोई डेटा उपलब्ध नहीं है + उपयोगकर्ता आईडी: %1$s + ABHA नंबर: %1$s + Aadhar नंबर: %1$s + व्यक्ति का नाम: %1$s + जन्म साल: %1$s + लिंग: %1$s + मोबाइल नंबर: %1$s + पिता/पति का नाम: %1$s + वैवाहिक स्थिति: %1$s + श्रेणी: %1$s + जाति: %1$s + उपजाति: %1$s + घर: %1$s + शहर/गाँव: %1$s + जिला: %1$s + राज्य: %1$s + केंद्र का नाम: %1$s + + पिनकोड: %1$s + क्या दवा ले रहे हैं: %1$s + क्या रक्त प्रवाहन हो रहा है: %1$s + क्या कोई सिक्ल सेल इतिहास है: %1$s + सिक्ल सेल परिवारिक इतिहास: %1$s + केंद्र का नाम + लॉगिन आईडी + पासवर्ड + लॉगिन + श्रेणी + श्रेणी + पुरुष + महिला + अन्य + रद्द किया गया: स्कैन करने में असमर्थ, पुनः प्रयास करें!! + कृपया एबीए आईडी / आधार आईडी स्कैन करें + आपने स्कैन किया हुआ QR कोड अमान्य है, कृपया डेटा मैन्युअली दर्ज करें + आपने एबीए आईडी स्कैन किया है, आधार आईडी को मैन्युअली दर्ज करने की आवश्यकता है + अमान्य एबीए आईडी + अमान्य आधार आईडी + नाम फील्ड खाली नहीं हो सकती या 3 अक्षरों से कम होनी चाहिए + केंद्र का नाम खाली नहीं हो सकता या 3 अक्षरों से कम होना चाहिए + पंजीकरण सफलतापूर्वक हुआ + इंटरनेट उपलब्ध नहीं है, परीक्षण विवरण स्थानीय रूप से संग्रहित किए गए हैं + कृपया सभी विवरणों को ठीक से दर्ज करें + कृपया 1900 से 2023 के बीच एक मान्य जन्म वर्ष दर्ज करें + कृपया फ़ील्ड भरें + कृपया एक मान्य 10-अंकों का मोबाइल नंबर दर्ज करें + कृपया अपना नाम दर्ज करें + कृपया अपनी वैवाहिक स्थिति दर्ज करें + कृपया अपनी श्रेणी दर्ज करें + कृपया अपनी जाति दर्ज करें + कृपया अपना घर का पता दर्ज करें + कृपया अपने शहर को दर्ज करें + कृपया अपने जिले को दर्ज करें + कृपया अपने राज्य को दर्ज करें + कृपया एक मान्य 6-अंकों कोड दर्ज करें + कृपया अपना परिवार का इतिहास दर्ज करें + कृपया अपने पालक का नाम दर्ज करें + पिता / पति का नाम दर्ज करें + क्या आप ऐप्लिकेशन से लॉग आउट करना चाहते हैं? + लॉग आउट + + डीबी पंजीकरण अपलोड करें + क्या आप स्थानीय डीबी को क्लाउड पर अपलोड करना चाहते हैं? + अपलोड + अपलोड सफलतापूर्वक हुआ + + कृपया सही लॉगिन आईडी दर्ज करें + कृपया सही पासवर्ड दर्ज करें + गलत पासवर्ड + गलत उपयोगकर्ता आईडी + आपने आधार आईडी स्कैन की है, कृपया आधार आईडी नंबर और अभा आईडी को मैन्युअली दर्ज करें + आपने आभा आईडी स्कैन की है + आपने आधार आईडी स्कैन की है + + + NT-A + NT-B + NT-C + NT-D + OBC + OPEN + OTHER + SBC + SC + ST + + + + अहीर + बराई + ब्राह्मण + बौद्ध + चांब़चार + चामार + देवांगन + धीवर + फुलमाली + गोंड + जैन + कोली + कोष्टी + कुंभार + कुंबी + लोहार + माळी + माणा + महार + मौर्या + मुसलमान + नवी + अन्य + पवार + परदेसी + शाहू + सोनार + तेली + + + + + विवाहित + एकत्र + तलाकशुदा + + + + + O+ve + O-ve + A+ve + A-ve + B+ve + B-ve + AB+ve + AB-ve + + + + पुरुष + महिला + अन्य + + + + हाँ + नहीं + + + \ No newline at end of file diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml new file mode 100644 index 0000000..91bbd61 --- /dev/null +++ b/app/src/main/res/values-ka/strings.xml @@ -0,0 +1,211 @@ + + HPOS ನೋಂದಾಯಿಸಲು + ಹಲೋ ಖಾಲಿ ಫ್ರ್ಯಾಗ್ಮೆಂಟ್ + + // ದೋಷ ಸಂದೇಶಗಳು + ಮರುಪ್ರಯಾಸ + ಸಂಪರ್ಕ ಸಾಧಿಸಲಾಗಿಲ್ಲ + ರದ್ದು ಮಾಡಿ + + + //Registration Screens + ವ್ಯಕ್ತಿಯ ಏಬಿಎ ಐಡಿ / ಆಧಾರ್ ಐಡಿ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ + ಈಗ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ + ಅಥವಾ + ಏಬಿಎ ಮತ್ತು ಆಧಾರ್ ಸಂಖ್ಯೆಗಳನ್ನು ಕೈಮಾಡಿ + ಏಬಿಎ ಸಂಖ್ಯೆ + ಏಬಿಎ ಐಡಿ ಕಾರ್ಡ್ ರಚಿಸಿ + ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ + ವ್ಯಕ್ತಿಯ ಆಧಾರ್ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ + ಮುಂದುವರಿಸಿ + ಆಧಾರ್ ಸಂಖ್ಯೆಯನ್ನು ಕೈಮಾಡಿ + ಆಧಾರ್ ಸಂಖ್ಯೆ + ವ್ಯಕ್ತಿಯ ವಿವರಗಳನ್ನು ನಮೂದಿಸಿ + ವ್ಯಕ್ತಿಯ ಹೆಸರು + ವಯಸ್ಸು ವರ್ಷಗಳಲ್ಲಿ + ಲಿಂಗ ಆಯ್ಕೆ ಮಾಡಿ + ಹೆಸರು ಖಾಲಿ ಇರಬಾರದು + ವಯಸ್ಸು ಖಾಲಿ ಇರಬಾರದು + ಲಿಂಗ ಖಾಲಿ ಇರಬಾರದು + ವಯಸ್ಸು ಯೋಗ್ಯವಾಗಿರಬೇಕು + ಹುಟ್ಟಿದ ವರ್ಷ + ವೈವಾಹಿಕ ಸ್ಥಿತಿ ಆಯ್ಕೆ ಮಾಡಿ + ತಂದೆಯ / ಗಂಡನ ಹೆಸರು + ಜಾತಿ + ವ್ಯಕ್ತಿಯ ವಿಳಾಸ ವಿವರಗಳು + ಜಿಲ್ಲೆ + ನಗರ / ಹಳ್ಳಿ + ರಾಜ್ಯ + ಪಿನ್‌ಕೋಡ್ + ರೋಗಿಯ ವೈದ್ಯಕೀಯ ದಾಖಲೆಗಳು + ಸಮೀಕ್ಷಿಸಿ + ರಕ್ತ ಗುಂಪು ಆಯ್ಕೆ ಮಾಡಿ + ಮನೆ + ಹಳೆಯ ಮೂಲಕ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಗೆ ನೀವು ಔಷಧಿಗೆ ಒಳಪಟ್ಟಿದ್ದೀರಾ? + ಹಳೆಯ ಮೂಲಕ ರಕ್ತ ಸಂಚಾರ ನಡೆಸಲಾಗಿದೆಯೇ? + + + ಬಳಕೆದಾರ ಪಟ್ಟಿ + ಬಳಕೆದಾರ ನೋಂದಣಿ + ಬಳಕೆದಾರನಿಗೆ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸವಿದೆಯೇ + ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸ + ಮೊಬೈಲ್ ಸಂಖ್ಯೆ (10 ಅಂಕಗಳು) + ಉಪ ಜಾತಿ + ಬಳಕೆದಾರ ಚಿತ್ರ ಹಿಡಿಯಿರಿ + ಮೊಬೈಲ್ ಸಂಖ್ಯೆ + ಸಂಪಾದಿಸಿ + ಬಳಕೆದಾರ ವಿವರಗಳು + ಇಂಟರ್ನೆಟ್ ಲಭ್ಯವಿಲ್ಲ ಮತ್ತು ಸ್ಥಳಿಯ ಡಿಬಿಯಲ್ಲಿ ಯಾವುದೇ ಡೇಟಾ ಲಭ್ಯವಿಲ್ಲ + ಬಳಕೆದಾರ ಐಡಿ: %1$s + ಆಭಾ ಸಂಖ್ಯೆ: %1$s + ಆಧಾರ ಸಂಖ್ಯೆ: %1$s + ವ್ಯಕ್ತಿಯ ಹೆಸರು: %1$s + ಹುಟ್ಟಿದ ವರ್ಷ: %1$s + ಲಿಂಗ: %1$s + ಮೊಬೈಲ್ ಸಂಖ್ಯೆ: %1$s + ತಂದೆಯ / ಗಂಡನ ಹೆಸರು: %1$s + ವೈವಾಹಿಕ ಸ್ಥಿತಿ: %1$s + ವರ್ಗ: %1$s + ಜಾತಿ: %1$s + ಉಪ ಜಾತಿ: %1$s + ಮನೆ: %1$s + ನಗರ / ಹಳ್ಳಿ: %1$s + ಜಿಲ್ಲೆ: %1$s + ರಾಜ್ಯ: %1$s + ಕೇಂದ್ರ ಹೆಸರು: %1$s + + + ಪಿನ್‌ಕೋಡ್: %1$s + ಔಷಧಿಗಳ ಕೆಳಗೆ ಇದ್ದಾರೆ: %1$s + ರಕ್ತ ಸಂರಚನೆಯಲ್ಲಿ ಇದ್ದಾರೆ: %1$s + ಯಾವುದೇ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಇತಿಹಾಸವಿದೆಯೇ: %1$s + ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸ: %1$s + ಕೇಂದ್ರ ಹೆಸರು + ಲಾಗಿನ್ ಐಡಿ + ಪಾಸ್‌ವರ್ಡ್ + ಲಾಗಿನ್ + ವರ್ಗ + ವರ್ಗ + ಗಂಡು + ಹೆಣ್ಣು + ಇತರ + + + ರದ್ದು ಮಾಡಲಾಗಿದೆ: ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಮತ್ತೊಮ್ಮೆ ಪ್ರಯಾಸಿಸಿ!! + ದಯವಿಟ್ಟು ಆಭಾ ಐಡಿ / ಆಧಾರ್ ಐಡಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ + ನೀವು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ QR ಕೋಡ್ ಮಾನ್ಯವಿಲ್ಲ, ದಯವಿಟ್ಟು ಮಾಹಿತಿಯನ್ನು ಕೈಮಾಡಿ ನಮೂದಿಸಿ + ನೀವು ಅಬ ಹಾ ಐಡಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ್ದೀರಿ, ಆಧಾರ್ ಐಡಿ ಅನ್ನು ಕೈಮಾತ್ರ ನಮೂದಿಸಿ + ಅಮಾನ್ಯವಾದ ಅಬ ಹಾ ಐಡಿ + ಅಮಾನ್ಯವಾದ ಆಧಾರ್ ಐಡಿ + ಹೆಸರು ಕ್ಷೇತ್ರವು ಖಾಲಿ ಇರಲಾರದು ಅಥವಾ 3 ಅಕ್ಷರಗಳಿಂದ ಕಡಿಮೆ ಇರಲಾರದು + ಕೇಂದ್ರದ ಹೆಸರು ಖಾಲಿ ಇರಲಾರದು ಅಥವಾ 3 ಅಕ್ಷರಗಳಿಂದ ಕಡಿಮೆ ಇರಲಾರದು + ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಾಯಿಸಲಾಗಿದೆ + ಇಂಟರ್ನೆಟ್ ಲಭ್ಯವಿಲ್ಲ, ಪರೀಕ್ಷೆ ವಿವರಗಳನ್ನು ಸ್ಥಾನಿಕವಾಗಿ ಉಳಿಸಲಾಗಿದೆ + ದಯವಿಟ್ಟು ಎಲ್ಲಾ ವಿವರಗಳನ್ನು ಸರಿಯಾಗಿ ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು 1900 ಮತ್ತು 2023 ನ ನಡುವೆ ಒಂದು ವಾಸಿಸುವ ತಾರೀಖು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ಕ್ಷೇತ್ರವನ್ನು ನಿರೂಪಿಸಿ + ದಯವಿಟ್ಟು ಒಂದು ಮಾನ್ಯವಾದ 10 ಅಂಕದ ಮೊಬೈಲ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹೆಸರನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ವೈವಾಹಿಕ ಸ್ಥಿತಿಯನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ವರ್ಗವನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ಜಾತಿಯನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ಮನೆಯ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಗರವನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ಜಿಲ್ಲೆಯನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ರಾಜ್ಯವನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ಒಂದು ಮಾನ್ಯ ಆರು-ಅಂಕ ಪಿನ್‌ಕೋಡ್ ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ಕುಟುಂಬದ ಇತಿಹಾಸವನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ಅಭಿಭಾವಕರ ಹೆಸರನ್ನು ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ನಿಮ್ಮ ತಂದೆ / ಗಂಡನ ಹೆಸರನ್ನು ನಮೂದಿಸಿ + ನೀವು ಅಪ್ಲಿಕೇಶನ್ ನಿಂದ ಲಾಗೌಟ್ ಮಾಡಲು ಇಚ್ಛಿಸುತ್ತೀರಾ? + ಲಾಗೌಟ್ + + ಡಿಬಿ ನೋಂದಾಯಿಸುವ ಕೊರಕು + ನೀವು ಲೋಕಲ್ ಡಿಬಿ ನೋಂದಾಯಿಸನ್ನು ಮೇಘಮಾರ್ಗಕ್ಕೆ ಅಪ್ಲೋಡ್ ಮಾಡಲು ಇಚ್ಛಿಸುವಿರಾ? + ಅಪ್ಲೋಡ್ + ಅಪ್ಲೋಡ್ ಯಶಸ್ವಿಯಾಗಿ ನಡೆಯಿತು + ದಯವಿಟ್ಟು ಸರಿಯಾದ ಲಾಗಿನ್ ಐಡಿ ನಮೂದಿಸಿ + ದಯವಿಟ್ಟು ಸರಿಯಾದ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ + ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್ + ತಪ್ಪಾದ ಬಳಕೆದಾರ ಐಡಿ + ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ್ದೀರಿ, ದಯವಿಟ್ಟು ಆಧಾರ್ ಐಡನ್ನು ನೀವು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ ಮತ್ತು ಅಭಾ ಐಡನ್ನು ಕೈಯಾರೆ ನಮೂದಿಸಿ + + ನೀವು ಅಭಾ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ + ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ + + + + ಹೌದು + ಇಲ್ಲ + + + + NT-A + NT-B + NT-C + NT-D + OBC + OPEN + OTHER + SBC + SC + ST + + + + ಅಹೀರ್ + ಬರಾಯಿ + ಬ್ರಾಹ್ಮಣ + ಬೌದ್ಧ + ಚಾಂಭಾರ್ + ಚಾಮಾರ್ + ದೇವಾಂಗನ್ + ಧಿವರ್ + ಫುಲ್ಮಾಲಿ + ಗೊಂಡ್ + ಜೈನ್ + ಕೊಲಿ + ಕೊಶ್ತಿ + ಕುಂಭಾರ + ಕುಂಬಿ + ಲೊಹರ್ + ಮಾಳಿ + ಮಣ್ಣ + ಮಹಾರ್ + ಮೌರ್ಯ + ಮಸ್ಲಿಮ್ + ನಾವಿ + ಇತರ + ಪವಾರ್ + ಪರ್ದೇಶಿ + ಶಾಹು + ಸೋನಾರ್ + ತೆಲಿ + + + + ವಿವಾಹಿತ + ಅವಿವಾಹಿತ + ವಿವಾಹ ವಿಚ್ಛೇದ + + + + + O+ve + O-ve + A+ve + A-ve + B+ve + B-ve + AB+ve + AB-ve + + + + ಗಂಡು + ಹೆಣ್ಣು + ಇತರ + + + + \ 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 f3aa4e0..b947e2d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,11 @@ Failed to connect Cancel + + Yes + No + + //Registration Screens Scan Person ABHA ID/Aadhar ID Card Scan Now @@ -88,6 +93,47 @@ Female Other + Cancelled: Unable to scan, Try Again!! + Please Scan the Abha ID/Aadhar ID + The QR Code you have scanned is not valid, enter the data manually + You have scanned the Abha ID, need to enter Aadhar ID manually + Invalid Abha ID + Invalid Aadhar ID + Name field can\'t be empty or less than 3 characters + Center name can\'t be empty or less than 3 characters + Registration Done Successfully + Internet not available, test details stored locally + Please enter all the details properly + Please enter a valid birth year between 1900 and 2023 + Please fill the field + Please enter a valid 10-digit mobile number + Please enter your name + Please enter your marital status + Please enter your category + Please enter your caste + Please enter your house address + Please enter your city + Please enter your district + Please enter your state + Please enter a valid 6-digit pin code + Please enter your family history + Please enter your guardian name + enter father/husband name + Do you want to LogOut the Application? + Log Out + Upload DB Registration + Do you want to upload the local DB Registration to the cloud? + Upload + Upload done successfully + + Please enter a proper Login ID + Please enter a proper password + Wrong Password + Wrong UserID + + 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 NT-A From 0e2dc2f306241d5abb7ca8378553cfc23896c4e1 Mon Sep 17 00:00:00 2001 From: Mariya Date: Thu, 30 Nov 2023 14:28:53 +0530 Subject: [PATCH 2/5] kannada and hindi version of strings added --- app/src/main/res/layout/fragment_login.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index b7cd372..a68e4d6 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -138,7 +138,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="parent" /> From 6835068f13606053bd50a87f924e6bdf369945a2 Mon Sep 17 00:00:00 2001 From: Mariya Date: Mon, 4 Dec 2023 12:43:20 +0530 Subject: [PATCH 3/5] kannada and hindi language Translation version added --- .idea/shelf/Changes.xml | 4 + .idea/shelf/Changes/shelved.patch | 232 ++++++++++ .idea/shelf/Changes1/shelved.patch | 709 +++++++++++++++++++++++++++++ 3 files changed, 945 insertions(+) create mode 100644 .idea/shelf/Changes.xml create mode 100644 .idea/shelf/Changes/shelved.patch create mode 100644 .idea/shelf/Changes1/shelved.patch diff --git a/.idea/shelf/Changes.xml b/.idea/shelf/Changes.xml new file mode 100644 index 0000000..76fd78d --- /dev/null +++ b/.idea/shelf/Changes.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/.idea/shelf/Changes/shelved.patch b/.idea/shelf/Changes/shelved.patch new file mode 100644 index 0000000..e5a7cd8 --- /dev/null +++ b/.idea/shelf/Changes/shelved.patch @@ -0,0 +1,232 @@ +Index: app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package com.example.hposregistration.ui.fragments.registration\r\n\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport android.widget.Toast\r\nimport androidx.fragment.app.Fragment\r\nimport androidx.fragment.app.viewModels\r\nimport androidx.navigation.fragment.findNavController\r\nimport androidx.navigation.fragment.navArgs\r\nimport com.example.hposregistration.data.user.UserData\r\nimport com.example.hposregistration.ui.viewmodels.RegistrationViewModel\r\nimport dagger.hilt.android.AndroidEntryPoint\r\nimport `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding\r\n\r\n\r\n@AndroidEntryPoint\r\nclass UserDetailsRegistrationFragment : Fragment() {\r\n\r\n private var _binding: FragmentUserDetailsRegistrationBinding? = null\r\n private val binding get() = _binding!!\r\n\r\n private val viewModel by viewModels()\r\n\r\n private lateinit var userData: UserData\r\n\r\n private val args: UserDetailsRegistrationFragmentArgs by navArgs()\r\n\r\n override fun onCreateView(\r\n inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?\r\n ): View {\r\n _binding = FragmentUserDetailsRegistrationBinding.inflate(inflater, container, false)\r\n return binding.root\r\n }\r\n\r\n override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\r\n super.onViewCreated(view, savedInstanceState)\r\n init()\r\n }\r\n\r\n private fun init() {\r\n setupViewModel()\r\n setupSubmitButton()\r\n }\r\n\r\n private fun setupViewModel() {\r\n viewModel.getUserByID(args.userId)\r\n viewModel.userData.observe(viewLifecycleOwner) {\r\n userData = it\r\n autoFillUserData(userData)\r\n }\r\n }\r\n\r\n private fun autoFillUserData(user: UserData) {\r\n with(binding) {\r\n user.birthYear.let { etYob.setText(it) }\r\n user.gender.let {\r\n when (it) {\r\n \"Male\" -> {\r\n male.isChecked = true\r\n }\r\n \"Female\" -> {\r\n female.isChecked = true\r\n }\r\n else -> {\r\n other.isChecked = true\r\n }\r\n }\r\n }\r\n user.phoneNumber.let { etMobile.setText(it) }\r\n user.careOf.let { etCareof.setText(it) }\r\n user.maritalStatus.let { etIsMarried.setText(it, false) }\r\n user.caste.let { etCaste.setText(it, false) }\r\n user.category.let { etCategory.setText(it, false) }\r\n user.subCaste.let { etSubCaste.setText(it) }\r\n user.house.let { etHouse.setText(it) }\r\n user.city.let { etCity.setText(it) }\r\n user.district.let { etDistrict.setText(it) }\r\n user.state.let { etState.setText(it) }\r\n user.pinCode.let { etPincode.setText(it) }\r\n user.isUnderMedication.let {\r\n if (it != null) {\r\n yes.isChecked = it\r\n }\r\n }\r\n user.isUnderTransfusion.let {\r\n if (it != null) {\r\n yes1.isChecked = it\r\n }\r\n }\r\n user.sickleCellHistory.let {\r\n if (it != null) {\r\n yes1history.isChecked = true\r\n }\r\n }\r\n if (yes1history.isChecked) {\r\n if (binding.yes1history.isChecked) View.VISIBLE else View.GONE\r\n\r\n user.sickleCellHistory.let { etFamilyHistory.setText(it) }\r\n } else {\r\n binding.tilFamilyHistory.visibility = View.GONE\r\n }\r\n binding.yes1history.setOnClickListener {\r\n binding.tilFamilyHistory.visibility =\r\n if (binding.yes1history.isChecked) View.VISIBLE else View.GONE\r\n user.sickleCellHistory.let { etFamilyHistory.setText(it) }\r\n\r\n }\r\n binding.no1history.setOnClickListener {\r\n binding.tilFamilyHistory.visibility =\r\n if (binding.no1history.isChecked) View.GONE else View.VISIBLE\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n private fun setupSubmitButton() {\r\n binding.btnSubmit.setOnClickListener {\r\n if (verifyUserDetails()) {\r\n userData._id = args.userId\r\n viewModel.insert(userData)\r\n navigateToCaptureUserImageFragment()\r\n } else {\r\n showToast(\"Please enter all the details properly\")\r\n }\r\n }\r\n }\r\n\r\n private fun navigateToCaptureUserImageFragment() {\r\n val action = UserDetailsRegistrationFragmentDirections\r\n .actionUserDetailsRegistrationFragmentToCaptureUserImageFragment2(args.userId)\r\n findNavController().navigate(action)\r\n }\r\n\r\n private fun verifyUserDetails(): Boolean {\r\n with(binding) {\r\n val yob = etYob.text.toString()\r\n if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) {\r\n etYob.error = \"Please enter a valid birth year between 1900 and 2023\"\r\n return false\r\n } else {\r\n userData.birthYear = yob\r\n }\r\n\r\n if (male.isChecked) {\r\n userData.gender = \"Male\"\r\n } else if (female.isChecked) {\r\n userData.gender = \"Female\"\r\n } else {\r\n userData.gender = \"Other\"\r\n }\r\n\r\n val mobile = etMobile.text.toString()\r\n if (mobile.isEmpty() || mobile.length != 10) {\r\n etMobile.error = \"Please enter a valid 10-digit mobile number\"\r\n return false\r\n } else {\r\n userData.phoneNumber = mobile\r\n }\r\n\r\n val careOf = etCareof.text.toString()\r\n if (careOf.isEmpty()) {\r\n etCareof.error = \"Please enter your name\"\r\n return false\r\n } else {\r\n userData.careOf = careOf\r\n }\r\n\r\n val maritalStatus = etIsMarried.text.toString()\r\n if (maritalStatus.isEmpty()) {\r\n etIsMarried.error = \"Please enter your marital status\"\r\n return false\r\n } else {\r\n userData.maritalStatus = maritalStatus\r\n }\r\n\r\n val category = etCategory.text.toString()\r\n if (category.isEmpty()) {\r\n etCategory.error = \"Please enter your category\"\r\n return false\r\n } else {\r\n userData.category = category\r\n }\r\n\r\n val caste = etCaste.text.toString()\r\n if (caste.isEmpty()) {\r\n etCaste.error = \"Please enter your caste\"\r\n return false\r\n } else {\r\n userData.caste = caste\r\n }\r\n\r\n val subCaste = etSubCaste.text.toString()\r\n if (subCaste.isNotEmpty()) {\r\n userData.subCaste = subCaste\r\n }\r\n\r\n val house = etHouse.text.toString()\r\n if (house.isEmpty()) {\r\n etHouse.error = \"Please enter your house address\"\r\n return false\r\n } else {\r\n userData.house = house\r\n }\r\n\r\n val city = etCity.text.toString()\r\n if (city.isEmpty()) {\r\n etCity.error = \"Please enter your city\"\r\n return false\r\n } else {\r\n userData.city = city\r\n }\r\n\r\n val district = etDistrict.text.toString()\r\n if (district.isEmpty()) {\r\n etDistrict.error = \"Please enter your district\"\r\n return false\r\n } else {\r\n userData.district = district\r\n }\r\n\r\n val state = etState.text.toString()\r\n if (state.isEmpty()) {\r\n etState.error = \"Please enter your state\"\r\n return false\r\n } else {\r\n userData.state = state\r\n }\r\n\r\n val pincode = etPincode.text.toString()\r\n if (pincode.isEmpty() || pincode.length != 6) {\r\n etPincode.error = \"Please enter a valid 6-digit pin code\"\r\n return false\r\n } else {\r\n userData.pinCode = pincode\r\n }\r\n\r\n userData.isUnderMedication = yes.isChecked\r\n userData.isUnderTransfusion = yes1.isChecked\r\n userData.sickleCellHistory = yes1history.isChecked.toString()\r\n\r\n if (yes1history.isChecked) {\r\n val familyHistory = etFamilyHistory.text.toString()\r\n if (familyHistory.isEmpty()) {\r\n etFamilyHistory.error = \"Please enter your family history\"\r\n return false\r\n }\r\n\r\n userData.sickleCellHistory = familyHistory\r\n } else {\r\n\r\n userData.sickleCellHistory = null\r\n\r\n }\r\n\r\n return true\r\n\r\n }\r\n }\r\n\r\n private fun showToast(message: String) {\r\n Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()\r\n }\r\n\r\n override fun onDestroyView() {\r\n super.onDestroyView()\r\n _binding = null\r\n }\r\n}\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt (revision 8dcec7bb3f98a3494b1e9b0fe44abf82c651e308) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt (date 1696578456105) +@@ -1,9 +1,12 @@ + package com.example.hposregistration.ui.fragments.registration + ++import android.content.Context + import android.os.Bundle + import android.view.LayoutInflater + import android.view.View + import android.view.ViewGroup ++import android.widget.ArrayAdapter ++import android.widget.Filter + import android.widget.Toast + import androidx.fragment.app.Fragment + import androidx.fragment.app.viewModels +@@ -12,7 +15,9 @@ + import com.example.hposregistration.data.user.UserData + import com.example.hposregistration.ui.viewmodels.RegistrationViewModel + import dagger.hilt.android.AndroidEntryPoint ++import `in`.sminnovations.hposregistration.R + import `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding ++import java.util.Locale + + + @AndroidEntryPoint +@@ -39,18 +44,45 @@ + init() + } + ++ ++ + private fun init() { + setupViewModel() + setupSubmitButton() + } + ++ + private fun setupViewModel() { ++ // Initialize the adapters with arrays from resources ++ val categoryItems = resources.getStringArray(R.array.category).toMutableList() ++ val casteItems = resources.getStringArray(R.array.caste).toMutableList() ++ ++ val categoryAdapter = DropdownAdapter(requireContext(), categoryItems) ++ val casteAdapter = DropdownAdapter(requireContext(), casteItems) ++ binding.etCategory.setAdapter(categoryAdapter) ++ binding.etCaste.setAdapter(casteAdapter) ++ ++// Observe the ViewModel data and update the adapters accordingly + viewModel.getUserByID(args.userId) +- viewModel.userData.observe(viewLifecycleOwner) { +- userData = it +- autoFillUserData(userData) ++ viewModel.userData.observe(viewLifecycleOwner) { user -> ++ user.category?.let { ++ categoryAdapter.clear() ++ categoryAdapter.addAll(it) ++ categoryAdapter.notifyDataSetChanged() ++ } ++ user.caste?.let { ++ casteAdapter.clear() ++ casteAdapter.addAll(it) ++ casteAdapter.notifyDataSetChanged() ++ } ++ autoFillUserData(user) + } ++ + } ++ ++ ++ ++ + + private fun autoFillUserData(user: UserData) { + with(binding) { +@@ -269,3 +301,51 @@ + _binding = null + } + } ++ ++ ++ ++class DropdownAdapter(context: Context, private val items: MutableList) : ++ ArrayAdapter(context, android.R.layout.simple_dropdown_item_1line, items) { ++ ++ private val filter = ItemFilter() ++ ++ override fun getFilter(): Filter { ++ return filter ++ } ++ ++ override fun clear() { ++ items.clear() ++ notifyDataSetChanged() ++ } ++ ++ private inner class ItemFilter : Filter() { ++ override fun performFiltering(constraint: CharSequence?): FilterResults { ++ val filterResults = FilterResults() ++ val suggestions = mutableListOf() ++ ++ if (constraint != null) { ++ for (item in items) { ++ if (item.toLowerCase(Locale.getDefault()).contains(constraint.toString().toLowerCase(Locale.getDefault()))) { ++ suggestions.add(item) ++ } ++ } ++ filterResults.values = suggestions ++ filterResults.count = suggestions.size ++ } ++ ++ return filterResults ++ } ++ ++ override fun publishResults(constraint: CharSequence?, results: FilterResults?) { ++ clear() ++ if (results != null && results.count > 0) { ++ addAll(results.values as List) ++ notifyDataSetChanged() ++ } else { ++ notifyDataSetInvalidated() ++ } ++ } ++ } ++} ++ ++ +Index: app/src/main/res/layout/fragment_user_details_registration.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/layout/fragment_user_details_registration.xml b/app/src/main/res/layout/fragment_user_details_registration.xml +--- a/app/src/main/res/layout/fragment_user_details_registration.xml (revision 8dcec7bb3f98a3494b1e9b0fe44abf82c651e308) ++++ b/app/src/main/res/layout/fragment_user_details_registration.xml (date 1696578017507) +@@ -160,7 +160,7 @@ + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/category" +- android:inputType="none" ++ android:inputType="text" + android:labelFor="@id/til_is_married" + app:simpleItems="@array/category" /> + +@@ -182,7 +182,7 @@ + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="@string/caste" +- android:inputType="none" ++ android:inputType="text" + android:labelFor="@id/til_is_married" + app:simpleItems="@array/caste" /> + +Index: .idea/misc.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/misc.xml b/.idea/misc.xml +new file mode 100644 +--- /dev/null (date 1696574280572) ++++ b/.idea/misc.xml (date 1696574280572) +@@ -0,0 +1,6 @@ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +Index: .idea/modules.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/modules.xml b/.idea/modules.xml +new file mode 100644 +--- /dev/null (date 1696574278367) ++++ b/.idea/modules.xml (date 1696574278367) +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +Index: .idea/.gitignore +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/.gitignore b/.idea/.gitignore +new file mode 100644 +--- /dev/null (date 1696573475181) ++++ b/.idea/.gitignore (date 1696573475181) +@@ -0,0 +1,3 @@ ++# Default ignored files ++/shelf/ ++/workspace.xml +Index: .idea/vcs.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.idea/vcs.xml b/.idea/vcs.xml +new file mode 100644 +--- /dev/null (date 1696573474982) ++++ b/.idea/vcs.xml (date 1696573474982) +@@ -0,0 +1,6 @@ ++ ++ ++ ++ ++ ++ +\ No newline at end of file diff --git a/.idea/shelf/Changes1/shelved.patch b/.idea/shelf/Changes1/shelved.patch new file mode 100644 index 0000000..c231e1f --- /dev/null +++ b/.idea/shelf/Changes1/shelved.patch @@ -0,0 +1,709 @@ +Index: app/src/main/res/values-hi/strings.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\r\n HPOS रजिस्ट्रेशन\r\n \r\n नमस्ते खाली फ़्रेग्मेंट\r\n\r\n \r\n पुनः प्रयास करें\r\n कनेक्ट करने में विफल\r\n रद्द करें\r\n\r\n \r\n व्यक्ति का ABHA ID/Aadhar ID कार्ड स्कैन करें\r\n अब स्कैन करें\r\n या\r\n ABHA और Aadhar नंबर दर्ज करें\r\n ABHA नंबर\r\n ABHA ID कार्ड बनाएं\r\n यहां क्लिक करें\r\n व्यक्ति का Aadhaar कार्ड स्कैन करें\r\n आगे बढ़ें\r\n Aadhaar नंबर मैन्युअली दर्ज करें\r\n Aadhaar नंबर\r\n व्यक्ति का विवरण दर्ज करें\r\n व्यक्ति का नाम\r\n आयु (वर्षों में)\r\n लिंग चयन करें\r\n नाम खाली नहीं हो सकता\r\n आयु खाली नहीं हो सकती\r\n लिंग खाली नहीं हो सकता\r\n आयु मान्य होनी चाहिए\r\n जन्म साल\r\n वैवाहिक स्थिति चयन करें\r\n पिता/पति का नाम\r\n जाति\r\n व्यक्ति का पता विवरण\r\n जिला\r\n शहर / गाँव\r\n राज्य\r\n पिनकोड\r\n रोगी का चिकित्सा रेकॉर्ड\r\n समीक्षा\r\n रक्त समूह चयन करें\r\n घर\r\n क्या आप पिछले तीन महीनों से सिक्ल सेल के लिए दवा ले रहे हैं?\r\n क्या आपने पिछले तीन महीनों में कोई रक्त प्रवाहन किया है?\r\n\r\n उपयोगकर्ता सूची\r\n उपयोगकर्ता पंजीकृत करें\r\n क्या उपयोगकर्ता के पास सिक्ल सेल के लिए कोई परिवार का इतिहास है?\r\n सिक्ल सेल का परिवारिक इतिहास\r\n मोबाइल नंबर (10 अंक)\r\n उपजाति\r\n उपयोगकर्ता की छवि कैद करें\r\n मोबाइल नंबर\r\n संपादित करें\r\n उपयोगकर्ता विवरण\r\n इंटरनेट उपलब्ध नहीं है और स्थानीय डेटाबेस में कोई डेटा उपलब्ध नहीं है\r\n उपयोगकर्ता आईडी: %1$s\r\n ABHA नंबर: %1$s\r\n Aadhar नंबर: %1$s\r\n व्यक्ति का नाम: %1$s\r\n जन्म साल: %1$s\r\n लिंग: %1$s\r\n मोबाइल नंबर: %1$s\r\n पिता/पति का नाम: %1$s\r\n वैवाहिक स्थिति: %1$s\r\n श्रेणी: %1$s\r\n जाति: %1$s\r\n उपजाति: %1$s\r\n घर: %1$s\r\n शहर/गाँव: %1$s\r\n जिला: %1$s\r\n राज्य: %1$s\r\n केंद्र का नाम: %1$s\r\n\r\n पिनकोड: %1$s\r\n क्या दवा ले रहे हैं: %1$s\r\n क्या रक्त प्रवाहन हो रहा है: %1$s\r\n क्या कोई सिक्ल सेल इतिहास है: %1$s\r\n सिक्ल सेल परिवारिक इतिहास: %1$s\r\n केंद्र का नाम\r\n लॉगिन आईडी\r\n पासवर्ड\r\n लॉगिन\r\n श्रेणी\r\n श्रेणी\r\n पुरुष\r\n महिला\r\n अन्य\r\n रद्द किया गया: स्कैन करने में असमर्थ, पुनः प्रयास करें!!\r\n कृपया एबीए आईडी / आधार आईडी स्कैन करें\r\n आपने स्कैन किया हुआ QR कोड अमान्य है, कृपया डेटा मैन्युअली दर्ज करें\r\n आपने एबीए आईडी स्कैन किया है, आधार आईडी को मैन्युअली दर्ज करने की आवश्यकता है\r\n अमान्य एबीए आईडी\r\n अमान्य आधार आईडी\r\n नाम फील्ड खाली नहीं हो सकती या 3 अक्षरों से कम होनी चाहिए\r\n केंद्र का नाम खाली नहीं हो सकता या 3 अक्षरों से कम होना चाहिए\r\n पंजीकरण सफलतापूर्वक हुआ\r\n इंटरनेट उपलब्ध नहीं है, परीक्षण विवरण स्थानीय रूप से संग्रहित किए गए हैं\r\n कृपया सभी विवरणों को ठीक से दर्ज करें\r\n कृपया 1900 से 2023 के बीच एक मान्य जन्म वर्ष दर्ज करें\r\n कृपया फ़ील्ड भरें\r\n कृपया एक मान्य 10-अंकों का मोबाइल नंबर दर्ज करें\r\n कृपया अपना नाम दर्ज करें\r\n कृपया अपनी वैवाहिक स्थिति दर्ज करें\r\n कृपया अपनी श्रेणी दर्ज करें\r\n कृपया अपनी जाति दर्ज करें\r\n कृपया अपना घर का पता दर्ज करें\r\n कृपया अपने शहर को दर्ज करें\r\n कृपया अपने जिले को दर्ज करें\r\n कृपया अपने राज्य को दर्ज करें\r\n कृपया एक मान्य 6-अंकों कोड दर्ज करें\r\n कृपया अपना परिवार का इतिहास दर्ज करें\r\n कृपया अपने पालक का नाम दर्ज करें\r\n पिता / पति का नाम दर्ज करें\r\n क्या आप ऐप्लिकेशन से लॉग आउट करना चाहते हैं?\r\n लॉग आउट\r\n\r\n डीबी पंजीकरण अपलोड करें\r\n क्या आप स्थानीय डीबी को क्लाउड पर अपलोड करना चाहते हैं?\r\n अपलोड\r\n अपलोड सफलतापूर्वक हुआ\r\n\r\n कृपया सही लॉगिन आईडी दर्ज करें\r\n कृपया सही पासवर्ड दर्ज करें\r\n गलत पासवर्ड\r\n गलत उपयोगकर्ता आईडी\r\n आपने आधार आईडी स्कैन की है, कृपया आधार आईडी नंबर और अभा आईडी को मैन्युअली दर्ज करें\r\n आपने आभा आईडी स्कैन की है\r\n आपने आधार आईडी स्कैन की है\r\n\r\n \r\n NT-A\r\n NT-B\r\n NT-C\r\n NT-D\r\n OBC\r\n OPEN\r\n OTHER\r\n SBC\r\n SC\r\n ST\r\n \r\n\r\n \r\n अहीर\r\n बराई\r\n ब्राह्मण\r\n बौद्ध\r\n चांब़चार\r\n चामार\r\n देवांगन\r\n धीवर\r\n फुलमाली\r\n गोंड\r\n जैन\r\n कोली\r\n कोष्टी\r\n कुंभार\r\n कुंबी\r\n लोहार\r\n माळी\r\n माणा\r\n महार\r\n मौर्या\r\n मुसलमान\r\n नवी\r\n अन्य\r\n पवार\r\n परदेसी\r\n शाहू\r\n सोनार\r\n तेली\r\n \r\n\r\n\r\n \r\n विवाहित\r\n एकत्र\r\n तलाकशुदा\r\n \r\n\r\n\r\n \r\n O+ve\r\n O-ve\r\n A+ve\r\n A-ve\r\n B+ve\r\n B-ve\r\n AB+ve\r\n AB-ve\r\n \r\n\r\n \r\n पुरुष\r\n महिला\r\n अन्य\r\n \r\n\r\n \r\n हाँ\r\n नहीं\r\n \r\n\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml +--- a/app/src/main/res/values-hi/strings.xml (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/res/values-hi/strings.xml (date 1701672623815) +@@ -128,7 +128,16 @@ + आपने आधार आईडी स्कैन की है, कृपया आधार आईडी नंबर और अभा आईडी को मैन्युअली दर्ज करें + आपने आभा आईडी स्कैन की है + आपने आधार आईडी स्कैन की है ++ भाषा सफलतापूर्वक अपडेट की गई है ++ अपनी पसंदीदा भाषा का चयन करें ++ ऐप भाषा ++ रक्त समूह जोड़ें ++ ठीक है ++ उपयोगकर्ता आईडी + ++ हाँ ++ नहीं ++ नाम + + NT-A + NT-B +Index: app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package com.example.hposregistration.ui.fragments.registration\r\n\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport android.widget.Toast\r\nimport androidx.core.view.isVisible\r\nimport androidx.fragment.app.Fragment\r\nimport androidx.fragment.app.viewModels\r\nimport androidx.navigation.fragment.findNavController\r\nimport androidx.navigation.fragment.navArgs\r\nimport com.example.hposregistration.data.user.UserData\r\nimport com.example.hposregistration.ui.viewmodels.RegistrationViewModel\r\nimport dagger.hilt.android.AndroidEntryPoint\r\nimport `in`.sminnovations.hposregistration.R\r\nimport `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding\r\n\r\n\r\n@AndroidEntryPoint\r\nclass UserDetailsRegistrationFragment : Fragment() {\r\n\r\n private var _binding: FragmentUserDetailsRegistrationBinding? = null\r\n private val binding get() = _binding!!\r\n\r\n private val viewModel by viewModels()\r\n\r\n private lateinit var userData: UserData\r\n\r\n private val args: UserDetailsRegistrationFragmentArgs by navArgs()\r\n\r\n override fun onCreateView(\r\n inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?\r\n ): View {\r\n _binding = FragmentUserDetailsRegistrationBinding.inflate(inflater, container, false)\r\n return binding.root\r\n }\r\n\r\n override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\r\n super.onViewCreated(view, savedInstanceState)\r\n init()\r\n }\r\n\r\n private fun init() {\r\n setupViewModel()\r\n setupSubmitButton()\r\n\r\n\r\n binding.etCategory.setOnItemClickListener { parent, view, position, id ->\r\n if (parent.getItemAtPosition(position).toString().equals(\"OTHER\", ignoreCase = true)) {\r\n binding.tilOther.visibility = View.VISIBLE\r\n } else {\r\n binding.tilOther.visibility = View.GONE\r\n }\r\n }\r\n\r\n binding.etCaste.setOnItemClickListener { parent, view, position, id ->\r\n if (parent.getItemAtPosition(position).toString().equals(\"OTHER\", ignoreCase = true)) {\r\n binding.tilOthercaste.visibility = View.VISIBLE\r\n } else {\r\n binding.tilOthercaste.visibility = View.GONE\r\n }\r\n }\r\n }\r\n\r\n private fun setupViewModel() {\r\n viewModel.getUserByID(args.userId)\r\n viewModel.userData.observe(viewLifecycleOwner) {\r\n userData = it\r\n autoFillUserData(userData)\r\n }\r\n }\r\n\r\n private fun autoFillUserData(user: UserData) {\r\n with(binding) {\r\n user.birthYear.let { etYob.setText(it) }\r\n user.gender.let {\r\n when (it) {\r\n \"Male\" -> {\r\n male.isChecked = true\r\n binding.tilOthergender.visibility = View.GONE\r\n }\r\n \"Female\" -> {\r\n female.isChecked = true\r\n binding.tilOthergender.visibility = View.GONE\r\n }\r\n else -> {\r\n other.isChecked = true\r\n binding.tilOthergender.visibility = View.VISIBLE\r\n }\r\n }\r\n }\r\n user.phoneNumber.let { etMobile.setText(it) }\r\n user.careOf.let { etCareof.setText(it) }\r\n user.maritalStatus.let { etIsMarried.setText(it, false) }\r\n user.subCaste.let { etSubCaste.setText(it) }\r\n user.house.let { etHouse.setText(it) }\r\n user.city.let { etCity.setText(it) }\r\n user.district.let { etDistrict.setText(it) }\r\n user.state.let { etState.setText(it) }\r\n user.pinCode.let { etPincode.setText(it) }\r\n user.isUnderMedication.let {\r\n if (it != null) {\r\n yes.isChecked = it\r\n }\r\n }\r\n user.isUnderTransfusion.let {\r\n if (it != null) {\r\n yes1.isChecked = it\r\n }\r\n }\r\n user.sickleCellHistory.let {\r\n if (it != null) {\r\n yes1history.isChecked = true\r\n }\r\n }\r\n user.category.let {\r\n etCategory.setText(it, false)\r\n }\r\n user.caste.let {\r\n etCaste.setText(it, false)\r\n }\r\n\r\n if (yes1history.isChecked) {\r\n if (binding.yes1history.isChecked) View.VISIBLE else View.GONE\r\n\r\n user.sickleCellHistory.let { etFamilyHistory.setText(it) }\r\n } else {\r\n binding.tilFamilyHistory.visibility = View.GONE\r\n }\r\n binding.yes1history.setOnClickListener {\r\n binding.tilFamilyHistory.visibility =\r\n if (binding.yes1history.isChecked) View.VISIBLE else View.GONE\r\n user.sickleCellHistory.let { etFamilyHistory.setText(it) }\r\n\r\n }\r\n binding.no1history.setOnClickListener {\r\n binding.tilFamilyHistory.visibility =\r\n if (binding.no1history.isChecked) View.GONE else View.VISIBLE\r\n }\r\n\r\n if(other.isChecked){\r\n user.gender.let { etOthergender.setText(it) }\r\n }\r\n\r\n binding.male.setOnClickListener {\r\n binding.tilOthergender.visibility = View.GONE\r\n }\r\n\r\n binding.female.setOnClickListener {\r\n binding.tilOthergender.visibility = View.GONE\r\n }\r\n\r\n binding.other.setOnClickListener {\r\n binding.tilOthergender.visibility = View.VISIBLE\r\n }\r\n\r\n if (binding.etCategory.text.toString().equals(\"OTHER\", ignoreCase = true)) {\r\n binding.tilOther.visibility = View.VISIBLE\r\n binding.etOther.visibility = View.VISIBLE\r\n } else {\r\n binding.tilOther.visibility = View.GONE\r\n }\r\n\r\n if (binding.etCaste.text.toString().equals(\"OTHER\", ignoreCase = true)) {\r\n binding.tilOthercaste.visibility = View.VISIBLE\r\n binding.etOthercaste.visibility = View.VISIBLE\r\n } else {\r\n binding.tilOthercaste.visibility = View.GONE\r\n }\r\n\r\n }\r\n }\r\n\r\n private fun setupSubmitButton() {\r\n binding.btnSubmit.setOnClickListener {\r\n if (verifyUserDetails()) {\r\n userData._id = args.userId\r\n viewModel.insert(userData)\r\n navigateToCaptureUserImageFragment()\r\n } else {\r\n showToast(R.string.enter_details_properly.toString())\r\n }\r\n }\r\n }\r\n\r\n private fun navigateToCaptureUserImageFragment() {\r\n val action = UserDetailsRegistrationFragmentDirections\r\n .actionUserDetailsRegistrationFragmentToCaptureUserImageFragment2(args.userId)\r\n findNavController().navigate(action)\r\n }\r\n\r\n private fun verifyUserDetails(): Boolean {\r\n with(binding) {\r\n val yob = etYob.text.toString()\r\n if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) {\r\n etYob.error = R.string.enter_valid_birth_year.toString()\r\n return false\r\n } else {\r\n userData.birthYear = yob\r\n }\r\n\r\n if (male.isChecked) {\r\n binding.tilOthergender.visibility = View.GONE\r\n userData.gender = \"Male\"\r\n } else if (female.isChecked) {\r\n binding.tilOthergender.visibility = View.GONE\r\n userData.gender = \"Female\"\r\n } else if(other.isChecked) {\r\n binding.tilOthergender.visibility = View.VISIBLE\r\n val genderother= binding.etOthergender.text.toString()\r\n userData.gender = genderother\r\n if (genderother.isEmpty()) {\r\n etOthergender.error = R.string.fill_field.toString()\r\n return false\r\n }\r\n }\r\n\r\n val pInfo = requireActivity().packageManager.getPackageInfo(\r\n requireActivity().packageName, 0\r\n )\r\n val version = pInfo.versionName\r\n userData.appVersion = version\r\n\r\n\r\n val mobile = etMobile.text.toString()\r\n if (mobile.isEmpty() || mobile.length != 10) {\r\n etMobile.error = R.string.valid_mobile_number.toString()\r\n return false\r\n } else {\r\n userData.phoneNumber = mobile\r\n }\r\n\r\n val careOf = etCareof.text.toString()\r\n if (careOf.isEmpty()) {\r\n etCareof.error = R.string.enter_father_husband_name.toString()\r\n return false\r\n } else {\r\n userData.careOf = careOf\r\n }\r\n\r\n val maritalStatus = etIsMarried.text.toString()\r\n if (maritalStatus.isEmpty()) {\r\n etIsMarried.error = R.string.enter_marital_status.toString()\r\n return false\r\n } else {\r\n userData.maritalStatus = maritalStatus\r\n }\r\n\r\n val category = etCategory.text.toString()\r\n val other = etOther.text.toString()\r\n if (category.isEmpty()) {\r\n etCategory.error = R.string.enter_category.toString()\r\n return false\r\n } else if (category == \"OTHER\" && tilOther.isVisible) {\r\n userData.category = other\r\n } else {\r\n userData.category = category\r\n }\r\n\r\n val caste = etCaste.text.toString()\r\n val othercaste = etOthercaste.text.toString()\r\n if (caste.isEmpty()) {\r\n etCaste.error = R.string.enter_caste.toString()\r\n return false\r\n } else if (caste == \"OTHER\" && tilOthercaste.isVisible) {\r\n userData.caste = othercaste\r\n } else {\r\n userData.caste = caste\r\n }\r\n\r\n\r\n val subCaste = etSubCaste.text.toString()\r\n if (subCaste.isNotEmpty()) {\r\n userData.subCaste = subCaste\r\n }\r\n\r\n val house = etHouse.text.toString()\r\n if (house.isEmpty()) {\r\n etHouse.error = R.string.enter_house_address.toString()\r\n return false\r\n } else {\r\n userData.house = house\r\n }\r\n\r\n val city = etCity.text.toString()\r\n if (city.isEmpty()) {\r\n etCity.error = R.string.enter_city.toString()\r\n return false\r\n } else {\r\n userData.city = city\r\n }\r\n\r\n val district = etDistrict.text.toString()\r\n if (district.isEmpty()) {\r\n etDistrict.error = R.string.enter_district.toString()\r\n return false\r\n } else {\r\n userData.district = district\r\n }\r\n\r\n val state = etState.text.toString()\r\n if (state.isEmpty()) {\r\n etState.error = R.string.enter_state.toString()\r\n return false\r\n } else {\r\n userData.state = state\r\n }\r\n\r\n val pincode = etPincode.text.toString()\r\n if (pincode.isEmpty() || pincode.length != 6) {\r\n etPincode.error = R.string.enter_pincode.toString()\r\n return false\r\n } else {\r\n userData.pinCode = pincode\r\n }\r\n\r\n userData.isUnderMedication = yes.isChecked\r\n userData.isUnderTransfusion = yes1.isChecked\r\n userData.sickleCellHistory = yes1history.isChecked.toString()\r\n\r\n if (yes1history.isChecked) {\r\n val familyHistory = etFamilyHistory.text.toString()\r\n if (familyHistory.isEmpty()) {\r\n etFamilyHistory.error = R.string.enter_family_history.toString()\r\n return false\r\n }\r\n\r\n userData.sickleCellHistory = familyHistory\r\n } else {\r\n\r\n userData.sickleCellHistory = null\r\n\r\n }\r\n\r\n return true\r\n\r\n\r\n\r\n }\r\n }\r\n\r\n private fun showToast(message: String) {\r\n Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()\r\n }\r\n\r\n override fun onDestroyView() {\r\n super.onDestroyView()\r\n _binding = null\r\n }\r\n}\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/UserDetailsRegistrationFragment.kt (date 1701445288005) +@@ -179,7 +179,7 @@ + viewModel.insert(userData) + navigateToCaptureUserImageFragment() + } else { +- showToast(R.string.enter_details_properly.toString()) ++ showToast(getString(R.string.enter_details_properly)) + } + } + } +@@ -194,7 +194,7 @@ + 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 @@ + 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 @@ + + 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 @@ + + 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 @@ + + 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 @@ + 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 @@ + 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 @@ + + 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 @@ + + 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 @@ + + 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 @@ + + 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 @@ + + 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 @@ + 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 + } + +Index: app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package com.example.hposregistration.adapters\r\n\r\nimport android.annotation.SuppressLint\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport androidx.recyclerview.widget.RecyclerView\r\nimport com.bumptech.glide.Glide\r\nimport com.example.hposregistration.data.user.UserData\r\nimport com.firebase.ui.firestore.FirestoreRecyclerAdapter\r\nimport com.firebase.ui.firestore.FirestoreRecyclerOptions\r\nimport `in`.sminnovations.hposregistration.databinding.UserItemViewBinding\r\n\r\nclass UserListOnlineAdapter(options: FirestoreRecyclerOptions, private val view: View) :\r\n FirestoreRecyclerAdapter(options) {\r\n\r\n class OrderItemViewHolder(val binding: UserItemViewBinding) :\r\n RecyclerView.ViewHolder(binding.root)\r\n\r\n override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderItemViewHolder {\r\n return OrderItemViewHolder(\r\n UserItemViewBinding\r\n .inflate(LayoutInflater.from(parent.context), parent, false)\r\n )\r\n }\r\n\r\n @SuppressLint(\"SetTextI18n\")\r\n override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int, model: UserData) {\r\n holder.binding.apply {\r\n userName.text = \"Name: ${model.name}\"\r\n userId.text = \"User ID: ${model._id}\"\r\n Glide.with(view).load(model.userImageURL).into(userImage)\r\n }\r\n }\r\n} +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt b/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt +--- a/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt (date 1701671985976) +@@ -9,6 +9,7 @@ + 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 @@ + @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) + } + } +Index: app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package com.example.hposregistration.ui.fragments\r\n\r\nimport android.app.AlertDialog\r\nimport android.content.Context\r\nimport android.content.DialogInterface\r\nimport android.content.SharedPreferences\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport android.widget.Button\r\nimport android.widget.Toast\r\nimport androidx.fragment.app.viewModels\r\nimport androidx.navigation.fragment.findNavController\r\nimport com.example.hposregistration.adapters.UserListOfflineAdapter\r\nimport com.example.hposregistration.adapters.UserListOnlineAdapter\r\nimport com.example.hposregistration.data.Constant\r\nimport com.example.hposregistration.data.user.UserData\r\nimport com.example.hposregistration.ui.viewmodels.RegistrationViewModel\r\nimport com.firebase.ui.firestore.FirestoreRecyclerOptions\r\nimport com.google.firebase.firestore.ktx.firestore\r\nimport com.google.firebase.ktx.Firebase\r\nimport dagger.hilt.android.AndroidEntryPoint\r\nimport `in`.sminnovations.hposregistration.R\r\nimport `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding\r\n\r\n@AndroidEntryPoint\r\nclass UserListFragment : BaseFragment() {\r\n\r\n private var _binding: FragmentUserListBinding? = null\r\n private val binding get() = _binding!!\r\n\r\n private val viewModel by viewModels()\r\n\r\n private var isOnline = false\r\n\r\n private lateinit var sharedPreference: SharedPreferences\r\n\r\n override fun onCreateView(\r\n inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?\r\n ): View {\r\n _binding = FragmentUserListBinding.inflate(inflater, container, false)\r\n sharedPreference = requireContext().getSharedPreferences(\"PREFERENCE_NAME\", Context.MODE_PRIVATE)\r\n setupViews()\r\n return binding.root\r\n }\r\n\r\n override fun onResume() {\r\n super.onResume()\r\n init()\r\n }\r\n\r\n override fun onDestroyView() {\r\n super.onDestroyView()\r\n _binding = null\r\n }\r\n\r\n private fun setupViews() {\r\n binding.btnRegisterUser.setOnClickListener {\r\n findNavController().navigate(R.id.action_userListFragment_to_registrationFragment)\r\n }\r\n binding.btnLogout.setOnClickListener {\r\n logoutUser(requireContext())\r\n }\r\n }\r\n\r\n private fun init() {\r\n viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->\r\n if (isNetworkAvailable) {\r\n isOnline = isNetworkAvailable\r\n fetchFromServer()\r\n checkForLocalDBData()\r\n } else {\r\n isOnline = isNetworkAvailable\r\n fetchFromLocalDB()\r\n }\r\n }\r\n\r\n binding.uploadData.setOnClickListener {\r\n showUploadDialog(requireContext())\r\n }\r\n\r\n viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->\r\n deteleIncompleteRegistration(userDataList)\r\n }\r\n }\r\n\r\n private fun logoutUser(context: Context) {\r\n val builder = AlertDialog.Builder(context)\r\n builder.setTitle(R.string.log_out)\r\n builder.setMessage(R.string.do_log_out)\r\n\r\n // Positive button\r\n builder.setPositiveButton(\"Yes\") { dialog, _ ->\r\n saveUserId()\r\n findNavController().navigate(R.id.action_userListFragment_to_loginFragment)\r\n dialog.dismiss()\r\n }\r\n\r\n // Negative button\r\n builder.setNegativeButton(\"No\") { dialog, _ ->\r\n dialog.dismiss()\r\n }\r\n\r\n val dialog = builder.create()\r\n dialog.show()\r\n }\r\n\r\n private fun saveUserId() {\r\n with(sharedPreference.edit()) {\r\n putString(Constant.USER_ID, \"\")\r\n apply()\r\n }\r\n }\r\n private fun showUploadDialog(context: Context) {\r\n val builder = AlertDialog.Builder(context)\r\n builder.setTitle(R.string.upload_db_registration)\r\n builder.setMessage(R.string.upload_local_db_to_cloud)\r\n\r\n // Positive button\r\n builder.setPositiveButton(R.string.upload) { dialog, _ ->\r\n uploadLoadDBData(dialog)\r\n }\r\n\r\n // Negative button\r\n builder.setNegativeButton(R.string.cancel) { dialog, _ ->\r\n dialog.dismiss()\r\n }\r\n\r\n val dialog = builder.create()\r\n dialog.show()\r\n }\r\n\r\n private fun uploadLoadDBData(dialog: DialogInterface) {\r\n viewModel.allUserData.observe(viewLifecycleOwner) {\r\n if (it.isEmpty()) {\r\n dialog.dismiss()\r\n } else {\r\n it.forEach { userData ->\r\n viewModel.addUserToDatabase(userData)\r\n viewModel.deleteById(userData._id)\r\n }\r\n dialog.dismiss()\r\n Toast.makeText(requireContext(), R.string.upload_done_successfully, Toast.LENGTH_SHORT)\r\n .show()\r\n }\r\n }\r\n }\r\n\r\n private fun checkForLocalDBData() {\r\n viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->\r\n if (userDataList.isEmpty()) {\r\n binding.uploadData.visibility = View.GONE\r\n } else {\r\n binding.uploadData.visibility = View.VISIBLE\r\n }\r\n }\r\n }\r\n\r\n private fun fetchFromServer() {\r\n binding.noList.visibility = View.GONE\r\n binding.rvOrder.visibility = View.VISIBLE\r\n val query = Firebase.firestore.collection(\"patientData\")\r\n val recyclerViewOptions =\r\n FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java)\r\n .build()\r\n val adapter = UserListOnlineAdapter(recyclerViewOptions, binding.root)\r\n binding.rvOrder.adapter = adapter\r\n adapter.startListening()\r\n }\r\n\r\n private fun fetchFromLocalDB() {\r\n binding.uploadData.visibility = View.GONE\r\n viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->\r\n if (isOnline) {\r\n binding.noList.visibility = View.GONE\r\n binding.rvOrder.visibility = View.VISIBLE\r\n } else {\r\n if (userDataList.isEmpty()) {\r\n binding.noList.visibility = View.VISIBLE\r\n binding.rvOrder.visibility = View.GONE\r\n } else {\r\n binding.noList.visibility = View.GONE\r\n binding.rvOrder.visibility = View.VISIBLE\r\n deteleIncompleteRegistration(userDataList)\r\n val adapter = UserListOfflineAdapter(binding.root)\r\n adapter.differ.submitList(userDataList)\r\n binding.rvOrder.adapter = adapter\r\n }\r\n }\r\n }\r\n }\r\n\r\n private fun deteleIncompleteRegistration(userDataList: List) {\r\n userDataList.forEach {\r\n if (it.userImageURL.isEmpty()) {\r\n viewModel.deleteById(it._id)\r\n }\r\n }\r\n }\r\n}\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt (date 1701672623825) +@@ -80,6 +80,10 @@ + showUploadDialog(requireContext()) + } + ++ binding.btnsettings.setOnClickListener{ ++ findNavController().navigate(R.id.action_userListFragment_to_languageSettingsFragment) ++ ++ } + viewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> + deteleIncompleteRegistration(userDataList) + } +@@ -91,14 +95,14 @@ + 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() + } + +Index: app/src/main/res/values/strings.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\r\n HPOS Registration\r\n \r\n Hello blank fragment\r\n\r\n //Error message\r\n Retry\r\n Failed to connect\r\n Cancel\r\n\r\n \r\n Yes\r\n No\r\n \r\n\r\n //Registration Screens\r\n Scan Person ABHA ID/Aadhar ID Card\r\n Scan Now\r\n OR\r\n Enter ABHA and Aadhar Number\r\n ABHA Number\r\n Create ABHA ID card\r\n Click Here\r\n Scan Person\\'s Aadhaar Card\r\n Proceed\r\n Enter Aadhaar number manualy\r\n Aadhaar Number\r\n Enter Person\\'s Details\r\n Person\\'s Name\r\n Age in years\r\n Select Gender\r\n Name can\\'t be empty\r\n Age can\\'t be empty\r\n Gender can\\'t be empty\r\n Age should be valid\r\n Birth Year\r\n Select Marital status\r\n Father\\'s/Husband\\'s Name\r\n Caste\r\n Person\\'s Address Details\r\n District\r\n City / Town\r\n State\r\n Pincode\r\n Patient Medical Records\r\n Review\r\n Select Blood Group\r\n House\r\n Have you been under medication for Sickle Cell in the past three months?\r\n Have you undergone any Blood transfusions in the Past three months ?\r\n\r\n User List\r\n Register User\r\n Is user having any family history for Sickle Cell\r\n Family History of Sickle Cell\r\n Mobile Number (10 digits)\r\n Sub Caste\r\n Capture User Image\r\n Mobile Number\r\n Edit\r\n User Details\r\n Internet is not available and there is no Data available in Local DB\r\n User ID: %1$s\r\n Abha Number: %1$s\r\n Aadhar Number: %1$s\r\n Person\\'s Name: %1$s\r\n Birth Year: %1$s\r\n Gender: %1$s\r\n Mobile Number: %1$s\r\n Father\\'s/Husband\\'s Name: %1$s\r\n Marital Status: %1$s\r\n Category: %1$s\r\n Caste: %1$s\r\n Sub Caste: %1$s\r\n House: %1$s\r\n City/Town: %1$s\r\n District: %1$s\r\n State: %1$s\r\n Center Name: %1$s\r\n\r\n Pincode: %1$s\r\n Is Under Medication: %1$s\r\n Is Under Blood Transfusion: %1$s\r\n Is Any Sickle cell History: %1$s\r\n Sickle cell Family History: %1$s\r\n Center Name\r\n Login ID\r\n Password\r\n Login\r\n Category\r\n Category\r\n Male\r\n Female\r\n Other\r\n\r\n Cancelled: Unable to scan, Try Again!!\r\n Please Scan the Abha ID/Aadhar ID\r\n The QR Code you have scanned is not valid, enter the data manually\r\n You have scanned the Abha ID, need to enter Aadhar ID manually\r\n Invalid Abha ID\r\n Invalid Aadhar ID\r\n Name field can\\'t be empty or less than 3 characters\r\n Center name can\\'t be empty or less than 3 characters\r\n Registration Done Successfully\r\n Internet not available, test details stored locally\r\n Please enter all the details properly\r\n Please enter a valid birth year between 1900 and 2023\r\n Please fill the field\r\n Please enter a valid 10-digit mobile number\r\n Please enter your name\r\n Please enter your marital status\r\n Please enter your category\r\n Please enter your caste\r\n Please enter your house address\r\n Please enter your city\r\n Please enter your district\r\n Please enter your state\r\n Please enter a valid 6-digit pin code\r\n Please enter your family history\r\n Please enter your guardian name\r\n enter father/husband name\r\n Do you want to LogOut the Application?\r\n Log Out\r\n Upload DB Registration\r\n Do you want to upload the local DB Registration to the cloud?\r\n Upload\r\n Upload done successfully\r\n\r\n Please enter a proper Login ID\r\n Please enter a proper password\r\n Wrong Password\r\n Wrong UserID\r\n\r\n You have scanned the Aadhar ID, need to enter Aadhar ID number you have scanned and Abha ID manually\r\n You have scanned the Abha ID\r\n You have scanned the Aadhar ID\r\n\r\n \r\n NT-A\r\n NT-B\r\n NT-C\r\n NT-D\r\n OBC\r\n OPEN\r\n OTHER\r\n SBC\r\n SC\r\n ST\r\n \r\n\r\n \r\n AHIR\r\n BARAI\r\n BRAHMAN\r\n BUDDHIST\r\n CHAMBHAR\r\n CHAMAR\r\n DEWANGAN\r\n DHIWAR\r\n FULMALI\r\n GOND\r\n JAIN\r\n KOLI\r\n KOSHTI\r\n KUMBHAR\r\n KUNBI\r\n LOHAR\r\n MALI\r\n MANNA\r\n MAHAR\r\n MOURYA\r\n MUSLIM\r\n NAVI\r\n OTHER\r\n PAWAR\r\n PARDESI\r\n SHAHU\r\n SONAR\r\n TELI\r\n \r\n\r\n \r\n Married\r\n Single\r\n Divorce\r\n \r\n\r\n \r\n O+ve\r\n O-ve\r\n A+ve\r\n A-ve\r\n B+ve\r\n B-ve\r\n AB+ve\r\n AB-ve\r\n \r\n\r\n \r\n Male\r\n Female\r\n Other\r\n \r\n\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml +--- a/app/src/main/res/values/strings.xml (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/res/values/strings.xml (date 1701672536424) +@@ -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 +Index: app/src/main/res/values-ka/strings.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-kn/strings.xml +rename from app/src/main/res/values-ka/strings.xml +rename to app/src/main/res/values-kn/strings.xml +--- a/app/src/main/res/values-ka/strings.xml (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/res/values-kn/strings.xml (date 1701672555890) +@@ -132,8 +132,15 @@ + + ನೀವು ಅಭಾ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ + ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ +- +- ++ ಭಾಷೆ ಯಶಸ್ವಿಯಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ ++ ನಿಮ್ಮ ಆದರಿತ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ ++ ಅಪ್ಲಿಕೇಶನ್ ಭಾಷೆ ++ ರಕ್ತ ಗುಂಡನ್ನು ಸೇರಿಸಿ ++ ಬಳಕೆದಾರ ಐಡಿ ++ ಸರಿ ++ ಹೌದು ++ ಇಲ್ಲ ++ ಹೆಸರು + + ಹೌದು + ಇಲ್ಲ +Index: app/src/main/java/com/example/hposregistration/ui/fragments/LanguageSettingsFragment.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- /dev/null (date 1701444127868) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/LanguageSettingsFragment.kt (date 1701444127868) +@@ -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 +Index: app/src/main/res/navigation/main_nav_graph.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml +--- a/app/src/main/res/navigation/main_nav_graph.xml (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/res/navigation/main_nav_graph.xml (date 1701444669915) +@@ -31,6 +31,9 @@ + app:destination="@id/loginFragment" + app:popUpTo="@id/main_nav_graph" + app:popUpToInclusive="true"/> ++ + + + ++ ++ ++ ++ + +\ No newline at end of file +Index: app/src/main/res/layout/fragment_language_settings.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- /dev/null (date 1701443505350) ++++ b/app/src/main/res/layout/fragment_language_settings.xml (date 1701443505350) +@@ -0,0 +1,13 @@ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +Index: app/src/main/res/layout/fragment_user_list.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/layout/fragment_user_list.xml b/app/src/main/res/layout/fragment_user_list.xml +--- a/app/src/main/res/layout/fragment_user_list.xml (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/res/layout/fragment_user_list.xml (date 1701412625829) +@@ -16,6 +16,14 @@ + android:layout_height="match_parent" + android:orientation="vertical"> + ++ + package com.example.hposregistration.ui.activities\r\n\r\nimport androidx.appcompat.app.AppCompatActivity\r\nimport android.os.Bundle\r\nimport dagger.hilt.android.AndroidEntryPoint\r\nimport `in`.sminnovations.hposregistration.databinding.ActivityMainBinding\r\n\r\n@AndroidEntryPoint\r\nclass MainActivity : AppCompatActivity() {\r\n\r\n private lateinit var binding: ActivityMainBinding\r\n\r\n override fun onCreate(savedInstanceState: Bundle?) {\r\n super.onCreate(savedInstanceState)\r\n binding = ActivityMainBinding.inflate(layoutInflater)\r\n setContentView(binding.root)\r\n\r\n }\r\n} +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt (date 1701444669860) +@@ -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 @@ + 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) +Index: app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package com.example.hposregistration.ui.fragments\r\n\r\nimport android.content.Context\r\nimport android.content.SharedPreferences\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport android.widget.Toast\r\nimport androidx.fragment.app.Fragment\r\nimport androidx.navigation.fragment.findNavController\r\nimport com.example.hposregistration.data.Constant\r\nimport `in`.sminnovations.hposregistration.R\r\nimport `in`.sminnovations.hposregistration.databinding.FragmentLoginBinding\r\n\r\nclass LoginFragment : Fragment() {\r\n\r\n private var _binding: FragmentLoginBinding? = null\r\n private val binding get() = _binding!!\r\n private lateinit var sharedPreference: SharedPreferences\r\n\r\n override fun onCreateView(\r\n inflater: LayoutInflater, container: ViewGroup?,\r\n savedInstanceState: Bundle?\r\n ): View {\r\n _binding = FragmentLoginBinding.inflate(inflater, container, false)\r\n sharedPreference = requireContext().getSharedPreferences(\"PREFERENCE_NAME\", Context.MODE_PRIVATE)\r\n return binding.root\r\n }\r\n\r\n override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\r\n super.onViewCreated(view, savedInstanceState)\r\n init()\r\n }\r\n\r\n private fun init() {\r\n if (isUserLoggedIn()) {\r\n navigateToUserListFragment()\r\n return\r\n }\r\n\r\n binding.btnLogin.setOnClickListener {\r\n val loginId = binding.loginId.text.toString()\r\n val password = binding.password.text.toString()\r\n\r\n if (loginId.isNotBlank() && password.isNotBlank()) {\r\n performLogin(loginId, password)\r\n } else {\r\n if (loginId.isBlank()) {\r\n binding.loginId.error = R.string.enter_proper_login_id.toString()\r\n }\r\n if (password.isBlank()) {\r\n binding.password.error = R.string.enter_proper_password.toString()\r\n }\r\n }\r\n }\r\n }\r\n\r\n private fun isUserLoggedIn(): Boolean {\r\n return sharedPreference.getString(Constant.USER_ID, \"\")?.isNotBlank() == true\r\n }\r\n\r\n private fun navigateToUserListFragment() {\r\n findNavController().navigate(R.id.action_loginFragment_to_userListFragment)\r\n }\r\n\r\n private fun performLogin(loginId: String, password: String) {\r\n val matchingId = Constant.STATICID.firstOrNull { it == loginId }\r\n if (matchingId != null) {\r\n if (password == Constant.password) {\r\n saveUserId(loginId)\r\n navigateToUserListFragment()\r\n return\r\n } else {\r\n Toast.makeText(requireContext(), R.string.wrong_password, Toast.LENGTH_SHORT).show()\r\n }\r\n }\r\n Toast.makeText(requireContext(), R.string.wrong_user_id, Toast.LENGTH_SHORT).show()\r\n }\r\n\r\n private fun saveUserId(userId: String) {\r\n with(sharedPreference.edit()) {\r\n putString(Constant.USER_ID, userId)\r\n apply()\r\n }\r\n }\r\n\r\n override fun onDestroyView() {\r\n super.onDestroyView()\r\n _binding = null\r\n }\r\n}\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt (date 1701443506066) +@@ -47,10 +47,10 @@ + 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) + } + } + } +Index: app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package com.example.hposregistration.ui.fragments.registration\r\n\r\nimport android.os.Bundle\r\nimport android.view.LayoutInflater\r\nimport android.view.View\r\nimport android.view.ViewGroup\r\nimport android.widget.Toast\r\nimport androidx.fragment.app.viewModels\r\nimport androidx.navigation.fragment.findNavController\r\nimport androidx.navigation.fragment.navArgs\r\nimport com.example.hposregistration.data.Constant.fetchYOBFromDOB\r\nimport com.example.hposregistration.data.Constant.mapToGender\r\nimport com.example.hposregistration.data.SecureQrCode\r\nimport com.example.hposregistration.data.user.UserData\r\nimport com.example.hposregistration.ui.fragments.BaseFragment\r\nimport com.example.hposregistration.ui.viewmodels.RegistrationViewModel\r\nimport com.journeyapps.barcodescanner.ScanContract\r\nimport com.journeyapps.barcodescanner.ScanIntentResult\r\nimport dagger.hilt.android.AndroidEntryPoint\r\nimport `in`.sminnovations.hposregistration.R\r\nimport `in`.sminnovations.hposregistration.databinding.FragmentAbhaRegistrationBinding\r\nimport org.json.JSONObject\r\n\r\n@AndroidEntryPoint\r\nclass AbhaRegistrationFragment : BaseFragment() {\r\n\r\n private var _binding: FragmentAbhaRegistrationBinding? = null\r\n private val binding get() = _binding!!\r\n\r\n private val viewModel by viewModels()\r\n private val args: AbhaRegistrationFragmentArgs by navArgs()\r\n private var userData = UserData()\r\n\r\n private val barcodeLauncher =\r\n registerForActivityResult(ScanContract()) { result: ScanIntentResult ->\r\n if (result.contents == null) {\r\n Toast.makeText(\r\n requireContext(), R.string.cancelled_unable_scan, Toast.LENGTH_LONG\r\n ).show()\r\n } else {\r\n processScannedData(result.contents)\r\n }\r\n }\r\n\r\n override fun onCreateView(\r\n inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?\r\n ): View {\r\n _binding = FragmentAbhaRegistrationBinding.inflate(inflater, container, false)\r\n return binding.root\r\n }\r\n\r\n override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\r\n super.onViewCreated(view, savedInstanceState)\r\n init()\r\n }\r\n\r\n private fun init() {\r\n binding.btnScanNow.setOnClickListener {\r\n barcodeLauncher.launch(scanQR(\"Please Scan the Abha ID/Aadhar ID\"))\r\n }\r\n\r\n if (args.userId != \"null\") {\r\n viewModel.getUserByID(args.userId)\r\n }\r\n\r\n viewModel.userData.observe(viewLifecycleOwner) { user ->\r\n userData = user\r\n with(binding) {\r\n aadharID.setText(user.aadharId)\r\n etAbhaId.setText(user.abhaId)\r\n etName.setText(user.name)\r\n centerName.setText(user.registrationCenterName)\r\n\r\n }\r\n }\r\n\r\n binding.btnProceed.setOnClickListener {\r\n val abhaIdInput = binding.etAbhaId.text.toString()\r\n val userName = binding.etName.text.toString()\r\n val aadharIdInput = binding.aadharID.text.toString()\r\n val centerName = binding.centerName.text.toString()\r\n\r\n if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) {\r\n userData.apply {\r\n name = userName\r\n aadharId = aadharIdInput\r\n abhaId = abhaIdInput\r\n registrationCenterName = centerName\r\n _id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3).uppercase()\r\n }\r\n\r\n viewModel.insert(userData)\r\n\r\n navigateToUserDetailsFragment(userData._id)\r\n }\r\n }\r\n }\r\n\r\n private fun processScannedData(contents: String) {\r\n try {\r\n val obj = JSONObject(contents)\r\n\r\n userData.apply {\r\n abhaId = obj.getString(\"hidn\").replace(\"-\", \"\")\r\n name = obj.getString(\"name\")\r\n birthYear = obj.getString(\"dob\").fetchYOBFromDOB().toString()\r\n gender = obj.getString(\"gender\").mapToGender().toString()\r\n phoneNumber = obj.getString(\"mobile\")\r\n\r\n state = obj.getString(\"state name\")\r\n district = obj.getString(\"district_name\")\r\n house = obj.getString(\"address\")\r\n }\r\n\r\n if (userData.abhaId.isNotEmpty()) {\r\n saveUserDataAsPerAbhaId()\r\n } else {\r\n saveUserDataAsPerAadharId()\r\n }\r\n } catch (e: Exception) {\r\n try {\r\n val decodedData = SecureQrCode(contents)\r\n val aadharData = decodedData.scannedAadharCard\r\n userData.apply {\r\n name = aadharData.name\r\n birthYear = aadharData.dateOfBirth.fetchYOBFromDOB().toString()\r\n gender = aadharData.gender.mapToGender().toString()\r\n state = aadharData.state\r\n district = aadharData.district\r\n house = aadharData.house\r\n }\r\n\r\n saveUserDataAsPerAadharId()\r\n } catch (e: Exception) {\r\n Toast.makeText(\r\n requireContext(),\r\n R.string.invalid_qr_code,\r\n Toast.LENGTH_SHORT\r\n ).show()\r\n }\r\n }\r\n }\r\n\r\n private fun saveUserDataAsPerAbhaId() {\r\n with(binding) {\r\n tvScanMessage.visibility = View.VISIBLE\r\n tvScanMessage.text = R.string.enter_aadhar_manually.toString()\r\n etAbhaId.setText(userData.abhaId)\r\n etName.setText(userData.name)\r\n }\r\n Toast.makeText(\r\n requireContext(), R.string.scanned_abha_id, Toast.LENGTH_SHORT\r\n ).show()\r\n }\r\n\r\n private fun saveUserDataAsPerAadharId() {\r\n with(binding) {\r\n tvScanMessage.text =\r\n R.string.scanned_aadhar_id.toString()\r\n etName.setText(userData.name)\r\n }\r\n Toast.makeText(\r\n requireContext(), R.string.scanned_aadharid, Toast.LENGTH_SHORT\r\n ).show()\r\n }\r\n\r\n private fun validateInputs(\r\n abhaId: String, aadharId: String, userName: String, centerName: String\r\n ): Boolean {\r\n with(binding) {\r\n if (!checkAbhaIDNumber(abhaId)) {\r\n etAbhaId.error = R.string.invalid_abha_id.toString()\r\n return false\r\n }\r\n if (!checkAadharIDNumber(aadharId)) {\r\n aadharID.error = R.string.invalid_aadhar_id.toString()\r\n return false\r\n }\r\n if (!checkUserName(userName)) {\r\n etName.error = R.string.name_field_error.toString()\r\n return false\r\n }\r\n if (!checkCenterName(centerName)) {\r\n etCenterName.error = R.string.center_name_error.toString()\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n\r\n private fun checkAbhaIDNumber(abhaId: String): Boolean {\r\n return abhaId.isNotEmpty() && abhaId.length >= 14\r\n }\r\n\r\n private fun checkAadharIDNumber(aadharId: String): Boolean {\r\n return aadharId.isNotEmpty() && aadharId.length >= 12\r\n }\r\n\r\n private fun checkUserName(userName: String): Boolean {\r\n return userName.isNotEmpty() && userName.length >= 3\r\n }\r\n\r\n private fun checkCenterName(centerName: String): Boolean {\r\n return centerName.isNotEmpty() && centerName.length >= 3\r\n }\r\n\r\n private fun navigateToUserDetailsFragment(userId: String) {\r\n val action =\r\n AbhaRegistrationFragmentDirections.actionRegistrationFragmentToUserDetailsRegistrationFragment(\r\n userId\r\n )\r\n findNavController().navigate(action)\r\n }\r\n\r\n override fun onDestroyView() {\r\n super.onDestroyView()\r\n _binding = null\r\n }\r\n}\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt (date 1701443506082) +@@ -144,7 +144,7 @@ + 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 @@ + 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 @@ + ): 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 + } + } +Index: app/src/main/java/com/example/hposregistration/data/LanguageManager.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- /dev/null (date 1701444127833) ++++ b/app/src/main/java/com/example/hposregistration/data/LanguageManager.kt (date 1701444127833) +@@ -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 +Index: app/src/main/res/drawable/baseline_settings_24.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- /dev/null (date 1701410310346) ++++ b/app/src/main/res/drawable/baseline_settings_24.xml (date 1701410310346) +@@ -0,0 +1,5 @@ ++ ++ ++ +Index: app/build.gradle +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>plugins {\r\n id 'com.android.application'\r\n id 'org.jetbrains.kotlin.android'\r\n id 'dagger.hilt.android.plugin'\r\n id 'com.google.gms.google-services'\r\n id 'androidx.navigation.safeargs.kotlin'\r\n id 'kotlin-kapt'\r\n id 'com.google.firebase.crashlytics'\r\n}\r\n\r\nandroid {\r\n namespace 'in.sminnovations.hposregistration'\r\n compileSdk 34\r\n\r\n defaultConfig {\r\n applicationId \"in.sminnovations.hposregistration\"\r\n minSdk 26\r\n targetSdk 34\r\n versionCode 1\r\n versionName \"1.0\"\r\n\r\n testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\r\n }\r\n\r\n buildTypes {\r\n release {\r\n minifyEnabled false\r\n proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\r\n }\r\n }\r\n compileOptions {\r\n sourceCompatibility JavaVersion.VERSION_17\r\n targetCompatibility JavaVersion.VERSION_17\r\n }\r\n buildFeatures {\r\n viewBinding true\r\n }\r\n kotlinOptions {\r\n jvmTarget = '17'\r\n }\r\n}\r\n\r\ndependencies {\r\n\r\n implementation 'androidx.core:core-ktx:1.10.1'\r\n implementation 'androidx.appcompat:appcompat:1.6.1'\r\n implementation 'com.google.android.material:material:1.9.0'\r\n implementation 'androidx.constraintlayout:constraintlayout:2.1.4'\r\n testImplementation 'junit:junit:4.13.2'\r\n androidTestImplementation 'androidx.test.ext:junit:1.1.5'\r\n androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'\r\n\r\n // firebase\r\n implementation(\"com.google.firebase:firebase-crashlytics-ktx\")\r\n implementation platform(\"com.google.firebase:firebase-bom:32.2.2\")\r\n implementation(\"com.google.firebase:firebase-analytics-ktx\")\r\n implementation 'com.google.firebase:firebase-firestore-ktx'\r\n implementation 'com.google.firebase:firebase-auth-ktx'\r\n implementation 'com.google.firebase:firebase-storage-ktx'\r\n implementation 'com.firebaseui:firebase-ui-firestore:8.0.2'\r\n implementation 'com.google.android.gms:play-services-auth:20.6.0'\r\n\r\n // Coroutines\r\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1'\r\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1'\r\n\r\n // Coroutine Lifecycle Scopes\r\n implementation \"androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1\"\r\n implementation \"androidx.lifecycle:lifecycle-runtime-ktx:2.6.1\"\r\n\r\n //Dagger - Hilt\r\n implementation \"com.google.dagger:hilt-android:2.46\"\r\n kapt \"com.google.dagger:hilt-android-compiler:2.46\"\r\n kapt \"androidx.hilt:hilt-compiler:1.0.0\"\r\n\r\n // Navigation Component\r\n implementation \"androidx.navigation:navigation-fragment-ktx:2.7.0\"\r\n implementation \"androidx.navigation:navigation-ui-ktx:2.7.0\"\r\n\r\n // Retrofit + GSON\r\n implementation \"com.squareup.retrofit2:retrofit:2.9.0\"\r\n implementation \"com.squareup.retrofit2:converter-gson:2.9.0\"\r\n\r\n // Timber\r\n implementation 'com.jakewharton.timber:timber:4.7.1'\r\n\r\n // Activity KTX for viewModels()\r\n implementation \"androidx.activity:activity-ktx:1.7.2\"\r\n\r\n //image\r\n implementation 'com.github.bumptech.glide:glide:4.13.2'\r\n annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'\r\n\r\n //Room\r\n implementation \"androidx.room:room-ktx:2.6.0-alpha03\"\r\n implementation \"androidx.room:room-runtime:2.6.0-alpha03\"\r\n kapt (\"androidx.room:room-compiler:2.6.0-alpha03\")\r\n\r\n // Barcode scanner\r\n implementation 'com.journeyapps:zxing-android-embedded:4.3.0'\r\n\r\n\r\n} +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/build.gradle b/app/build.gradle +--- a/app/build.gradle (revision 0e2dc2f306241d5abb7ca8378553cfc23896c4e1) ++++ b/app/build.gradle (date 1701443824088) +@@ -42,9 +42,9 @@ + + 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 @@ + 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 @@ + 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 From d24578cc1c2e30c40361fb292f9baa08424f1f1a Mon Sep 17 00:00:00 2001 From: Mariya Date: Mon, 4 Dec 2023 12:46:26 +0530 Subject: [PATCH 4/5] kannada and hindi language Translation version added --- .idea/shelf/Changes1.xml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .idea/shelf/Changes1.xml diff --git a/.idea/shelf/Changes1.xml b/.idea/shelf/Changes1.xml new file mode 100644 index 0000000..ceeb499 --- /dev/null +++ b/.idea/shelf/Changes1.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file From 610e206f27d8ce39c57e9e76b95bfdb7b6047307 Mon Sep 17 00:00:00 2001 From: Mariya Date: Mon, 4 Dec 2023 13:52:30 +0530 Subject: [PATCH 5/5] 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