From e74a69662ec6f024833b9ccb292c3502dc3dd61e Mon Sep 17 00:00:00 2001 From: mohamedkaif356 Date: Fri, 7 Jul 2023 15:26:11 +0530 Subject: [PATCH] Implemented Login Feature --- .idea/misc.xml | 5 + .idea/vcs.xml | 6 + Login_Feature.patch | 1496 +++++++++++++++++ .../adapters/UserListOfflineAdapter.kt | 2 +- .../adapters/UserListOnlineAdapter.kt | 2 +- .../hposregistration/dao/Converters.kt | 27 - .../hposregistration/dao/MyDataBase.kt | 1 - .../example/hposregistration/data/Constant.kt | 26 +- .../hposregistration/data/user/UserData.kt | 25 +- .../ui/fragments/LoginFragment.kt | 92 + .../registration/AbhaRegistrationFragment.kt | 24 +- .../registration/CaptureUserImageFragment.kt | 6 +- .../ReviewDetailsRegistrationFragment.kt | 32 +- .../ui/viewmodels/RegistrationViewModel.kt | 4 +- .../res/drawable/sickle_cell_gov_logo.png | Bin 0 -> 12702 bytes app/src/main/res/drawable/smi_logo.png | Bin 0 -> 25267 bytes .../res/layout/fragment_abha_registration.xml | 2 +- app/src/main/res/layout/fragment_login.xml | 145 ++ .../main/res/navigation/main_nav_graph.xml | 19 +- app/src/main/res/values/strings.xml | 3 + 20 files changed, 1840 insertions(+), 77 deletions(-) create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 Login_Feature.patch delete mode 100644 app/src/main/java/com/example/hposregistration/dao/Converters.kt create mode 100644 app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt create mode 100644 app/src/main/res/drawable/sickle_cell_gov_logo.png create mode 100644 app/src/main/res/drawable/smi_logo.png create mode 100644 app/src/main/res/layout/fragment_login.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..f2e8cc0 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Login_Feature.patch b/Login_Feature.patch new file mode 100644 index 0000000..be156c3 --- /dev/null +++ b/Login_Feature.patch @@ -0,0 +1,1496 @@ +Index: app/src/main/java/com/example/hposregistration/dao/Converters.kt +=================================================================== +diff --git a/app/src/main/java/com/example/hposregistration/dao/Converters.kt b/app/src/main/java/com/example/hposregistration/dao/Converters.kt +deleted file mode 100644 +--- a/app/src/main/java/com/example/hposregistration/dao/Converters.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ /dev/null (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) +@@ -1,27 +0,0 @@ +-package com.example.hposregistration.dao +- +-import androidx.room.TypeConverter +-import com.example.hposregistration.data.user.UserData +-import com.google.gson.Gson +- +-class Converters { +- private val gson = Gson() +- +- @TypeConverter +- fun fromString(value: String?): UserData.Location? { +- return if (value != null) { +- gson.fromJson(value, UserData.Location::class.java) +- } else { +- null +- } +- } +- +- @TypeConverter +- fun toString(location: UserData.Location?): String? { +- return if (location != null) { +- gson.toJson(location) +- } else { +- null +- } +- } +-} +\ No newline at end of file +Index: app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt b/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt +--- a/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt (date 1688622947580) +@@ -43,7 +43,7 @@ + holder.binding.apply { + userName.text = userList.name + userId.text = userList._id +- Glide.with(view).load(userList.userImage).into(userImage) ++ Glide.with(view).load(userList.userImageURL).into(userImage) + } + } + } +\ No newline at end of file +Index: app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt +IDEA additional info: +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 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/adapters/UserListOnlineAdapter.kt (date 1688622964273) +@@ -29,7 +29,7 @@ + holder.binding.apply { + userName.text = model.name + userId.text = model._id +- Glide.with(view).load(model.userImage).into(userImage) ++ Glide.with(view).load(model.userImageURL).into(userImage) + } + } + } +\ No newline at end of file +Index: app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.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/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 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/AbhaRegistrationFragment.kt (date 1688626715436) +@@ -65,26 +65,26 @@ + viewModel.userData.observe(viewLifecycleOwner) { user -> + userData = user + with(binding) { +- aadharID.setText(user.AadharId) +- etAbhaId.setText(user.AbhaId) ++ aadharID.setText(user.aadharId) ++ etAbhaId.setText(user.abhaId) + etName.setText(user.name) +- centerName.setText(user.CenterName) ++ centerName.setText(user.registrationCenterName) + + } + } + + binding.btnProceed.setOnClickListener { +- val abhaId = binding.etAbhaId.text.toString() ++ val abhaIdInput = binding.etAbhaId.text.toString() + val userName = binding.etName.text.toString() +- val aadharId = binding.aadharID.text.toString() ++ val aadharIdInput = binding.aadharID.text.toString() + val centerName = binding.centerName.text.toString() + +- if (validateInputs(abhaId, aadharId, userName, centerName)) { ++ if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) { + userData.apply { + name = userName +- AadharId = aadharId +- AbhaId = abhaId +- CenterName = centerName ++ aadharId = aadharIdInput ++ abhaId = abhaIdInput ++ registrationCenterName = centerName + _id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3).uppercase() + } + +@@ -100,7 +100,7 @@ + val obj = JSONObject(contents) + + userData.apply { +- AbhaId = obj.getString("hidn").replace("-", "") ++ abhaId = obj.getString("hidn").replace("-", "") + name = obj.getString("name") + birthYear = obj.getString("dob").fetchYOBFromDOB().toString() + gender = obj.getString("gender").mapToGender().toString() +@@ -111,7 +111,7 @@ + house = obj.getString("address") + } + +- if (userData.AbhaId.isNotEmpty()) { ++ if (userData.abhaId.isNotEmpty()) { + saveUserDataAsPerAbhaId() + } else { + saveUserDataAsPerAadharId() +@@ -144,7 +144,7 @@ + with(binding) { + tvScanMessage.visibility = View.VISIBLE + tvScanMessage.text = "You have scanned the Abha ID, need to enter Aadhar ID manually" +- etAbhaId.setText(userData.AbhaId) ++ etAbhaId.setText(userData.abhaId) + etName.setText(userData.name) + } + Toast.makeText( +Index: app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.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/registration/CaptureUserImageFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt (date 1688626715453) +@@ -70,8 +70,8 @@ + viewModel.getUserByID(args.userId) + viewModel.userData.observe(viewLifecycleOwner) { user -> + userData = user +- if (userData.userImage.isNotEmpty()) { +- binding.userImage.loadImageFromUri(Uri.parse(user.userImage)) ++ if (userData.userImageURL.isNotEmpty()) { ++ binding.userImage.loadImageFromUri(Uri.parse(user.userImageURL)) + binding.btnSubmit.isEnabled = true + binding.btnSubmit.setOnClickListener { + navigate() +@@ -122,7 +122,7 @@ + } + + private fun submitImage(uri: Uri) { +- userData.userImage = uri.toString() ++ userData.userImageURL = uri.toString() + viewModel.insert(userData) + navigate() + } +Index: app/src/main/res/layout/fragment_abha_registration.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/layout/fragment_abha_registration.xml b/app/src/main/res/layout/fragment_abha_registration.xml +--- a/app/src/main/res/layout/fragment_abha_registration.xml (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/res/layout/fragment_abha_registration.xml (date 1688628505589) +@@ -4,7 +4,7 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" +- tools:context=".ui.fragments.registration.AbhaRegistrationFragment"> ++ tools:context="com.example.hposregistration.ui.fragments.registration.AbhaRegistrationFragment"> + + UTF-8 +=================================================================== +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 +--- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/ReviewDetailsRegistrationFragment.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/ReviewDetailsRegistrationFragment.kt (date 1688643652115) +@@ -1,5 +1,7 @@ + package com.example.hposregistration.ui.fragments.registration + ++import android.content.Context ++import android.content.SharedPreferences + import android.net.Uri + import android.os.Bundle + import android.view.LayoutInflater +@@ -10,18 +12,23 @@ + import androidx.navigation.fragment.findNavController + import androidx.navigation.fragment.navArgs + import com.bumptech.glide.Glide ++import com.example.hposregistration.data.Constant + import com.example.hposregistration.data.user.UserData + import com.example.hposregistration.ui.fragments.BaseFragment + import com.example.hposregistration.ui.viewmodels.RegistrationViewModel + import dagger.hilt.android.AndroidEntryPoint + import `in`.sminnovations.hposregistration.R + import `in`.sminnovations.hposregistration.databinding.FragmentReviewDetailsRegistrationBinding ++import java.text.SimpleDateFormat ++import java.util.Calendar ++import java.util.Locale + + @AndroidEntryPoint + class ReviewDetailsRegistrationFragment : BaseFragment() { + + private var _binding: FragmentReviewDetailsRegistrationBinding? = null + private val binding get() = _binding!! ++ private lateinit var sharedPreference: SharedPreferences + + private val viewModel by viewModels() + private val args: ReviewDetailsRegistrationFragmentArgs by navArgs() +@@ -32,6 +39,8 @@ + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + _binding = FragmentReviewDetailsRegistrationBinding.inflate(inflater, container, false) ++ sharedPreference = ++ requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) + return binding.root + } + +@@ -75,26 +84,33 @@ + + viewModel.fireBaseUpload.observe(viewLifecycleOwner) { + if (it == "Success") { +- Toast.makeText(requireContext(), "Registration Done Successfully", Toast.LENGTH_SHORT) +- .show() ++ Toast.makeText( ++ requireContext(), ++ "Registration Done Successfully", ++ Toast.LENGTH_SHORT ++ ).show() + navigateToUserListFragment() + } + } + } + + private fun addDataToFirebase() { ++ userData.createdAt = SimpleDateFormat( ++ "yyyy-MM-dd HH:mm:ss", Locale.getDefault() ++ ).format(Calendar.getInstance().time) ++ userData.createdBy = sharedPreference.getString(Constant.USER_ID, "") + viewModel.addUserToDatabase(userData) + viewModel.deleteById(args.userId) + } + + private fun setUserData(userData: UserData) { + with(binding) { +- Glide.with(requireActivity()).load(Uri.parse(userData.userImage)).into(userImage) ++ Glide.with(requireActivity()).load(Uri.parse(userData.userImageURL)).into(userImage) + binding.tvUserID.text = requireContext().getString(R.string.user_id, userData._id) + binding.tvAbhaId.text = +- requireContext().getString(R.string.abha_number, userData.AbhaId) ++ requireContext().getString(R.string.abha_number, userData.abhaId) + binding.tvAadharId.text = +- requireContext().getString(R.string.aadhar_number_details, userData.AadharId) ++ requireContext().getString(R.string.aadhar_number_details, userData.aadharId) + binding.tvUserName.text = requireContext().getString(R.string.user_name, userData.name) + binding.tvBirthYear.text = + requireContext().getString(R.string.birth_year_details, userData.birthYear) +@@ -121,7 +137,7 @@ + binding.tvPincode.text = + requireContext().getString(R.string.pincode_details, userData.pinCode) + binding.centerName.text = +- requireContext().getString(R.string.centre_name, userData.CenterName) ++ requireContext().getString(R.string.centre_name, userData.registrationCenterName) + if (userData.isUnderMedication!!) { + binding.tvIsUnderMedication.text = requireContext().getString( + R.string.is_patient_under_any_medication_details, "Yes" +@@ -135,7 +151,7 @@ + binding.tvIsUnderTransfusion.text = requireContext().getString( + R.string.is_patient_undergoing_any_blood_transfusion_details, "Yes" + ) +- }else{ ++ } else { + binding.tvIsUnderTransfusion.text = requireContext().getString( + R.string.is_patient_undergoing_any_blood_transfusion_details, "No" + ) +@@ -145,7 +161,7 @@ + R.string.sickle_cell_family_history, "No" + ) + +- }else{ ++ } else { + binding.tvSickleCellFamilyHistory.text = requireContext().getString( + R.string.sickle_cell_family_history, userData.sickleCellHistory + ) +Index: app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt b/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt +--- a/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt (date 1688622142624) +@@ -6,7 +6,6 @@ + import com.example.hposregistration.data.user.UserData + + @Database(entities = [UserData::class], version = 1, exportSchema = false) +-@TypeConverters(Converters::class) + abstract class MyDatabase : RoomDatabase() { + abstract fun userDao(): UserDao + } +\ No newline at end of file +Index: app/src/main/res/layout/fragment_login.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml +new file mode 100644 +--- /dev/null (date 1688720722666) ++++ b/app/src/main/res/layout/fragment_login.xml (date 1688720722666) +@@ -0,0 +1,145 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +Index: app/src/main/res/values/strings.xml +IDEA additional info: +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 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/res/values/strings.xml (date 1688629127107) +@@ -78,6 +78,9 @@ + Is Any Sickle cell History: %1$s + Sickle cell Family History: %1$s + Center Name ++ Login ID ++ Password ++ Login + + + +Index: app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.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/LoginFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt +new file mode 100644 +--- /dev/null (date 1688629511306) ++++ b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt (date 1688629511306) +@@ -0,0 +1,92 @@ ++package com.example.hposregistration.ui.fragments ++ ++import android.content.Context ++import android.content.SharedPreferences ++import android.os.Bundle ++import android.view.LayoutInflater ++import android.view.View ++import android.view.ViewGroup ++import android.widget.Toast ++import androidx.fragment.app.Fragment ++import androidx.navigation.fragment.findNavController ++import com.example.hposregistration.data.Constant ++import `in`.sminnovations.hposregistration.R ++import `in`.sminnovations.hposregistration.databinding.FragmentLoginBinding ++ ++class LoginFragment : Fragment() { ++ ++ private var _binding: FragmentLoginBinding? = null ++ private val binding get() = _binding!! ++ private lateinit var sharedPreference: SharedPreferences ++ ++ override fun onCreateView( ++ inflater: LayoutInflater, container: ViewGroup?, ++ savedInstanceState: Bundle? ++ ): View { ++ _binding = FragmentLoginBinding.inflate(inflater, container, false) ++ sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) ++ return binding.root ++ } ++ ++ override fun onViewCreated(view: View, savedInstanceState: Bundle?) { ++ super.onViewCreated(view, savedInstanceState) ++ init() ++ } ++ ++ private fun init() { ++ if (isUserLoggedIn()) { ++ navigateToUserListFragment() ++ return ++ } ++ ++ binding.btnLogin.setOnClickListener { ++ val loginId = binding.loginId.text.toString() ++ val password = binding.password.text.toString() ++ ++ if (loginId.isNotBlank() && password.isNotBlank()) { ++ performLogin(loginId, password) ++ } else { ++ if (loginId.isBlank()) { ++ binding.loginId.error = "Please enter a proper Login ID" ++ } ++ if (password.isBlank()) { ++ binding.password.error = "Please enter a proper password" ++ } ++ } ++ } ++ } ++ ++ private fun isUserLoggedIn(): Boolean { ++ return sharedPreference.getString(Constant.USER_ID, "")?.isNotBlank() == true ++ } ++ ++ private fun navigateToUserListFragment() { ++ findNavController().navigate(R.id.action_loginFragment_to_userListFragment) ++ } ++ ++ private fun performLogin(loginId: String, password: String) { ++ val matchingId = Constant.STATICID.firstOrNull { it == loginId } ++ if (matchingId != null) { ++ if (password == Constant.password) { ++ saveUserId(loginId) ++ navigateToUserListFragment() ++ return ++ } else { ++ Toast.makeText(requireContext(), "Wrong Password", Toast.LENGTH_SHORT).show() ++ } ++ } ++ Toast.makeText(requireContext(), "Wrong UserID", Toast.LENGTH_SHORT).show() ++ } ++ ++ private fun saveUserId(userId: String) { ++ with(sharedPreference.edit()) { ++ putString(Constant.USER_ID, userId) ++ apply() ++ } ++ } ++ ++ override fun onDestroyView() { ++ super.onDestroyView() ++ _binding = null ++ } ++} +Index: app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.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/viewmodels/RegistrationViewModel.kt b/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt +--- a/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt (date 1688626837394) +@@ -28,7 +28,7 @@ + val fireBaseUpload = MutableLiveData() + + fun addUserToDatabase(userData: UserData) = viewModelScope.launch { +- val file = Uri.parse(userData.userImage) ++ val file = Uri.parse(userData.userImageURL) + val storageRef = FirebaseStorage.getInstance().reference + val imageRef = storageRef.child("${userData._id}/${file.lastPathSegment}") + +@@ -39,7 +39,7 @@ + } + imageRef.downloadUrl + }.addOnSuccessListener { uri -> +- userData.userImage = uri.toString() ++ userData.userImageURL = uri.toString() + addDataToFirebase(userData) + }.addOnFailureListener { exception -> + +Index: app/src/main/res/navigation/main_nav_graph.xml +IDEA additional info: +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 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/res/navigation/main_nav_graph.xml (date 1688630245819) +@@ -3,7 +3,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/main_nav_graph" +- app:startDestination="@id/userListFragment"> ++ app:startDestination="@id/loginFragment"> + + ++ + + + ++ ++ ++ ++ + +\ No newline at end of file +Index: app/src/main/java/com/example/hposregistration/data/user/UserData.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/user/UserData.kt b/app/src/main/java/com/example/hposregistration/data/user/UserData.kt +--- a/app/src/main/java/com/example/hposregistration/data/user/UserData.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/data/user/UserData.kt (date 1688623336113) +@@ -7,8 +7,8 @@ + data class UserData( + @PrimaryKey + var _id: String = "", +- var AbhaId: String = "", +- var AadharId: String = "", ++ var abhaId: String = "", ++ var aadharId: String = "", + var name: String = "", + var birthYear: String = "", + var gender: String = "", +@@ -26,25 +26,14 @@ + var isUnderMedication: Boolean? = false, + var isUnderTransfusion: Boolean? = false, + var sickleCellHistory: String? = "", +- var userImage: String = "", +- var location: Location? = null, +- var uploadTime: String? = "", +- var testStatus: Boolean? = false, +- var mobileId: String = "", +- var deviceId: String = "", +- var kitSerial: String = "", +- var csvPath: String = "", +- var reportPath: String = "", +- var CenterName: String = "" ++ var userImageURL: String = "", ++ var createdBy: String? = "", ++ var createdAt: String? = "", ++ var registrationCenterName: String? = "", + ){ + enum class Gender { + MALE, + FEMALE, + OTHER + } +- +- data class Location( +- var latitude: Double? = null, +- var longitude: Double? = null +- ) +-} ++} +\ No newline at end of file +Index: app/src/main/java/com/example/hposregistration/data/Constant.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/Constant.kt b/app/src/main/java/com/example/hposregistration/data/Constant.kt +--- a/app/src/main/java/com/example/hposregistration/data/Constant.kt (revision 90fd3a1e122b130aca74ea2fea23176d8c3e770b) ++++ b/app/src/main/java/com/example/hposregistration/data/Constant.kt (date 1688627667109) +@@ -10,12 +10,34 @@ + } + + fun String.mapToGender(): UserData.Gender { +- return if (this.lowercase() == "m"|| this.lowercase() == "male") { ++ return if (this.lowercase() == "m" || this.lowercase() == "male") { + UserData.Gender.MALE +- } else if (this.lowercase() == "f"|| this.lowercase() == "female") { ++ } else if (this.lowercase() == "f" || this.lowercase() == "female") { + UserData.Gender.FEMALE + } else { + UserData.Gender.OTHER + } + } ++ ++ const val USER_ID = "usernameId" ++ ++ val STATICID = listOf( ++ "SMIREG1", ++ "SMIREG2", ++ "SMIREG3", ++ "SMIREG4", ++ "SMIREG5", ++ "SMIREG6", ++ "SMIREG7", ++ "SMIREG8", ++ "SMIREG9", ++ "SMIREG10", ++ "SMIREG11", ++ "SMIREG12", ++ "SMIREG13", ++ "SMIREG14", ++ "SMIREG15" ++ ) ++ ++ const val password = "SMI@12345" + } +\ No newline at end of file +diff --git a/app/src/main/res/drawable/sickle_cell_gov_logo.png b/app/src/main/res/drawable/sickle_cell_gov_logo.png +new file mode 100644 +index 0000000000000000000000000000000000000000..20d09526edaf23b358b7a048bb9669a9aecd5781 +GIT binary patch +literal 12702 +zc$@*AF=5V$P)!I_2qg(g +zfFzXALhro_f&wB+QA9zppt0{lpaFrF)T?(LpW!?H&2Icw{m&qE4P485r^oe=X(oWPnMO{Fi#t3oJ^lKM)~#vJ +z%P-ThB}?e%)2FGZ4Zp?z;D2!qTnpF4wbecT_a;DroWRt6T5Rmc%&`YH-hY4op~;i! +z{NBBE?c_=N8{&tKYj +zKqV*o_>7&ElyrR0$dST%w`yN~^%WgFc#yvR_FG!FZk^M2qehLQe*OAU|Ni}H<;s-> +zCI=I7{rdHrULSoxU(hG?4Sl@RIQ`p=2a&;pnYye=ldH#K>rDvXbhJO9^SL1ihn>VM+moFFie{gQ#<96GPI~~XL!HQO`u44%oCX)f?fB^%jd-v|NWy=-;_`dt@ +zqX!;%facAcC%-v#=#ad>aN&Xz;153dAU*NK69%Yg@4fdPO`A4NUN2a%K(2Z1+BK?C +zqXrEcG)N}mhaY}$+ZXf^eMO(qcZ}gq<9N%)o%EXE?cHU1eEfy4-h9*Tz`(r#0kRh& +z;pow$LMv9Rknium|9&c6x-{K$&ppDipiZ4S(TNi$jB7M&*39j-2M!!a`}gm6`fT;; +z)iPl}{q&QFnco@M4?g&ScI?>U_8MsDJH~*qU`%%!SGSEjmNX?SY}ERmJujczwF|=3 +z7{G78{YF==ToL(-!A_bqN#6JA(?_@(Ek8eBCgP1Z-k^8hc}KXlckkYG=FAxpFT;lq +zr!iy3$a_q{Yp=Z~zlE&V+pDj>N}qrJxl9i3f!{v;^wad@lTV6R+Qt3C}`fpdSI`th({<-I#ljS^n_G~(L?woKa +zWa?8-Jw=NbFP7iE{`%{*Z{I%JuwesDoH$WF!)t)Hd-rYu7UBT19Do9_Z@&3P6r|p8 +zZA{GLk3UY+r%$Ind-e#pP`;R8tg7+j$IEZ@2Co0?v(Mz-t_@?sm@qbs@gHGEawn=n +z)1TSA*{!Sww~ie(^7)u3hP)k3OQ#ojV(#fYbkqhI@j$A-bka +znIfwRtH!)4zW(}ay8G_C>Bk>`bbAeq31h<;G1fZ?v^Uehg*9sYbj>7RUE7>FbEs+4 +zrgYa`cTxNH?P>Jr(X?&bHpWe?i#>^C;;a+Y0^YKgMD3?t^5ane)Y%^ +zI=W~P?PF21i$%ch7ha%U&p)rdX44Ub*Z7Pb8F`K0;(zeJe-v_UaQTNHekkH2vMN +z)W1b5YL=2lHDZcUMZZ8ww%Mty#nXvWJRFo26iT`AiPWk>COzJ@J1w6vi>{c&1g?#H +z;9j_=E3;r?b<+@x)1W~Ev2;HE_~Sz5J1_tiz~t`$8m3=WC=IjBMkgmvo@{t~a4MdC +z_E|BzU}}NmUE6PLiR@z=ddJYAbe_#Uy&XPqfJQ(06m_dni&E|0RNCUffO=3l1~nPL +z8stT(ic%CMtKXE9N$`;Wt>_<2{aUr9&)yzG=TF_(;>A62Z}h>{gvEH^y?*k^C)BD{ +zE9%mvizr$&$a##(+<=8rq*eb?lMyy3%p!NzNTWuLsAtcf;%bA#&$3*Fdk%BZsdMb< +zL7{DDC6%v4%TEmc%(3rLkKDRc+6tg-R7ODd5O7nO$}^y8Oz9RoWhknkNPnL$r2Q^c +zO$@G4#-d#_#mk$9bi0?_&@Qv%v7I^R2X=hWuJV%pl;vu@ghVRE +zfB+P5X0ighJQDx}s1=zq6=gAH3po^NpXuLMlnL;XNzzt;r(ClvUq1=NliE3_2CbYu +z*RW!Km^F*Gv-m(C%?*waOj_*8)TvWPb|~L|`)#_)Ts?pOd?zy&*eK`d-}6YZkHD_& +zYw)&orv_qU$&w|8l7Y6z<`9+}JiU`HTd(KYdcZd5*&RE?i8#nhbYR=IlA1a=D3 +z4WPZKk^&K+R%WWg09RF1O_BZ{-{Civ6yRwJ^b|wXXyU1i0=-&H9KAO92|9Q3l=KOG +zLm$ysy@6?NEx;g9#w%++0n83@~dmsJTpaEWT7% +zQ9VU?jn8ZF_W-?`0=_a+mI-*XY}Z8$`hdP<1c%bQ!$wFyLFhC3?gS>Ag)uQPvOQpK +zm=N>E7qF6D#y_*Qi#_4}EVInJemES6j*b>@5wne1Pfbmg%^@>qqr>nFW!H_B%7aat +zQ34N6=WGpZ8w24XfMhahK-(E;2Q{?%(A}Q?^pGQvp7IH%mwZF$b-xfA;~z>xy@RQV +z#ZRa)Q+);;6H;4oybgXZIywhGNr?GV*s)l2#AlyHg6j06G-m|gwn#02wKLpifKL5>fi`k8LYiu +z%+%2uK&>nR)RL)@#h)4o@P5MebrkrTsBtLZy-eKhDfdPn$_eOJ5if}>+xxX_OII#l +zlD=aMdFn7jA3H=RjDklWeN=Q7n6ALqE;n_EQS_4|95tOb$z<4|aDPD%C-5fqO(1jA +z6(pAC8CI&b;))5_2_~>pOkjii>NC*&9Raj}0bR?qg=rhpcA-dqA4yw7G+G}NL9aSO +zsJ$gns4Y`-2E7@B-h>Gp-@pWXEhYP_DbO<&=oJ;{H#lAEBl_BxK?kQ}46ce)2Of$O +zYtt^qq>SXAyViSs?(D#1w!W)?TWF%|4>99?1e&3p<2vr1Qx=TDuYo@}=kR|6@< +zRE8;;2Ung4nxVk%?Bz=zGe<91K<{Kw_b}}XjiUWb2NZq9v?4H)p7jc)yDh=gMNub9 +z5Vc{@TQPy#0e({hc*uB7{?`=Hp@=omvkcH}3UsZH=xYh)bch$(KvRm;Y%)S_0}K5K +z5DIk0j2U9N8I!`l0fx6cm`1n&POx#PYKVxuJn_C@CSmUZrV-8|&3o2x9AL}BygJ27 +zwO9QH0(J?tTuU>RQ-cHG*;X$aD^P+Z?g$#|XHa}4XpE~2cWC~d7@WmI3K&n(l&J~u+F7mNvG +z)14y#4!I5E0ieSff|%*sx33ce0z(xIPF182XqwqJ)R10DePmYk)&xr88&sbNJH==IE_V`w9X2fa3D8-r)jnFQ)sLdRxNi +zenoh%b9`sT@$H4{HTm95xZRgQ_c1`PE{YkTgWF*tfe9ebwZ5Xy=zDr_7;Rs*R=5>o +zJF3R7V}M=8#*G_GlmK=WvBd#LNpHYVd7#w_1KWzg7%U;z2CoaE1ab>Ait|Ff!TyB1 +zj<$2%I?4zMrDBRxbWx%!N?0Ym?7kvCcHD%kbusdqJ)8j!r3VGX@OB6k(2(KUE&mOQ~V#2AX6YxRQK@=;v9iaQNi187sC-%La +zMGS0zPXS#MEmlLc#4FHW8}g*)OYj&mR=vT1=+>>9vC{}!9Y%!NkN}pz6xg~0ygfp| +z47tp};vz7AYS*qU$7481Fq=WL#X5ATydJ?TAb~}RnY+s>0{1lWu+v0VklPj5ha=+X +zL}W4gk^kyI?_yfR-@nabq%VX05OXj<9?ZZ#Zi%L$Oix;3=qW{bjn4o+xE;XXCmbI_ +z-4y5@O`x}8PH!f_do#B?Sea^~CClJ)tCIr7Sh8b^(ds#$%NQ|MeQOu^V3!m=2sj+R +zNql^~c;My+Oo43yae^R6vnhy!U435!f0wfoz$v>9IOH|U^}AS%Gs02}muc#MF(LxDX#Ac7vTg)>J-Fp!b-1Op0ipJ5tiiKXW) +zaWq`f^Zfofre~O*98kaY)>|}W$Pn3@KI3v$08CW?snra4 +z3?fU-8}n`2v=Q$L3c+0i(Adz2lQ44NK#Jkc#kp{IisJ4@%-xHFG*NPp0oK7j%G~{R +zXf*9+uvhbUi`nLW&aQFx5a!ya7({?Pg28=>=@m;c8f7WY6fg8DzaGh-;XC|hm~efx +zOcW-p9|PZq#Y|5IzMBHQ9dmh02EB=h76&U*c(`!D;Ppa*-r({QYD~r0RNSyoGy5>+ +z^JALy +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 +zR*Z2p%dZRro-E>Ebx+%! +zHposSCCda~WiG$Wiu(lH=U*vtHl7)wH3QyA0j@bef0IZtE6pMSu9W5&{_CnVb+UJ4f^i?D9_nLYc$u +z1ps%aG!qI@nnh`%G|gsVQ5r(nU=mGcd)?J6ETiN&tduGW@H*@=5AhD*r5iz;pgcpP +z=_GU4WpEpV4lcjkwj&)+VD1h~ph^B^Xl7t4%@1bpl4Y>~9-br0QaC)OwlnG64NCo2+RJZkV6|W3t^1k4&b`uvv}650*+5Pad;rVtyBX_ +zlL4>GfZyfeO;dxzZ@BqvIhYh`Pk2Dktnc?0OpyaF~ctqIK%9k7tOd#-<3 +z7Ev1D+pr%Wn?M)YEX4N0<<=eK#0m0!J~Kl%PjAiBw0f{<(4jEY+mVr +z!$N5&1i(E6^d<~=XSQ{R`v!?susK)@XZwM@zO&%;cAeP$?m_u&I?&nL4QXj?I!$5a +z3DGi_!CM^6u04ak8D=4il`T;UXgESFayIgJ8zZXG`iLrQl~kZb?DWiIT`+^~`WgO- +z0yqvQ@>q^vtlwDf1;-13!w*0N7&yEEb9XKSURk;J`sP)F<;LdKQ{C?q91c#LXlz~q +z)C2FnOH(2u0IJYB_Bwwx1xuMXubj4L&urU9D_ggwg*;36$Ju4e(u$TXk+G#M8wMI% +zlRvY~{y@{F#`bKY;)rbJ_|)c3V_%{+1K!YLmkpvW4ElIhP;fZ5C{BkGJyo_mU2fi5 +z6li|amUN<89hx1QLX-U%G=CN^Y$mP@$`TtJ&W#XWGeNPgV+Uz1Ps&QRy%+QE=kfo+ +ziJIh-MAQA^4ZtC@FXYswD_y$Nx!eYn7p`&mRF>gzd>S&~wbY(CbdkI5*_AWr3J&J& +zSz%C?+w-%sgu{W`S(m*O^Y*Os0R#hi;GK79a!82$BQCI^S1-~7^YsIWpV;M}Hg>FW +z08v6MKV4~pOU#P1nbkq2qJ6B=0ixnRgO>>|pQJ +zFU}AtIF!JS<&~Cg>1;-pOaKnIComI0>}k7&&NjID03tOYnDUX7ivtMu!p+&vXV_s} +z+NcrzIBy=U>(PVujv8fr=XwB9;D`+erPE?#X?n3@G&wYsTt$w4#CGENajN8U#AY@P +zD+%Zx%<*3AecE|Y-puK~bT@-O+CNmbNjIplWZ1-TMqn?WuT+&TRjoyN=~Wr<()5{6 +zS(@vcN=yCI1z7BrXp}+A__M`+pa@r`h||&B9k%)YXT=v}ocaL#@`*7Uv_jK0Hxqu19QWKe3FyrqU;Y-zC$Qw(Aj_ +z6$hN>O^3)hP@bEXCP9qrx_2knctaeZ;vf|#)Au%PSm+@#_QY{8TV1%Em#oD>%`HAm +zzSPwgK;xLxm-2uyXvBo?5%Vot_CJotCDMubB-$F1K%Y30Xa$%!#@w7H +zdoBxvtCMLCe?LvYPGYbV=^f8_8s~^*^H4ick_lz;bs;^IF0l=MJhp^5V%RktX!mE) +zrya3nnhqaa73PFDM$7nJ50P)xoDPxQg-KwhepCA=SPuDlc}^EFhe>??=>)OI3k#Eg +zJVXdWE!p6ANN56ra9S|v9jpQLgd>DSOa#0Ck+eQo+vtLWw3p2_#2jMTZwxBN+*^uf +zILgv&?{W-ovJhU+WSZt+dF?1oAKFXOXs;49%Ci`~=n+d({4`Gzdo>5xEIh)N(FJz0 +zPA8TX`HiEuPg$J6%gnKOIvuYS2$Qh;(Ag6w-G)irsyT&8xC;a-O49>@F0o9j&Z5U% +zm|L32L!HaLB}q(7`rA0zTA!6a6|DHVjv +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 +z76MMhe`e4D))nUb!@N>ZQGiK79$x{rPH+32%% +zy6|<4a@Ks!!pd2rK^(%aMiv@YDI7cGsG{Nz9tr|x0V9}mc1-20Km6OP4NP%@lFNX`I@c= +zz5q~94?z+zTy)si;AV(F6#7M9;oKoJ&6TtNV+Gq?Kriq}0t^J43^4=IqKguwLVx<{ +zr!pA0#i)P=k>grhL~m{%Nr1-=`~{CBK!b(SPeqc|ty|Y9^ADoZXpyv;vXxYs&dH;$AodTO0;tFYz +zaLpmN;mBZb2#!tLwr$=1?;U;Uh70h8K2`=>w=kuUHw3W)YX%-FYKvp1alUe)0eVhO +zjuh?EQx}W+AdH(efC)LQmn+3YXJ%%KWd+U!_-H6sf<9rpd8EsU*FWa5GA6(aeQ*-M +z!^4kI7y-%@avW9AkWP**UdVEMhtd~#z8WS2@3F)I29z+AF{~intA#kg;Z=dbLZ)dgS@T28JVrdL%G8p&KBc@EQjo02-5q>P2`A0z?vI +zufd)C9$bxtRU8=LUYJaXHHbK@C`_nprMiFgqruE=LJ=N*2aZIEB7gzW0i}hCXxZ7> +z0uCB<03PY3b2aKo!PLY?8DuXS6dU%V!MWgI>{`NfL-9s)1IMBYG%6zFn)pAgCWsMC +ztT_i&Z~rGAerIkIiuia(B;DfSqyQg)>VU&b#nz|pp+dRBM8lqjE;8^q7A!q;|lXt83U-^h$bDL1eL#Tf#Lg*MKKraD>6LZ+jdrSe9s1cx7ynq-g +z%%1<{f8`<6<~HH~KW6>TH3fbQVy6+Xjw}JBW*{F1Nk~X_DJ-SYUBhqjKloo<1J_cS +z2P4%zV*ckqzF9L(KvQIVAnS$w-~a#s07*qoM6N<$f@Q8gPyhe` + +diff --git a/app/src/main/res/drawable/smi_logo.png b/app/src/main/res/drawable/smi_logo.png +new file mode 100644 +index 0000000000000000000000000000000000000000..e3e2ea6516488655047e6808bdd8e9ba3ac20b3a +GIT binary patch +literal 25267 +zc%0O`_cxs17dDL1MUUttYD5s7QKJhXA&K6iM>jJ@AEHJtL5R^yB!=jn5nc2$qSt5> +zU83{cKHum03*MjJSwsg$-Ql|F0iMqam=O +z%DVx-o}}QZ<`o69IeaArwjj?H>3$&!k8?I5!?h0@0S-CQVoe0{mTFc^^1>+zd{RYA +zKlqls+AsQ+YKhv&>rp|dV3gXyU7kAWCSW@ZYsw-sCNwwYWk&F2ZRS<>y +zj)HZ#cEv_iA3rv&72jdK09~xk;i9k6*q~4s!`Djt{OI|R4Yte+T4kZDmubhUOj;nb +z0_uB$vl+D{M6{u9xNs?VswYF>Z*h;%Axmz-OK;xy#}4d1GE)CgEdt2mTfg$pi)Y81 +zYatuw8nyHf4-flTKd#U_Fl@sh#sWendcstxL*vNJw8>GE6yU(Ckr@PWBU&JIwnk2L +zn&X#&PWWk3vW354J+Su^zl20Ln!Ci+?8m-;FJ};35_ShPwR}m*Ai34k=x1)T2JBbuYaJBF%A2r$8qI~x +zWbnqloIJg+u6uY7%aCYS94uHVefE2Hsi%eVG9oAd1$p}i*WC#Ge(wonMie8=F{lAD +zv$0OS`!8ojo??KI$8e+f#)o>ZRV(ihCP&D7_zc*NP?`X%&eCw_kt;OBM3n5{G6|in +z3qOy)ovsK>52pO(vNRv+kGHXCgXGNjk`ufnoj02@j)*iIQ%v(VG4&-2z9GfdnWsF2 +zTm~l$k0duPfK@x+6E=2^uZ)=x{~$xN+8{Z^;rvfe9qr)rHmn?D8cdrsLJcdQgUNzB +zO7#mCF2(DYSQ?Wl4bvjUZYOrEq%}Z)($A`lqb}iXsnB%7 +znn(w??`!XG;F*|gL{blnN}Vi1p@GTiWp9z3dX!9?V~v$v@YQ;T&1#**A`i-^-bL~j +zX>SUG1yS}dtweTq^<;TXiZ%2Pr4FUw_o|Y=p{!Njse;UmBTnKj6$vk=f~Jf&G{*hz +zUPkm5Al|WZ=#c?yGLJi59(Fn(}q}0X>+i#C!_&BU{g9S&^_y<66zV9ip +zC>6{qI-;*2&>5I0Ko0#-)=D>9DR>~jQU&Z*RmwATRY7BTO&pk*UkFT`Fp&*Uc>H7% +ztZF=DLDF#|T#PlxQYDU#D5g0WErGoF1K5U(gVA7hV~nw^{aCWG11pD!9-u?k0RB4r +z?_*?_-(XRl-IMjph+@C)Bg_L1lRRMA1neUH`)nLDKv>B@X_AG$(qj=UP2%7vx0YjI +z!;ccGxv21lPwt`*n@sxBuDcplY#?GIg+4xey{WDEt|U+T!0K-YD&!V!qD+@V09ilh +zY3+_>3Ysmnd+m?~PXphSua(>EjI&!^2X|n&IfMXv94vPG{qIir4cWB@_HN?yQ&!j0 +z`9>q1j1Pp3VrkC8v8(jxEMTIEJ5fhR4`e2W7p1HMSXoBj>%ta|Q*2Nl@K4SaBQ?J> +zm(0f5XV|;cXe@nb1%lM&*` +z`i}484tejy +zoI{orl~V+wLl~DK{%Ce(3w_4gzC--y$9Zf(k=yBFVX7=|)ht>WU5wH%fNhCFOUnHZ +z#AL}(q8x&qN0KaX9Qf*-$fMtF6|S&cL3MBQgI*P$*G05%?3U)3(R*Zn$O=aNx_@~u +z=;}UGpwy#3U;cRBcQ5WogHx~vhL5_6@X}?;wfo{TgTfYt-R^N7>~2fp&OS>xB_+{q +zAU>~SMOnSy7Z})W>;tP9#}hVA^qkAg>?y?;$HrLmomwni3VljyjkPwN20KQdXZ?z5 +z7k9&r>mlk{y%fV1M0$U$T+H^_>M2z&sBy^A+L>RPHGJJjA=M8q?3)jRFB07-`|1&3 +zKM7-Z5VThAqzlN>C+o +z>m_FiKPtu*9W}pV-na~d77y1BC17r6qzEA+Pi`m!+*(YDFT+PHp4xBIR~V<3zYn^j@%!4te<0Af=@!9MGnz;|we%OyZ6%@L05;x*@g=t1TpMIt+ +zkY3WC*5#dKwfUu@S%reseVkTR2uj4(C>*M^-^mNUK1&XjaCYl +zx5&2+RO~Dox*J!3*O)PFib!DDUp5g){Q`FZ4qhLhq&aVAM&pRxi$MqtS>QvBHy9c| +z$B7e(LdqWiZo$KP@4oes`3?KO$o_!)=nSeS# +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 +zYI{Y`6M2AOAh}~D7QYKEt0C#ic5 +zW}IU&z>ayo@teSZn`AYMuC9d=QOQ%59o&WhiMC?)W2KOz%nJ;z{_rU&RA)?=ljQAA3iw*q)SNaK%r`SS@m70$3JUgR{)aQzVGxRq`s6 +zoVWCS1I<=cKys=6cZqzRP$L#)ygp>}eSB2@5OoPJ`LWdDt`#=) +zYc>3j74ijqZ`(g~cOuwZfzlMhu0hMU>p*iYSlJcbD}Qg4mPl1X_f`@yqQ)bX!pKb- +zZvdTBwm*5jc_tupq8AH$52`8NbPEM|N=*?EF5(<0pnE6PIu2jXh$xaZz4VuHSh%s7 +z_mT(^0%vctcf-@(06J5bHw1!D;S~y`J)k+S3V##^X9p?RAjd^yd1*iH@f!HY!=f|< +zfDrSNYE*029VbAZskm%XS@#for*;R=w4Bw($xdXS^RVl2fUdJGE2qdk;NaFGQfUW2 +ze5b>{>Bd%Gd}~3>h}!7gyw_qOl6ARVnlT)+(6h3Vi{ay#98-+X-(?&I#T(kc>I#c6 +zx2_pm}%evqWp2uVU{g2KV{uf4P~ud6B#a +zgpn4=BcJopWcNymn#H78BH&e0JQQ; +z5~pP%8lA-+D{%d!1p^cWkaYW?i;FDbzNkiV4c4$%BvG%#)Uu|<`p1+ +zAT+NYVhCC7y^XD-BAG|W1+5ytYRMKBsRs4E$bDKhT94T=jJG9N4@rOpFWF&Zgx#q! +zU06pw*R=yOvW_caoD}YP{{ZvqHMfO2Tb04WJL3r(aW2QemNAV+uQZI*s|)mt7SK^^ +zf@lK8E-)_#%aEC7*{Rq6YP7+%hr^NoY9_sA=6FjvjWKxiNt(!??$WW*$95{Q6BL&T +zb7*SJ0~+?3pJte!bZ$g>&B)(WDNBC`c1*2U#|{s}^!NRV<}esO>hBp*GVdGuHnUtG +zCg##LUd|7fg1Q}8KI|W1s4GU0*SPxnv#WD(wCZtZYxs1W#0{j9a>s_11EmWx!;p1+ +zp@aq*fyMHl#(CH_CfmR8CtnxJF??e)Vk5RK(q<=klt%V3iTNvS +zQ77jQOJ1&fmEBKXNK2r^0m!acMaOjDTpfzDpvE!h=g(7f06Rihl-;&oVPk%!C!Y(l +zI+=sYba@+G-k(7F?#bIBAE31O8P6iV5f&vAr_o;RMfdPs$bCu+#DKX{ec7dh+&7ES +zudp9^UbQ!@0#tA4wgCGEV7%Bps`yx9oS#9*j(Z~?%UT|?A*M1<0 +z0i|{YMIt6YSg?F8U=;aXpKB2{KFc+rL;zBlk;(%+8TIwVcrb8* +zhV~O0G>g~bSYli|Zns>S27Y`C9D~{+N75|aWC0d?V3*1uGl})jKrVrT&-ChGq0R|g +zmn?_e0kSFe8CMEe=r_YzhW$*KZLHWNXA +zx={*=*@<*&`TAyr!4 +zqhO&b*}&Mj?L(R+O>7L)Oho%Lou*!K#tkK3y<+`;$sX5w_p|&u{NRkyq{%2zuG_O- +z9m*7rgp&cf_#?L#yK`t-9~>u0^@kQX~%c7VO&izr7*P +zM)h=+RmV^DDCyCmMr?mpc7;jl06{0D_)C3$`e)O3tQ;l@0?3%7MS_*@M;44}zp{57 +zPmCh|D`uLce(`7g0?5%$!FBl;K;P|PmD(KMGv)XF!DtYMk9;J&+_a2W#HJe9+)p5= +zQkdEzU-HT<^GhbNOZ5VSE&m<=hQ3<3bIpYPNGKKKe-MD7rU5KMM8s-E))EC%LprN7 +zTxWE3DWjBa$n10wadaigLD8l9+rt5gt%a+l{9IsQZJTv%KZXs#ilHyeJ^%3Ma(co! +zEQ87V3gm+!_G2^5qfp`cNg@>Ie`D7OEzW87Lt$#HupkSi+EXhm6=U%3nxy;gU1Q%_ +z!yCr)H_lFgqH}@;IpODQLQ9uvrJ~!9gI7PVks7#n?d)KLD+%WN*q5)G92&?Iu7{y% +zP|g3>3qWy)N8XVYnB4Tx7J8lVugIb!)I@EOr8(@1@_(Ht4j{!a^v#`54oE#B +zC(Tf^foe_106=QKvB((&7j~Q9ch|JzH86?LIJzye>mRTa +zW!>@>3HJ?Q!^XJFuO+}n80Y)4K@i85rp3DMBX(f%IkAyK@X=WO^87}rDAOMY|Fb{< +z$r~>Htr{;CDKTGS!Nz2eT^SwARiwbe#e`b;H2-$P%?U3@!TIgCoVfAXl*c3*ie;D% +z)!zPw<^YC!Iu9?+AnJw^)(e9LCqHjJq8cg`cT<^>?GfhsanVbsfSPa4n3ySE2es7= +zeW|#~83w|5fiw{Le%Um#b)M;(*fXT#WDYMC^ZwVZSo}4EvF3d#!Ng +z10Z=OaJGNgo|!$vqC(ZIWtNmG!_?~=>$7j^xua-S=)R3*FSyWd<>=R!m?SonR)t +z`IdICqT51>wT2S}25N>9$s3dDaofHReMt|U8uU2S1rBGXpRSE)0MIqlkWjIyd{%?# +z8^hvG^Rjv}clLc_KxFT@xK6==%zJIjdbY{86CPbq;+`1Vi;?fyB{iEVav9Vr=PVt-H~+5V$box0eJAxzGIq)bn<}#PEtuWJej&f!1UrX(0jVyqQbq(}pBdh_4=F)inc%+(8txF7X87sjiOAkOI$wdo`QO7b<$;2NGW8c +z9r6B4Hgfl>sT3HwnbagUwDO~gcrHFj0{b!Ylz{a^a*dA$@;9jh4*l;QlAlm6FT3?> +z`%>l3)Hj=BQjjqP5FEUO(&t#&Dg7p^T$|$}kL|ZmtZw6-Ww-;w`wTog#5QS~fxQmw +z8+RZDmu`5gFujrmz+=8~80BfCLM(Obe52wY#~iIySaI7O|4A_C+cEsd+y(=XtwRdz +zr_|MYG}y{{PIzWqQEa434Swjn^clmLxZ;6!u6060{fROH7AuswQg6Pff^{?e(Wu=g +z#1dBkE+mn81mzvZ7p&F!kb`pnVD8yPRDVAD5vKjq-P8{GglEVxB=6I>BE8Izk4VW) +z=YcA)BdF#K-or +zxxDpRu8`hAx8rN=3h} +zgLa-USf2-{ttV;Pk<62zj{p>g2|wC+(sKGx>kXSNE3I@~CQND4-#Z8P{ucl()suOnu-#)S5y7?7j$9*Cuv)G} +z0pouOp+H~n)wh(=c7_u+iYaW!rmq?7H-o$}VBW)Kxc7-$4D$`c^hyK@k}-BVv7_?O +zZ*b4m?7oE92shYQuPt<+D(~XVt|~neNIOxK`vJ(cf25*j1eb#t#@7b`js0(=v4|OE +zrSIwUrMCBi?Nj|(cd9=6dpw9HT?Hgi-{FkUiB-#Gke +zczJ%yMvpoW`c2LEVo`Yan8%9Qva4ey8VoU0g!{43S!*LOcFx3 +zMryHfi+Y85Fy-!h0IJZj{R#^f%OY%4S;V6sLtYZv-VnM^8E;f4;MZ6Ea-Hk2iRLxz +z`Lz!>q<_`bWCnQo0g#Vi16uTbT=5-E>FDwDOCgg0nR?&D@~#6i&n|@o3%c@@Z2NSW +z(rd91YfX@uv99i6#K)_JrHktW_U-FoCMkRi^QX1mf&ubYtm9O{(d&wo0CCX(MvgZh +zTic8kFI|m#U%x|+D|IiQa)cCeXhlUB_e_{EOw##&31(9UEMvxZOmZxHj+xz`%FqcI +zSfsZs;n`)e-||}q82KDgiGRn${?*fX&+Y`m#_CoA!GhwWS*Z3L<3>4J+C@WOhIa&0 +zn`FA>eD4(Fr(m?CwDj_}ellxJud!OQK$+89G%&ZN+Bkj_SKiEan(zAY8}$YljY!`r +z{JlnGyeI40(}5v*{i_?S$OI6L72ff`_tPhGr6{`290Jv5G8^w-(l-2{+%y>l^Q*A; +z1uuYaZqlfMLpj~nxk=nT&SFLkJpa1lv1BJQQ5$uMcJyAvi>I%D80e;*t;a5Cs-aMUJYx{8l1KDT#6x3{{f%U7T88$N5@r@KejZL$%gD0U)1 +zT%#1vd=(Py+?VM{IgZ?JZ-V0yU^DL}qMLNbcB9s!drW$q&8Y@2_OSJe#-vV^(fQ8Z3Msa(Yow*SEt>F)`LqV6L&m_hylBr_ +zVI-L8fP6v6u69&~D9Ipf)DRaLXX8i)2X@$=;$kyqoW591a +z@15d&vO~TMQ%8YrJy>%4dXbwj#J={M5o|}2ZZiV?+Tq>$oDEG+~(D3johGfi}X_F&1b*nkOq~uC6 +zbM4=Im`=!L((W;3DW{si9eYFGS3Ow1XofLG`U>|L{$x#aB@?QM*k)a4$A`ZdY> +z03c1Q!20CkZre+dGiSu}C2V+c1V9+jr_a*$*mmVdiGE$_xV^fesZWBv2V$1*+;M6x +zr^(znSlQgxYnu=wU$b|+Z{GqZt!ov;p(i%->)g^TddCI%lFq=V7yJ}Zk(_H5n{o6i +zg=g1M!%Ct<7RTh*|7*6vvqYz1FdgzcFFlH@&|#PduYC&YB~?7xPeg>u1dY{iwb3(} +zE=t&5jwe6ZnM>41w`h&zDi@KN*5!e5EVR(7kAjQe4Izhbo7G~zhPA&0V#K3&vs2z< +zit)v5h&M8Hr_|Fc;y}z62(jVxO`7^{H)qbQEotzxT!3`?nuqs^PP5alOgHj|XTHyYowLct5@AV% +zjoGe0bus1&BJ`CFdptXUXrf$L)Gj+UyI1b((ve|f1IVh_leN@__Ynn=cpKE-K5VES +zW5m$f0nUAg3peBi67aEgu)#bckojm>4q^QW{NKfcB7&`?AJ!gKmyd6>W(v_cj@T8}yuR!e_A|Rl~UtaI&DrOI5k0aaT_}?8~nMra? +z)_*>=-IMA3Co}&kwZt5D5K=5+h+ +zm0P`h@cJiLN$_-^%;ui#-8q(}Ey9-VzfgE>H?AnQPBm_y8{0XEA$Y3}k}K1BE=MeD +z@^=xQsqxw5wlTn9Zo$0i31bz3AXoB$-akJ#slLIfgGr1Y$q>51w^eObN}&gAbth{* +zw`6oaUAJ2sSOn9Cdt()2VastUB|@#o6Xzu@-YJ3P7RtW$865mkWth`w{iXgd7y0f`ywJ-IKHr&9{BPDh +z$%LGp?+B60>7%*RnpLsWjeP$%8P9qp(9P_A?d`2MQO*3b35ZD9&QpMnZXSKe2y|im +z+?Ks|kLTZdPVVdZMb^=lrYb_czU^lkMaPB7Eim;7zg~-LTw`+suuuTS +zp6?4jFDY}CzLxyk`=MA>ayKwycLAk(JD +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 +zDTH{3f40w79&j=r9de>yVZV-THjkz|X=% +z$jP5d|IW4e?*+pU72{Z7ExEsE_#I)OFZCVnyTllU)z)O#8;~sFHBWOB$$RELZIdX- +z0{B@$%5CAvxC{X|b!S*$zvF7LM2=R$mI`~b)sxlJZtQj%Tq_k}pJE>-){iRES70`1 +z@7(hW>1>r+(CEc_Skc#SiB07o?(JQNAN};$b@NVr>drf_Z{YA(;O%XdEM4G{cF`bg +z*_8g2>lC@~s%}ZoBC|40{VTEJ>Tw%!GmdQZhA;~yDE_@41HF7WoS%`+yll8d^%gd2 +z@Eg8j7_PU(OF6`Z?(9@wOgSG8pIb&QACkq8Wm)@dKpwkWfwWXr{(t)^=#$3cOxNEm +zE;JBzznt{DypTzLK2{{~Jmb%RPHofYTEp)vA;md(^!-{Y{mT9N)K4Ft_^Ouozb+G+ +z_{I@=ibIE6h$g`0drv?5r4;-!}eBoH!mhFmln8xwJ}9AY8IvD=wR@oA}p`_;JUJ-n-`lzVnmn5mAF@T`#V +z@y{6}0TT)wS-D_zroS{(tSeDMNvd4b_WiFeL2n&IVzY`LBDeFQU(0FAzLxyIUVt`p +z6MYxIyQHdoneV*$Z{j2zF00p_r*gy9N46U +zmh*YN?O6kSf(+&Oft_jlK)e#dlrW*3*@?Z`CdK4s+vR)qV)fG}7O( +z(uFCmQQMB27Wu?bClodLT|M^;Y=Q+Glv9$uV|77CC{Jd2P4)UQUKZ$kDlt4{|9(&p +z?jKUGgccVCJ7L=#nhX-;pWV3Lw +zM~htn>!4@ugvz!MFu#l#0=Ob5l$AHvIY5%XAz%Bs+kxs4&8Ni-Nncz4&vyI-=vT~M&uh-WP!%7lW~Ys)4)ZAwIK%v +zRB>f_nxv|O`c)JyJ@%KM&^q?5A?V_WRZPe4?IG?@^~~t`BF9<@8xi9MFkKA^_2SPM +zYh0TU(R2gcQ%0P!)aQY1Z3JHD1Mh=2B?v!1(n?W!Y4*;OqNU@QO>0SuC2xnTLY750 +zb!UKxHoD7KCRy{ROH0&@;_lT{kIFL1=S +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 +zW0>2U>9r7xGlsNJESk1QeAw;5E^K78~F +z>G+D#NAP8E>zPg}Vdd|~0P<`u8!KdW=7Y^s)mOfur&E#Rcj`?u#SqkH1ri$Hn{ILrq@rgzjU-3}anEmHSF1dT{CRqnet8kCC*XFoX(Gl>*l;52 +zaL(+NNtck_(t^y4IDiOpWGkw{<3ECy4PdZUv)GBZmnhFSia{oT%KiT~vGj$Zys6cmH>N`0Nb>Sj3!M6$gk1#)nk#5;<2@LD;Y3%m^K8RO5vStfv6-2y8?o2*XHMF^0Q{05hSDFF*ZLSnq_zrc +z`J7r^Omm8U$lB@Gfo&;~qw{7cea|q%teO}hTi5akV3LKa@YghSz?OREO5AD6#o +zc}pRl_e?}(D9IhZC+J=k;<`4n&I`x5BOUuw;e@dH=Gz}c?!tr5n_SdtU5l@EfJ3N| +z=%XZrZkWFH#c~q7N=w*J@!L!L9j;%6e9a*2I1OZM*_DbgfVu;S0sms9z&O34Z1LiD +zZkiw`y|5qb8=6F>sjgKP7>t>Ac#WFEB+8T3m?%rPsZ7HDrK6VgN*O89=h^bF;JF4u +zZFL}+Tx5}fM}lkyeU)fK#aIq%`fEAb)>6?bZ@3=yTGd{%bTSvcf|wr}rrg +zE>M+`>xCJ2hl;;ESdI;_)9wGP<&92|iVC6#S&VUU!!HGaSj`p^6?Cjkf0kqm@9K$d +zU!{7*uR8fcv(aowj2{K*Ehm>Fba3Sz>K~+u>CsHS!1%TL$n2Ee(EiA+3-u|>yPszz +zx?w;R4%YFBFh_AciBr)o0ih{0FszthD3C_jVO4_rJQ_;XU@-o^wNqUhG& +z(f!WVsg*v3<1Xam1x4Z!A{2h8CxHaRnVXCrPy;qjiG42x!z#tnx?FjPY+fc1g@m~I +z`FC?^D7KP}%`AVJuuwiQ_xu1d8s_V}3hLa>MoA}qZju;!)A`xQ&(Dqc`g9VoeaZMw +z)7FZQlIZdj2QPUUS6|XCh&}7_b>FN6=>{$NQgt9g2j>JWe2-s2Tf#zQAH`Bs$r^>D +z8uKubJ>y3;&ab2AD722YXh%N>-Fa-LDNp7lf>9Ua%eGI%`; +z0_Ya6b=DVt35p*K0uB_!4M$YOf2wT=IyzfN`t}nBCdUAx@Miy0rvTzEc*>GL?ASFT;1aXSvHv8}?p6EcE4qw@1%%pK0T1Cxmfo$;X+h?yGnaV}0`3 +z-n<=HuDdF7w7GrNUFNE?q}pPH@QFrS%U2fz1A|2ek*c=S8q?C_O9DV=UvRQ~;vA2V +z9yIg?X3uM;2?iEGLuxQ{&Le$?pI6F$eix}|)r-Y(x*x0a`K3M=6o +z6pq9Y(doT;a`IVpiHp3BOES_qzkB%62fX8y#El;rZ#|l2J%uk1pOhY4rR|aoS6Kh$ +z2P$I-*`U9ga@?t@ar)Da9t45PzRYS4hGi!=$jZ?(I4-S*A!o6ljTzBi`OVZ`DUN?mM{9X +zbrwcc7>@jn^;90&U0jej@9YHyoi>rr0FG{MZVr~NW3%5~Qq|{OZ`KOVH3MD}Z@4RdrPAlq@6u553jqP5=M^ + 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 a911475..a53b67e 100644 --- a/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt +++ b/app/src/main/java/com/example/hposregistration/adapters/UserListOfflineAdapter.kt @@ -43,7 +43,7 @@ class UserListOfflineAdapter(private val view: View) : RecyclerView.Adapter, private holder.binding.apply { userName.text = model.name userId.text = model._id - Glide.with(view).load(model.userImage).into(userImage) + Glide.with(view).load(model.userImageURL).into(userImage) } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/hposregistration/dao/Converters.kt b/app/src/main/java/com/example/hposregistration/dao/Converters.kt deleted file mode 100644 index 2f3b5d7..0000000 --- a/app/src/main/java/com/example/hposregistration/dao/Converters.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.hposregistration.dao - -import androidx.room.TypeConverter -import com.example.hposregistration.data.user.UserData -import com.google.gson.Gson - -class Converters { - private val gson = Gson() - - @TypeConverter - fun fromString(value: String?): UserData.Location? { - return if (value != null) { - gson.fromJson(value, UserData.Location::class.java) - } else { - null - } - } - - @TypeConverter - fun toString(location: UserData.Location?): String? { - return if (location != null) { - gson.toJson(location) - } else { - null - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt b/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt index 10264d1..cdcf480 100644 --- a/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt +++ b/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt @@ -6,7 +6,6 @@ import androidx.room.TypeConverters import com.example.hposregistration.data.user.UserData @Database(entities = [UserData::class], version = 1, exportSchema = false) -@TypeConverters(Converters::class) abstract class MyDatabase : RoomDatabase() { abstract fun userDao(): UserDao } \ No newline at end of file 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 7270bf6..8462f60 100644 --- a/app/src/main/java/com/example/hposregistration/data/Constant.kt +++ b/app/src/main/java/com/example/hposregistration/data/Constant.kt @@ -10,12 +10,34 @@ object Constant { } fun String.mapToGender(): UserData.Gender { - return if (this.lowercase() == "m"|| this.lowercase() == "male") { + return if (this.lowercase() == "m" || this.lowercase() == "male") { UserData.Gender.MALE - } else if (this.lowercase() == "f"|| this.lowercase() == "female") { + } else if (this.lowercase() == "f" || this.lowercase() == "female") { UserData.Gender.FEMALE } else { UserData.Gender.OTHER } } + + const val USER_ID = "usernameId" + + val STATICID = listOf( + "SMIREG1", + "SMIREG2", + "SMIREG3", + "SMIREG4", + "SMIREG5", + "SMIREG6", + "SMIREG7", + "SMIREG8", + "SMIREG9", + "SMIREG10", + "SMIREG11", + "SMIREG12", + "SMIREG13", + "SMIREG14", + "SMIREG15" + ) + + const val password = "SMI@12345" } \ No newline at end of file diff --git a/app/src/main/java/com/example/hposregistration/data/user/UserData.kt b/app/src/main/java/com/example/hposregistration/data/user/UserData.kt index 525717c..a7c07bf 100644 --- a/app/src/main/java/com/example/hposregistration/data/user/UserData.kt +++ b/app/src/main/java/com/example/hposregistration/data/user/UserData.kt @@ -7,8 +7,8 @@ import androidx.room.PrimaryKey data class UserData( @PrimaryKey var _id: String = "", - var AbhaId: String = "", - var AadharId: String = "", + var abhaId: String = "", + var aadharId: String = "", var name: String = "", var birthYear: String = "", var gender: String = "", @@ -26,25 +26,14 @@ data class UserData( var isUnderMedication: Boolean? = false, var isUnderTransfusion: Boolean? = false, var sickleCellHistory: String? = "", - var userImage: String = "", - var location: Location? = null, - var uploadTime: String? = "", - var testStatus: Boolean? = false, - var mobileId: String = "", - var deviceId: String = "", - var kitSerial: String = "", - var csvPath: String = "", - var reportPath: String = "", - var CenterName: String = "" + var userImageURL: String = "", + var createdBy: String? = "", + var createdAt: String? = "", + var registrationCenterName: String? = "", ){ enum class Gender { MALE, FEMALE, OTHER } - - data class Location( - var latitude: Double? = null, - var longitude: Double? = null - ) -} +} \ No newline at end of file diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt new file mode 100644 index 0000000..2891ca7 --- /dev/null +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/LoginFragment.kt @@ -0,0 +1,92 @@ +package com.example.hposregistration.ui.fragments + +import android.content.Context +import android.content.SharedPreferences +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import com.example.hposregistration.data.Constant +import `in`.sminnovations.hposregistration.R +import `in`.sminnovations.hposregistration.databinding.FragmentLoginBinding + +class LoginFragment : Fragment() { + + private var _binding: FragmentLoginBinding? = null + private val binding get() = _binding!! + private lateinit var sharedPreference: SharedPreferences + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentLoginBinding.inflate(inflater, container, false) + sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + init() + } + + private fun init() { + if (isUserLoggedIn()) { + navigateToUserListFragment() + return + } + + binding.btnLogin.setOnClickListener { + val loginId = binding.loginId.text.toString() + val password = binding.password.text.toString() + + if (loginId.isNotBlank() && password.isNotBlank()) { + performLogin(loginId, password) + } else { + if (loginId.isBlank()) { + binding.loginId.error = "Please enter a proper Login ID" + } + if (password.isBlank()) { + binding.password.error = "Please enter a proper password" + } + } + } + } + + private fun isUserLoggedIn(): Boolean { + return sharedPreference.getString(Constant.USER_ID, "")?.isNotBlank() == true + } + + private fun navigateToUserListFragment() { + findNavController().navigate(R.id.action_loginFragment_to_userListFragment) + } + + private fun performLogin(loginId: String, password: String) { + val matchingId = Constant.STATICID.firstOrNull { it == loginId } + if (matchingId != null) { + if (password == Constant.password) { + saveUserId(loginId) + navigateToUserListFragment() + return + } else { + Toast.makeText(requireContext(), "Wrong Password", Toast.LENGTH_SHORT).show() + } + } + Toast.makeText(requireContext(), "Wrong UserID", Toast.LENGTH_SHORT).show() + } + + private fun saveUserId(userId: String) { + with(sharedPreference.edit()) { + putString(Constant.USER_ID, userId) + apply() + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} 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 3f278d0..17b2c0e 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 @@ -65,26 +65,26 @@ class AbhaRegistrationFragment : BaseFragment() { viewModel.userData.observe(viewLifecycleOwner) { user -> userData = user with(binding) { - aadharID.setText(user.AadharId) - etAbhaId.setText(user.AbhaId) + aadharID.setText(user.aadharId) + etAbhaId.setText(user.abhaId) etName.setText(user.name) - centerName.setText(user.CenterName) + centerName.setText(user.registrationCenterName) } } binding.btnProceed.setOnClickListener { - val abhaId = binding.etAbhaId.text.toString() + val abhaIdInput = binding.etAbhaId.text.toString() val userName = binding.etName.text.toString() - val aadharId = binding.aadharID.text.toString() + val aadharIdInput = binding.aadharID.text.toString() val centerName = binding.centerName.text.toString() - if (validateInputs(abhaId, aadharId, userName, centerName)) { + if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) { userData.apply { name = userName - AadharId = aadharId - AbhaId = abhaId - CenterName = centerName + aadharId = aadharIdInput + abhaId = abhaIdInput + registrationCenterName = centerName _id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3).uppercase() } @@ -100,7 +100,7 @@ class AbhaRegistrationFragment : BaseFragment() { val obj = JSONObject(contents) userData.apply { - AbhaId = obj.getString("hidn").replace("-", "") + abhaId = obj.getString("hidn").replace("-", "") name = obj.getString("name") birthYear = obj.getString("dob").fetchYOBFromDOB().toString() gender = obj.getString("gender").mapToGender().toString() @@ -111,7 +111,7 @@ class AbhaRegistrationFragment : BaseFragment() { house = obj.getString("address") } - if (userData.AbhaId.isNotEmpty()) { + if (userData.abhaId.isNotEmpty()) { saveUserDataAsPerAbhaId() } else { saveUserDataAsPerAadharId() @@ -144,7 +144,7 @@ class AbhaRegistrationFragment : BaseFragment() { with(binding) { tvScanMessage.visibility = View.VISIBLE tvScanMessage.text = "You have scanned the Abha ID, need to enter Aadhar ID manually" - etAbhaId.setText(userData.AbhaId) + etAbhaId.setText(userData.abhaId) etName.setText(userData.name) } Toast.makeText( diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt index 5f4bea2..fea188f 100644 --- a/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt +++ b/app/src/main/java/com/example/hposregistration/ui/fragments/registration/CaptureUserImageFragment.kt @@ -70,8 +70,8 @@ class CaptureUserImageFragment : Fragment() { viewModel.getUserByID(args.userId) viewModel.userData.observe(viewLifecycleOwner) { user -> userData = user - if (userData.userImage.isNotEmpty()) { - binding.userImage.loadImageFromUri(Uri.parse(user.userImage)) + if (userData.userImageURL.isNotEmpty()) { + binding.userImage.loadImageFromUri(Uri.parse(user.userImageURL)) binding.btnSubmit.isEnabled = true binding.btnSubmit.setOnClickListener { navigate() @@ -122,7 +122,7 @@ class CaptureUserImageFragment : Fragment() { } private fun submitImage(uri: Uri) { - userData.userImage = uri.toString() + userData.userImageURL = uri.toString() viewModel.insert(userData) navigate() } 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 e14a584..b4ccd09 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 @@ -1,5 +1,7 @@ package com.example.hposregistration.ui.fragments.registration +import android.content.Context +import android.content.SharedPreferences import android.net.Uri import android.os.Bundle import android.view.LayoutInflater @@ -10,18 +12,23 @@ import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.bumptech.glide.Glide +import com.example.hposregistration.data.Constant import com.example.hposregistration.data.user.UserData import com.example.hposregistration.ui.fragments.BaseFragment import com.example.hposregistration.ui.viewmodels.RegistrationViewModel import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hposregistration.R import `in`.sminnovations.hposregistration.databinding.FragmentReviewDetailsRegistrationBinding +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale @AndroidEntryPoint class ReviewDetailsRegistrationFragment : BaseFragment() { private var _binding: FragmentReviewDetailsRegistrationBinding? = null private val binding get() = _binding!! + private lateinit var sharedPreference: SharedPreferences private val viewModel by viewModels() private val args: ReviewDetailsRegistrationFragmentArgs by navArgs() @@ -32,6 +39,8 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentReviewDetailsRegistrationBinding.inflate(inflater, container, false) + sharedPreference = + requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) return binding.root } @@ -75,26 +84,33 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { viewModel.fireBaseUpload.observe(viewLifecycleOwner) { if (it == "Success") { - Toast.makeText(requireContext(), "Registration Done Successfully", Toast.LENGTH_SHORT) - .show() + Toast.makeText( + requireContext(), + "Registration Done Successfully", + Toast.LENGTH_SHORT + ).show() navigateToUserListFragment() } } } private fun addDataToFirebase() { + userData.createdAt = SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", Locale.getDefault() + ).format(Calendar.getInstance().time) + userData.createdBy = sharedPreference.getString(Constant.USER_ID, "") viewModel.addUserToDatabase(userData) viewModel.deleteById(args.userId) } private fun setUserData(userData: UserData) { with(binding) { - Glide.with(requireActivity()).load(Uri.parse(userData.userImage)).into(userImage) + Glide.with(requireActivity()).load(Uri.parse(userData.userImageURL)).into(userImage) binding.tvUserID.text = requireContext().getString(R.string.user_id, userData._id) binding.tvAbhaId.text = - requireContext().getString(R.string.abha_number, userData.AbhaId) + requireContext().getString(R.string.abha_number, userData.abhaId) binding.tvAadharId.text = - requireContext().getString(R.string.aadhar_number_details, userData.AadharId) + requireContext().getString(R.string.aadhar_number_details, userData.aadharId) binding.tvUserName.text = requireContext().getString(R.string.user_name, userData.name) binding.tvBirthYear.text = requireContext().getString(R.string.birth_year_details, userData.birthYear) @@ -121,7 +137,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { binding.tvPincode.text = requireContext().getString(R.string.pincode_details, userData.pinCode) binding.centerName.text = - requireContext().getString(R.string.centre_name, userData.CenterName) + requireContext().getString(R.string.centre_name, userData.registrationCenterName) if (userData.isUnderMedication!!) { binding.tvIsUnderMedication.text = requireContext().getString( R.string.is_patient_under_any_medication_details, "Yes" @@ -135,7 +151,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { binding.tvIsUnderTransfusion.text = requireContext().getString( R.string.is_patient_undergoing_any_blood_transfusion_details, "Yes" ) - }else{ + } else { binding.tvIsUnderTransfusion.text = requireContext().getString( R.string.is_patient_undergoing_any_blood_transfusion_details, "No" ) @@ -145,7 +161,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() { R.string.sickle_cell_family_history, "No" ) - }else{ + } else { binding.tvSickleCellFamilyHistory.text = requireContext().getString( R.string.sickle_cell_family_history, userData.sickleCellHistory ) diff --git a/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt b/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt index 19b5f0a..930e4ca 100644 --- a/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt +++ b/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt @@ -28,7 +28,7 @@ class RegistrationViewModel @Inject constructor( val fireBaseUpload = MutableLiveData() fun addUserToDatabase(userData: UserData) = viewModelScope.launch { - val file = Uri.parse(userData.userImage) + val file = Uri.parse(userData.userImageURL) val storageRef = FirebaseStorage.getInstance().reference val imageRef = storageRef.child("${userData._id}/${file.lastPathSegment}") @@ -39,7 +39,7 @@ class RegistrationViewModel @Inject constructor( } imageRef.downloadUrl }.addOnSuccessListener { uri -> - userData.userImage = uri.toString() + userData.userImageURL = uri.toString() addDataToFirebase(userData) }.addOnFailureListener { exception -> diff --git a/app/src/main/res/drawable/sickle_cell_gov_logo.png b/app/src/main/res/drawable/sickle_cell_gov_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..20d09526edaf23b358b7a048bb9669a9aecd5781 GIT binary patch literal 12702 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/smi_logo.png b/app/src/main/res/drawable/smi_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e2ea6516488655047e6808bdd8e9ba3ac20b3a GIT binary patch literal 25267 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 H>B?DX1f*_KLfrt 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_abha_registration.xml b/app/src/main/res/layout/fragment_abha_registration.xml index c9794a2..f1dfadf 100644 --- a/app/src/main/res/layout/fragment_abha_registration.xml +++ b/app/src/main/res/layout/fragment_abha_registration.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.fragments.registration.AbhaRegistrationFragment"> + tools:context="com.example.hposregistration.ui.fragments.registration.AbhaRegistrationFragment"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml index 221b181..bf1a48b 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_nav_graph" - app:startDestination="@id/userListFragment"> + app:startDestination="@id/loginFragment"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d3119c7..edd84f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,6 +78,9 @@ Is Any Sickle cell History: %1$s Sickle cell Family History: %1$s Center Name + Login ID + Password + Login