From 94894f34a5f3404e8536cacadbedfb1b160a2e53 Mon Sep 17 00:00:00 2001 From: mohamedkaif356 Date: Tue, 19 Sep 2023 17:39:20 +0530 Subject: [PATCH] Added incubationTime check --- .../data/model/patient/UserData.kt | 1 + .../presentation/adapter/UserListAdapter.kt | 77 +++++++++++++++++-- .../presentation/dashboard/HomeFragment.kt | 8 +- app/src/main/res/layout/user_item_view.xml | 10 +++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 85 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/data/model/patient/UserData.kt b/app/src/main/java/com/example/hpostesting/data/model/patient/UserData.kt index 09543dc..1b6c95d 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/patient/UserData.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/patient/UserData.kt @@ -9,6 +9,7 @@ data class UserData( @PrimaryKey var _id: String = "", var name: String = "", + var incubationTime: String = "", var birthYear: String = "", var userImageURL: String = "", var location: Location? = null, diff --git a/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt b/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt index 33da679..04ff336 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/adapter/UserListAdapter.kt @@ -10,17 +10,20 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.model.patient.UserData -import com.example.hpostesting.presentation.testRight.TestRightViewModel import com.firebase.ui.firestore.FirestoreRecyclerAdapter import com.firebase.ui.firestore.FirestoreRecyclerOptions +import com.google.firebase.firestore.ktx.firestore +import com.google.firebase.ktx.Firebase import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.UserItemViewBinding +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Date +import java.util.Locale class UserListAdapter( - options: FirestoreRecyclerOptions, - private val view: View -) : - FirestoreRecyclerAdapter(options) { + options: FirestoreRecyclerOptions, private val view: View +) : FirestoreRecyclerAdapter(options) { class OrderItemViewHolder(val binding: UserItemViewBinding) : RecyclerView.ViewHolder(binding.root) @@ -34,6 +37,11 @@ class UserListAdapter( @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int, model: UserData) { holder.binding.apply { + if (model.incubationTime == "") { + btnStartIncubation.visibility = View.VISIBLE + } else { + btnStartIncubation.visibility = View.GONE + } userName.text = "Name: ${model.name}" userId.text = "User ID:${model._id}" Glide.with(view).load(model.userImageURL).into(userImage) @@ -43,6 +51,27 @@ class UserListAdapter( } else { teststatus.text = "Test is Pending" } + btnStartIncubation.setOnClickListener { + it.visibility = View.GONE + Firebase.firestore.collection("patientData").whereEqualTo("_id", model._id).get() + .addOnSuccessListener { data -> + if (data.documents.isNotEmpty()) { + data.documents.forEach { userData -> + Firebase.firestore.collection("patientData").document(userData.id) + .update( + "incubationTime", SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", Locale.getDefault() + ).format(Calendar.getInstance().time).toString() + ).addOnSuccessListener { + Toast.makeText( + view.context, "Incubation started", Toast.LENGTH_SHORT + ).show() + startListening() + } + } + } + } + } userCard.setOnClickListener { if (model.testStatus != null) { if (model.testStatus!!) { @@ -52,11 +81,45 @@ class UserListAdapter( Toast.LENGTH_SHORT ).show() } else { - DataHolder.selectedTest = model - view.findNavController().navigate(R.id.action_nav_home_to_mainActivity) + if (model.incubationTime != "") { + if (isBetween15And30Minutes(model.incubationTime) < 15) { + Toast.makeText( + view.context, + "Incubation has not completed 15 minutes", + Toast.LENGTH_SHORT + ).show() + } else if (isBetween15And30Minutes(model.incubationTime) > 30) { + Toast.makeText( + view.context, + "Incubation crossed 30 minutes, need to repeat the incubation", + Toast.LENGTH_SHORT + ).show() + } else { + DataHolder.selectedTest = model + view.findNavController() + .navigate(R.id.action_nav_home_to_mainActivity) + } + } else { + Toast.makeText( + view.context, + "Incubation not started for this user", + Toast.LENGTH_SHORT + ).show() + } } } } } } + + private fun isBetween15And30Minutes(createdAt: String): Long { + val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) + val createdAtDate: Date = formatter.parse(createdAt)!! + + val currentTime = Calendar.getInstance().time + + val diffMillis = currentTime.time - createdAtDate.time + + return diffMillis / (60 * 1000) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index f969b0b..3d53418 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -56,9 +56,6 @@ class HomeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel.allUserData.observe(viewLifecycleOwner) { userData -> - if (userData.isNotEmpty()) { - - } deleteIncompleteRegistrations(userData) } hemoCubeViewModel.allUserData.observe(viewLifecycleOwner) { userData -> @@ -99,7 +96,8 @@ class HomeFragment : Fragment() { } } private fun loadUserData() { - val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false).orderBy("createdAt", Query.Direction.DESCENDING) + val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false) +// .orderBy("createdAt", Query.Direction.DESCENDING) query.get().addOnSuccessListener { if (it.documents.isEmpty()) { binding.pendingTest.visibility = View.VISIBLE @@ -137,7 +135,7 @@ class HomeFragment : Fragment() { dialog.show() } private fun getData(search: String?, field: String) { - val capitalizedSearch = search?.replaceFirstChar { + search?.replaceFirstChar { if (search.lowercase() .startsWith(it.lowercase()) ) it.titlecase(Locale.getDefault()) else it.toString() diff --git a/app/src/main/res/layout/user_item_view.xml b/app/src/main/res/layout/user_item_view.xml index d067400..eb15445 100644 --- a/app/src/main/res/layout/user_item_view.xml +++ b/app/src/main/res/layout/user_item_view.xml @@ -72,6 +72,16 @@ app:layout_constraintTop_toBottomOf="@id/userId" tools:text="Test Status: Completed"/> +