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