From 1a7e618fa563e2c7be27426351df4e35e8e6547b Mon Sep 17 00:00:00 2001 From: Mariya Date: Fri, 8 Dec 2023 23:25:23 +0530 Subject: [PATCH] offline adapter added --- .../adapter/OfflineUserListAdapter.kt | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 app/src/main/java/com/example/hpostesting/presentation/adapter/OfflineUserListAdapter.kt diff --git a/app/src/main/java/com/example/hpostesting/presentation/adapter/OfflineUserListAdapter.kt b/app/src/main/java/com/example/hpostesting/presentation/adapter/OfflineUserListAdapter.kt new file mode 100644 index 0000000..afa492b --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/presentation/adapter/OfflineUserListAdapter.kt @@ -0,0 +1,147 @@ +package com.example.hpostesting.presentation.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.content.res.Resources +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.navigation.findNavController +import androidx.recyclerview.widget.AsyncListDiffer +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.RecyclerView +import com.example.hpostesting.data.DataHolder +import com.example.hpostesting.data.constant.Constants +import com.example.hpostesting.data.model.patient.HemoCubeTestData +import com.example.hpostesting.data.model.patient.UserData +import `in`.sminnovations.hpostesting.R +import `in`.sminnovations.hpostesting.databinding.OfflineUserListViewBinding +import org.apache.commons.collections4.MapUtils.getString +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Date +import java.util.Locale + + +class OfflineUserListAdapter(private val view: View, private val batLevel: Int) : + RecyclerView.Adapter() { + + inner class OfflineUserListViewHolder(val binding: OfflineUserListViewBinding) : + RecyclerView.ViewHolder(binding.root) { + + } + + private val differCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: HemoCubeTestData, newItem: HemoCubeTestData + ): Boolean { + return oldItem._id == newItem._id + } + + override fun areContentsTheSame( + oldItem: HemoCubeTestData, newItem: HemoCubeTestData + ): Boolean { + return oldItem == newItem + } + } + + val differ = AsyncListDiffer(this, differCallback) + private val context: Context? = null + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OfflineUserListViewHolder { + return OfflineUserListViewHolder( + OfflineUserListViewBinding.inflate(LayoutInflater.from(parent.context), parent, false) + ) + } + + override fun getItemCount(): Int { + return differ.currentList.size + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: OfflineUserListViewHolder, position: Int) { + val userList = differ.currentList[position] + holder.binding.apply { + userID.text = "User ID: ${userList._id}" + bloodGroup.text = "Blood group: ${userList.bloodGroup}" + time.text = "Time: ${isBetween15And30Minutes(userList.incubationTime)} \n Started at: ${ + SimpleDateFormat("HH:mm:ss").format( + SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", Locale.getDefault() + ).parse(userList.incubationTime)!! + ) + }" + + if (userList.testStatus!!) { + teststatus.text = view.context.getString(R.string.test_concluded) + + } else { + teststatus.text = view.context.getString(R.string.test_pending) + } + + userCard.setOnClickListener { + if (batLevel < 40) { + showWarningToast(R.string.low_battery_warning) + } else { + if (userList.testStatus != null) { + if (userList.testStatus!!) { + showWarningToast(R.string.test_already_conducted) + } else { + if (userList.incubationTime != "") { + val incubationTimeDiff = isBetween15And30Minutes(userList.incubationTime) + if (incubationTimeDiff < 15) { + showWarningToast(R.string.incubation_not_completed) + } else if (incubationTimeDiff > 30) { + showWarningToast(R.string.incubation_crossed_30_minutes) + } else { + DataHolder.selectedTest = UserData( + _id = userList._id, + bloodGroup = userList.bloodGroup, + incubationTime = userList.incubationTime + ) + view.findNavController() + .navigate(R.id.action_nav_home_to_mainActivity) + } + } else { + showWarningToast(R.string.incubation_not_started) + } + } + } + } + } + + } + } + + 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) + } + + + private fun showWarningToast(resId: Int) { + val contextToUse = view.context ?: return + + val message = try { + contextToUse.getString(resId) + } catch (e: Resources.NotFoundException) { + "Resource not found for ID: $resId" + } + + Toast.makeText( + contextToUse, + message, + Toast.LENGTH_SHORT + ).show() + } + + + + +} \ No newline at end of file