From 943430af24305f327bcb05d201b233e4af2d5ff1 Mon Sep 17 00:00:00 2001 From: chandrashekhar reddy Date: Mon, 8 Jul 2024 14:33:02 +0530 Subject: [PATCH] latest version of app 1.0.8 --- .idea/gradle.xml | 5 +- app/build.gradle | 6 +- app/google-services.json | 83 ++++------ .../adapters/UserListOfflineAdapter.kt | 5 +- .../adapters/UserListOnlineAdapter.kt | 3 +- .../example/hposregistration/data/Constant.kt | 3 + .../ui/activities/MainActivity.kt | 70 ++++---- .../ui/fragments/UserListFragment.kt | 152 +++++++++++++++--- .../registration/AbhaRegistrationFragment.kt | 37 +++-- .../ReviewDetailsRegistrationFragment.kt | 2 +- .../UserDetailsRegistrationFragment.kt | 22 +-- .../res/layout/fragment_abha_registration.xml | 11 +- .../layout/fragment_capture_user_image.xml | 3 +- .../fragment_user_details_registration.xml | 31 ++-- .../main/res/layout/fragment_user_list.xml | 11 +- app/src/main/res/layout/user_item_view.xml | 16 +- app/src/main/res/values/strings.xml | 7 +- build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 19 files changed, 305 insertions(+), 168 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 43b22c9..2d25da2 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,17 +4,16 @@ diff --git a/app/build.gradle b/app/build.gradle index 5b2fa60..2abcfee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,11 +13,11 @@ android { compileSdk 34 defaultConfig { - applicationId "in.sminnovations.hposregistration" + applicationId "in.sminnovations.hposregistration.iocl" minSdk 26 targetSdk 34 - versionCode 6 - versionName "1.0.6" + versionCode 8 + versionName "1.0.8" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/google-services.json b/app/google-services.json index a35779e..1ddf40e 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -1,84 +1,67 @@ { "project_info": { - "project_number": "650071678820", - "project_id": "hpos-af3cc", - "storage_bucket": "hpos-af3cc.appspot.com" + "project_number": "243503501547", + "project_id": "iocl-iisc-hpos", + "storage_bucket": "iocl-iisc-hpos.appspot.com" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:650071678820:android:7569c1cad4fc99916c6471", + "mobilesdk_app_id": "1:243503501547:android:f17de652a3524d047feeae", "android_client_info": { - "package_name": "in.sminnovations.hposregistration" + "package_name": "com.iocl_iisc.hposqc" } }, - "oauth_client": [ - { - "client_id": "650071678820-70kp5jvjda4r5diqch2kn4lc40p4f42g.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "in.sminnovations.hposregistration", - "certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a" - } - }, - { - "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", - "client_type": 3 - } - ], + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" + "current_key": "AIzaSyBPxgcDkZfZMr8cFrkMWkVf1a-MstzWC1k" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", - "client_type": 3 - } - ] + "other_platform_oauth_client": [] } } }, { "client_info": { - "mobilesdk_app_id": "1:650071678820:android:f96be19e5d43102b6c6471", + "mobilesdk_app_id": "1:243503501547:android:e1bb0f338c8448dd7feeae", "android_client_info": { - "package_name": "in.sminnovations.hpostesting" + "package_name": "in.sminnovations.hposregistration.iocl" } }, - "oauth_client": [ - { - "client_id": "650071678820-l87dnr0bdj95get0khgnvfv2an1k6ogq.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "in.sminnovations.hpostesting", - "certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a" - } - }, - { - "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", - "client_type": 3 - } - ], + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" + "current_key": "AIzaSyBPxgcDkZfZMr8cFrkMWkVf1a-MstzWC1k" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", - "client_type": 3 - } - ] + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:243503501547:android:18b8b33b2dc3776d7feeae", + "android_client_info": { + "package_name": "in.sminnovations.hpostesting.iocl" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBPxgcDkZfZMr8cFrkMWkVf1a-MstzWC1k" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] } } } ], "configuration_version": "1" -} +} \ No newline at end of file diff --git a/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt b/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt index a53b67e..d1d6a6d 100644 --- a/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt +++ b/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt @@ -41,8 +41,9 @@ class UserListOfflineAdapter(private val view: View) : RecyclerView.Adapter, private override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int, model: UserData) { holder.binding.apply { userName.text = "Name: ${model.name}" - userId.text = "User ID: ${model._id}" + userId.text = "Sample ID: ${model._id}" + timeCreated.text = "Time Created: ${model.createdAt}" Glide.with(view).load(model.userImageURL).into(userImage) } } diff --git a/app/src/main/java/com/example/hposregistration/data/Constant.kt b/app/src/main/java/com/example/hposregistration/data/Constant.kt index 8462f60..5687b9f 100644 --- a/app/src/main/java/com/example/hposregistration/data/Constant.kt +++ b/app/src/main/java/com/example/hposregistration/data/Constant.kt @@ -22,6 +22,9 @@ object Constant { const val USER_ID = "usernameId" val STATICID = listOf( + "SMIMYSURU", + "SMIKODAGU", + "SMICHAMARAJA", "SMIREG1", "SMIREG2", "SMIREG3", 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 013bdf0..008b884 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 @@ -24,40 +24,40 @@ class MainActivity : AppCompatActivity() { override fun onResume() { super.onResume() - val firebaseAppDistribution = FirebaseAppDistribution.getInstance() - firebaseAppDistribution.updateIfNewReleaseAvailable() - .addOnProgressListener { updateProgress -> - - if (updateProgress.apkBytesDownloaded > 0) { - Toast.makeText( - this, - "${updateProgress.updateStatus}. ${updateProgress.apkBytesDownloaded / 1048576} /${updateProgress.apkFileTotalBytes / 1048576} MB", - Toast.LENGTH_SHORT - ).show() - } - } - .addOnFailureListener { e -> - // (Optional) Handle errors. - if (e is FirebaseAppDistributionException) { - when (e.errorCode) { - FirebaseAppDistributionException.Status.NOT_IMPLEMENTED -> { - // SDK did nothing. This is expected when building for Play. - } - - else -> { - // Handle other errors. - Toast.makeText( - this, - "AppDistribution error, status: ${e.errorCode}", - Toast.LENGTH_SHORT - ).show() - } - } - FirebaseCrashlytics.getInstance().recordException(e) - } - } - .addOnSuccessListener { -// Toast.makeText(this, "App Update: Success!", Toast.LENGTH_SHORT).show() - } +// val firebaseAppDistribution = FirebaseAppDistribution.getInstance() +// firebaseAppDistribution.updateIfNewReleaseAvailable() +// .addOnProgressListener { updateProgress -> +// +// if (updateProgress.apkBytesDownloaded > 0) { +// Toast.makeText( +// this, +// "${updateProgress.updateStatus}. ${updateProgress.apkBytesDownloaded / 1048576} /${updateProgress.apkFileTotalBytes / 1048576} MB", +// Toast.LENGTH_SHORT +// ).show() +// } +// } +// .addOnFailureListener { e -> +// // (Optional) Handle errors. +// if (e is FirebaseAppDistributionException) { +// when (e.errorCode) { +// FirebaseAppDistributionException.Status.NOT_IMPLEMENTED -> { +// // SDK did nothing. This is expected when building for Play. +// } +// +// else -> { +// // Handle other errors. +// Toast.makeText( +// this, +// "AppDistribution error, status: ${e.errorCode}", +// Toast.LENGTH_SHORT +// ).show() +// } +// } +// FirebaseCrashlytics.getInstance().recordException(e) +// } +// } +// .addOnSuccessListener { +//// Toast.makeText(this, "App Update: Success!", Toast.LENGTH_SHORT).show() +// } } } \ No newline at end of file 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 4e2565e..964f671 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 @@ -8,6 +8,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.SearchView import android.widget.Toast import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController @@ -25,13 +26,15 @@ import `in`.sminnovations.hposregistration.R import `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding import java.text.SimpleDateFormat import java.util.Date +import java.util.Locale @AndroidEntryPoint class UserListFragment : BaseFragment() { - + private lateinit var userId:String + private var district:String ="Mysuru" private var _binding: FragmentUserListBinding? = null private val binding get() = _binding!! - + private lateinit var offlineAdapter:UserListOfflineAdapter private val viewModel by viewModels() private var isOnline = false @@ -43,6 +46,14 @@ class UserListFragment : BaseFragment() { ): View { _binding = FragmentUserListBinding.inflate(inflater, container, false) sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) + userId = sharedPreference.getString(Constant.USER_ID, "").toString() + if(userId=="SMIMYSURU"){ + district = "Mysuru" + }else if(userId=="SMIKODAGU"){ + district = "Kodagu" + }else if(userId=="SMICHAMARAJA"){ + district = "Chamarajanagar" + } setupViews() return binding.root } @@ -66,12 +77,15 @@ class UserListFragment : BaseFragment() { binding.btnRegisterUser.setOnClickListener { findNavController().navigate(R.id.action_userListFragment_to_registrationFragment) } + binding.btnLogout.setOnClickListener { logoutUser(requireContext()) } } private fun init() { + binding.searchUser.isIconified = false + viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable -> if (isNetworkAvailable) { isOnline = isNetworkAvailable @@ -83,6 +97,28 @@ class UserListFragment : BaseFragment() { } } + binding.searchUser.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String?): Boolean { + // Perform the final search + if(isOnline){ + fetchFromServer(query) + }else{ + filterList(query) + } + return true + } + + override fun onQueryTextChange(newText: String?): Boolean { + // Perform search as the user types + if(isOnline){ + fetchFromServer(newText) + }else{ + filterList(newText) + } + return true + } + }) + binding.uploadData.setOnClickListener { showUploadDialog(requireContext()) } @@ -91,6 +127,12 @@ class UserListFragment : BaseFragment() { deteleIncompleteRegistration(userDataList) } } + private fun filterList(query: String?) { + val filteredList = viewModel.allUserData.value?.filter { userData -> + userData.name.contains(query ?: "", ignoreCase = true) + } + offlineAdapter.differ.submitList(filteredList) + } private fun logoutUser(context: Context) { val builder = AlertDialog.Builder(context) @@ -163,29 +205,89 @@ class UserListFragment : BaseFragment() { } } } +// private fun fetchFromServer(searchTerm: String? = null) { +// binding.noList.visibility = View.GONE +// binding.rvOrder.visibility = View.VISIBLE +// val dateFormat = SimpleDateFormat("yyyy-MM-dd") +// val currentDate = Date() +// val today = dateFormat.format(currentDate) +// +// // Base query to fetch patient data created today +// var query = Firebase.firestore.collection("patientData") +// .whereGreaterThanOrEqualTo("createdAt", today) +// .orderBy("createdAt", Query.Direction.DESCENDING) +// +// // If a search term is provided, add it to the query +// if (!searchTerm.isNullOrEmpty()) { +// query = query.whereEqualTo("aadharId", searchTerm) +// } +// +// query.get().addOnSuccessListener { +// if (it.documents.isEmpty() && isOnline) { +// binding.emptyRegistrations.visibility = View.VISIBLE +// } +// } +// +// val recyclerViewOptions = +// FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) +// .build() +// val adapter = UserListOnlineAdapter(recyclerViewOptions, binding.root) +// binding.rvOrder.adapter = adapter +// adapter.startListening() +// } +private fun fetchFromServer(searchTerm: String? = null) { + binding.noList.visibility = View.GONE + binding.rvOrder.visibility = View.VISIBLE + val dateFormat = SimpleDateFormat("yyyy-MM-dd") + val currentDate = Date() + val today = dateFormat.format(currentDate) - private fun fetchFromServer() { - binding.noList.visibility = View.GONE - binding.rvOrder.visibility = View.VISIBLE - val dateFormat = SimpleDateFormat("yyyy-MM-dd") - val currentDate = Date() - val today = dateFormat.format(currentDate) - val query = Firebase.firestore.collection("patientData") - .whereGreaterThanOrEqualTo("createdAt", today) - .orderBy("createdAt", Query.Direction.DESCENDING) - query.get().addOnSuccessListener { - if (it.documents.isEmpty() && isOnline) { - binding.emptyRegistrations.visibility = View.VISIBLE - } - } - val recyclerViewOptions = - FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) - .build() - val adapter = UserListOnlineAdapter(recyclerViewOptions, binding.root) - binding.rvOrder.adapter = adapter - adapter.startListening() + // Base query to fetch patient data created today and from the specified district + var query = Firebase.firestore.collection("patientData") + // .whereGreaterThanOrEqualTo("createdAt", today) + .whereEqualTo("district", district) + .orderBy("createdAt", Query.Direction.DESCENDING) + + // If a search term is provided, add it to the query + if (!searchTerm.isNullOrEmpty()) { + query = query.whereEqualTo("_id", searchTerm) } + query.get().addOnSuccessListener { + if (it.documents.isEmpty() && isOnline) { + binding.emptyRegistrations.visibility = View.VISIBLE + } + } + + val recyclerViewOptions = + FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) + .build() + val adapter = UserListOnlineAdapter(recyclerViewOptions, binding.root) + binding.rvOrder.adapter = adapter + adapter.startListening() +} +// private fun fetchFromServer() { +// binding.noList.visibility = View.GONE +// binding.rvOrder.visibility = View.VISIBLE +// val dateFormat = SimpleDateFormat("yyyy-MM-dd") +// val currentDate = Date() +// val today = dateFormat.format(currentDate) +// val query = Firebase.firestore.collection("patientData") +// .whereGreaterThanOrEqualTo("createdAt", today) +// .orderBy("createdAt", Query.Direction.DESCENDING) +// query.get().addOnSuccessListener { +// if (it.documents.isEmpty() && isOnline) { +// binding.emptyRegistrations.visibility = View.VISIBLE +// } +// } +// val recyclerViewOptions = +// FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) +// .build() +// val adapter = UserListOnlineAdapter(recyclerViewOptions, binding.root) +// binding.rvOrder.adapter = adapter +// adapter.startListening() +// } + private fun fetchFromLocalDB() { binding.uploadData.visibility = View.GONE viewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> @@ -201,9 +303,9 @@ class UserListFragment : BaseFragment() { binding.noList.visibility = View.GONE binding.rvOrder.visibility = View.VISIBLE deteleIncompleteRegistration(userDataList) - val adapter = UserListOfflineAdapter(binding.root) - adapter.differ.submitList(userDataList) - binding.rvOrder.adapter = adapter + offlineAdapter = UserListOfflineAdapter(binding.root) + offlineAdapter.differ.submitList(userDataList) + binding.rvOrder.adapter = offlineAdapter } } } 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 5b3a74b..32d263d 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 @@ -1,5 +1,7 @@ package com.example.hposregistration.ui.fragments.registration +import android.content.Context +import android.content.SharedPreferences import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -20,11 +22,14 @@ import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hposregistration.databinding.FragmentAbhaRegistrationBinding import org.json.JSONObject import java.time.Instant +import java.util.Random @AndroidEntryPoint class AbhaRegistrationFragment : BaseFragment() { private var _binding: FragmentAbhaRegistrationBinding? = null + private lateinit var sharedPreference: SharedPreferences + private val binding get() = _binding!! private val viewModel by viewModels() @@ -46,6 +51,8 @@ class AbhaRegistrationFragment : BaseFragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentAbhaRegistrationBinding.inflate(inflater, container, false) + sharedPreference = + requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) return binding.root } @@ -83,20 +90,26 @@ class AbhaRegistrationFragment : BaseFragment() { if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) { userData.apply { - name = userName + name = userName.lowercase() aadharId = aadharIdInput abhaId = abhaIdInput registrationCenterName = centerName - _id = centerName.substring(0, 3).uppercase() + currentUnixTime.toString() -// _id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3).uppercase() + // _id = centerName.substring(0, 3).uppercase() + name.substring(0, 4) + + _id = userName.substring(0, 3).uppercase() + generateFourDigitNumber() +centerName.substring(0, 3).uppercase() } viewModel.insert(userData) - + Toast.makeText(requireActivity(),"ID"+userData._id,Toast.LENGTH_SHORT).show() navigateToUserDetailsFragment(userData._id) } + } } + private fun generateFourDigitNumber(): String { + val random = Random() + val number: Int = 1000 + random.nextInt(9000) // Ensures a 4-digit number + return number.toString() + } private fun processScannedData(contents: String) { try { @@ -170,14 +183,14 @@ class AbhaRegistrationFragment : BaseFragment() { abhaId: String, aadharId: String, userName: String, centerName: String ): Boolean { with(binding) { - if (!checkAbhaIDNumber(abhaId)) { - etAbhaId.error = "Invalid Abha ID" - return false - } - if (!checkAadharIDNumber(aadharId)) { - aadharID.error = "Invalid Aadhar ID" - return false - } +// if (!checkAbhaIDNumber(abhaId)) { +// etAbhaId.error = "Invalid Abha ID" +// return false +// } +// if (!checkAadharIDNumber(aadharId)) { +// aadharID.error = "Invalid Aadhar ID" +// return false +// } if (!checkUserName(userName)) { etName.error = "Name field can't be empty or less than 3 characters" 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 dcddf34..8a78d46 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 @@ -111,7 +111,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { requireContext().getString(R.string.abha_number, userData.abhaId) binding.tvAadharId.text = requireContext().getString(R.string.aadhar_number_details, userData.aadharId) - binding.tvUserName.text = requireContext().getString(R.string.user_name, userData.name) + binding.tvUserName.text = requireContext().getString(R.string.user_name, userData.name.lowercase()) binding.tvBirthYear.text = requireContext().getString(R.string.birth_year_details, userData.birthYear) binding.tvGender.text = 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 037abd6..0e90620 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 @@ -71,13 +71,12 @@ class UserDetailsRegistrationFragment : Fragment() { user.phoneNumber.let { etMobile.setText(it) } user.careOf.let { etCareof.setText(it) } user.maritalStatus.let { etIsMarried.setText(it, false) } - user.caste.let { etCaste.setText(it, false) } + user.caste.let { etCaste.setText(it) } user.category.let { etCategory.setText(it, false) } user.subCaste.let { etSubCaste.setText(it) } user.house.let { etHouse.setText(it) } user.city.let { etCity.setText(it) } - user.district.let { etDistrict.setText(it) } - user.state.let { etState.setText(it) } + user.district.let { etDistrict.setText(it, false) } user.pinCode.let { etPincode.setText(it) } user.isUnderMedication.let { if (it != null) { @@ -137,8 +136,8 @@ class UserDetailsRegistrationFragment : Fragment() { private fun verifyUserDetails(): Boolean { 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" + if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2020) { + etYob.error = "Please enter a valid birth year between 1900 and 2020" return false } else { userData.birthYear = yob @@ -153,12 +152,13 @@ class UserDetailsRegistrationFragment : Fragment() { } val mobile = etMobile.text.toString() - if (mobile.isEmpty() || mobile.length != 10) { - etMobile.error = "Please enter a valid 10-digit mobile number" - return false - } else { - userData.phoneNumber = mobile - } + userData.phoneNumber = mobile +// if (mobile.isEmpty() || mobile.length != 10) { +// etMobile.error = "Please enter a valid 10-digit mobile number" +// return false +// } else { +// userData.phoneNumber = mobile +// } val careOf = etCareof.text.toString() if (careOf.isEmpty()) { diff --git a/app/src/main/res/layout/fragment_abha_registration.xml b/app/src/main/res/layout/fragment_abha_registration.xml index 6729b21..32d46e1 100644 --- a/app/src/main/res/layout/fragment_abha_registration.xml +++ b/app/src/main/res/layout/fragment_abha_registration.xml @@ -18,6 +18,7 @@ @@ -93,7 +96,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" - android:text="@string/enter_abha_number_manualy" + android:text="Enter Details to proceed\n(ABHA and Aadhar are optional)" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/seperator1" /> @@ -111,6 +114,7 @@ android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" + android:maxLength="24" android:hint="@string/person_s_name" /> @@ -168,6 +172,7 @@ android:id="@+id/centerName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:maxLength="24" android:hint="@string/center_name" android:inputType="text" /> @@ -189,6 +194,7 @@ android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="@string/proceed" + android:textColor="@color/white" app:cornerRadius="16dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -200,6 +206,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginTop="24dp" + android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btnProceed"> @@ -246,6 +253,7 @@ style="@style/title1" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:visibility="gone" android:layout_marginTop="24dp" android:text="@string/create_abha_id_card" app:layout_constraintStart_toStartOf="parent" @@ -254,6 +262,7 @@ + android:padding="24dp"> - - + android:hint="@string/caste" /> @@ -234,7 +230,7 @@ android:id="@+id/et_house" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/house" /> + android:hint="Address" /> @@ -256,23 +252,25 @@ android:hint="@string/city_town" /> - - + android:hint="@string/district" + android:inputType="none" + android:labelFor="@id/til_district" + app:simpleItems="@array/district" /> @@ -291,6 +289,7 @@ android:id="@+id/et_state" android:layout_width="match_parent" android:layout_height="wrap_content" + android:text="Karnataka" android:hint="@string/state" /> diff --git a/app/src/main/res/layout/fragment_user_list.xml b/app/src/main/res/layout/fragment_user_list.xml index 8b08c4f..7670e91 100644 --- a/app/src/main/res/layout/fragment_user_list.xml +++ b/app/src/main/res/layout/fragment_user_list.xml @@ -89,6 +89,15 @@ app:layout_constraintEnd_toStartOf="@+id/uploadData" app:layout_constraintTop_toTopOf="@+id/tv_title" /> + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8bbfd81..a152b0b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -48,7 +48,7 @@ Register User Is user having any family history for Sickle Cell Family History of Sickle Cell - Mobile Number (10 digits) + Mobile Number(Optional) Sub Caste Capture User Image Mobile Number @@ -156,5 +156,10 @@ Female Other + + Mysuru + Kodagu + Chamarajanagar + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 3c8d57b..f55cf0b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.0.2' apply false - id 'com.android.library' version '8.0.2' apply false + id 'com.android.application' version '8.4.0' apply false + id 'com.android.library' version '8.4.0' apply false id 'org.jetbrains.kotlin.android' version '1.8.0' apply false id 'androidx.navigation.safeargs' version '2.7.0-beta02' apply false id 'com.google.dagger.hilt.android' version '2.46' apply false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 99d6797..b86d5a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jul 12 14:05:11 IST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists