offline adapter added
This commit is contained in:
@@ -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<OfflineUserListAdapter.OfflineUserListViewHolder>() {
|
||||||
|
|
||||||
|
inner class OfflineUserListViewHolder(val binding: OfflineUserListViewBinding) :
|
||||||
|
RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private val differCallback = object : DiffUtil.ItemCallback<HemoCubeTestData>() {
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user