diff --git a/app/src/main/java/com/theayushyadav11/MessEase/ui/NavigationDrawers/Fragments/AdminFragment.kt b/app/src/main/java/com/theayushyadav11/MessEase/ui/NavigationDrawers/Fragments/AdminFragment.kt index 0f700db..9fb31ab 100644 --- a/app/src/main/java/com/theayushyadav11/MessEase/ui/NavigationDrawers/Fragments/AdminFragment.kt +++ b/app/src/main/java/com/theayushyadav11/MessEase/ui/NavigationDrawers/Fragments/AdminFragment.kt @@ -13,60 +13,95 @@ import com.theayushyadav11.MessEase.utils.Constants.Companion.DESIGNATION import com.theayushyadav11.MessEase.utils.Mess class AdminFragment : Fragment() { - private lateinit var binding: FragmentAdminBinding - private lateinit var mess: Mess + private var _binding: FragmentAdminBinding? = null + private val binding get() = _binding!! + + private lateinit var mess: Mess private val viewModel: AdminViewModel by viewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - binding = FragmentAdminBinding.inflate(layoutInflater, container, false) + _binding = FragmentAdminBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) initialise() listeners() } + private fun initialise() { + mess = Mess(requireContext()) + setAdapter() + } + private fun listeners() { binding.btnAdd.setOnClickListener { - add() + validateAndAdd() } } - private fun initialise() { - mess = Mess(requireContext()) - setAdapter() - } + private fun validateAndAdd() { + val email = binding.etEmail.text.toString().trim() + val designation = binding.spinnerAutoComplete.text.toString().trim() + when { + email.isEmpty() -> { + binding.tilEmail.error = "Email required" + } - fun add() { - if (binding.etEmail.text.toString().isNotEmpty()) { - mess.addPb("Adding to Mess Committee") - viewModel.addToMessCommittee( - binding.etEmail.text.toString(), - binding.spinnerAutoComplete.text.toString() - ) - { - mess.pbDismiss() - mess.toast(it) + !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() -> { + binding.tilEmail.error = "Invalid email" } - } else { - mess.toast("Please enter email") + + designation.isEmpty() -> { + binding.tilspin.error = "Select designation" + } + + else -> { + binding.tilEmail.error = null + binding.tilspin.error = null + add(email, designation) + } + } + } + + private fun add(email: String, designation: String) { + // Disable button to avoid spam clicking + binding.btnAdd.isEnabled = false + binding.btnAdd.text = "Adding..." + + mess.addPb("Adding to Mess Committee") + + viewModel.addToMessCommittee(email, designation) { + mess.pbDismiss() + + binding.btnAdd.isEnabled = true + binding.btnAdd.text = "Add to Committee" + + mess.toast(it) + + // Clear fields after success + binding.etEmail.text?.clear() + binding.spinnerAutoComplete.text?.clear() } } private fun setAdapter() { mess.getLists("${DESIGNATION}s") { - val spinner = binding.spinnerAutoComplete - val spinnerItems = it - val adapter = - ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, spinnerItems) - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) - spinner.setAdapter(adapter) + val adapter = ArrayAdapter( + requireContext(), + android.R.layout.simple_dropdown_item_1line, + it + ) + binding.spinnerAutoComplete.setAdapter(adapter) } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/baseline_attach_email_24.xml b/app/src/main/res/drawable/baseline_attach_email_24.xml index e48a32d..12a8ef8 100644 --- a/app/src/main/res/drawable/baseline_attach_email_24.xml +++ b/app/src/main/res/drawable/baseline_attach_email_24.xml @@ -1,7 +1,8 @@ @@ -11,6 +12,7 @@ diff --git a/app/src/main/res/drawable/baseline_person_24.xml b/app/src/main/res/drawable/baseline_person_24.xml index c909b0e..a5441e2 100644 --- a/app/src/main/res/drawable/baseline_person_24.xml +++ b/app/src/main/res/drawable/baseline_person_24.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/drawable/bg_card_glass_inner.xml b/app/src/main/res/drawable/bg_card_glass_inner.xml new file mode 100644 index 0000000..03146d7 --- /dev/null +++ b/app/src/main/res/drawable/bg_card_glass_inner.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_gradient_full.xml b/app/src/main/res/drawable/bg_gradient_full.xml new file mode 100644 index 0000000..b917f09 --- /dev/null +++ b/app/src/main/res/drawable/bg_gradient_full.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_icon_soft.xml b/app/src/main/res/drawable/bg_icon_soft.xml new file mode 100644 index 0000000..18805a3 --- /dev/null +++ b/app/src/main/res/drawable/bg_icon_soft.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_admin.xml b/app/src/main/res/layout/fragment_admin.xml index 874c95f..9fde082 100644 --- a/app/src/main/res/layout/fragment_admin.xml +++ b/app/src/main/res/layout/fragment_admin.xml @@ -1,7 +1,7 @@ - @@ -9,19 +9,17 @@ + android:scrollbars="none" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> + android:paddingBottom="40dp"> - + + app:layout_constraintTop_toTopOf="parent"/> + + app:layout_constraintStart_toEndOf="@id/ivHeaderIcon" + app:layout_constraintTop_toTopOf="@id/ivHeaderIcon" + app:layout_constraintEnd_toEndOf="parent"/> - + + + + + app:layout_constraintEnd_toEndOf="parent"/> - + + app:layout_constraintEnd_toEndOf="parent"> + android:background="@drawable/bg_card_glass_inner" + android:padding="22dp"> + + + app:layout_constraintTop_toBottomOf="@id/tvFormTitle"> + android:layout_height="56dp" + + android:drawableStart="@drawable/baseline_attach_email_24" + android:drawablePadding="12dp" + + android:inputType="textEmailAddress" + android:paddingStart="12dp" + + android:paddingEnd="12dp" + android:textColor="@color/black" + android:textColorHint="#80AAAAAA" /> + + + app:layout_constraintTop_toBottomOf="@id/tilEmail"> + android:layout_height="56dp" + + android:drawableStart="@drawable/baseline_person_24" + android:drawablePadding="12dp" + + android:inputType="none" + android:paddingStart="12dp" + + android:paddingEnd="12dp" + android:textColor="@color/black" + android:textColorHint="#80AAAAAA" /> + + + + app:layout_constraintTop_toBottomOf="@id/cardView" />