diff options
Diffstat (limited to 'app/src/main/java/dev/msfjarvis/aps/ui/adapters/FieldItemAdapter.kt')
| -rw-r--r-- | app/src/main/java/dev/msfjarvis/aps/ui/adapters/FieldItemAdapter.kt | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/ui/adapters/FieldItemAdapter.kt b/app/src/main/java/dev/msfjarvis/aps/ui/adapters/FieldItemAdapter.kt new file mode 100644 index 00000000..5ecc2888 --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/aps/ui/adapters/FieldItemAdapter.kt @@ -0,0 +1,85 @@ +package dev.msfjarvis.aps.ui.adapters + +import android.text.method.PasswordTransformationMethod +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.textfield.TextInputLayout +import dev.msfjarvis.aps.R +import dev.msfjarvis.aps.data.password.FieldItem +import dev.msfjarvis.aps.databinding.ItemFieldBinding + +class FieldItemAdapter( + private var fieldItemList: List<FieldItem>, + private val showPassword: Boolean, + private val copyTextToClipBoard: (text: String?) -> Unit, +) : RecyclerView.Adapter<FieldItemAdapter.FieldItemViewHolder>() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FieldItemViewHolder { + val binding = ItemFieldBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return FieldItemViewHolder(binding.root, binding) + } + + override fun onBindViewHolder(holder: FieldItemViewHolder, position: Int) { + holder.bind(fieldItemList[position], showPassword, copyTextToClipBoard) + } + + override fun getItemCount(): Int { + return fieldItemList.size + } + + fun updateOTPCode(code: String) { + var otpItemPosition = -1; + fieldItemList = fieldItemList.mapIndexed { position, item -> + if (item.key.equals(FieldItem.ItemType.OTP.type, true)) { + otpItemPosition = position + return@mapIndexed FieldItem.createOtpField(code) + } + + return@mapIndexed item + } + + notifyItemChanged(otpItemPosition) + } + + fun updateItems(itemList: List<FieldItem>) { + fieldItemList = itemList + notifyDataSetChanged() + } + + class FieldItemViewHolder(itemView: View, val binding: ItemFieldBinding) : + RecyclerView.ViewHolder(itemView) { + + fun bind(fieldItem: FieldItem, showPassword: Boolean, copyTextToClipBoard: (String?) -> Unit) { + with(binding) { + itemText.hint = fieldItem.key + itemTextContainer.hint = fieldItem.key + itemText.setText(fieldItem.value) + + when (fieldItem.action) { + FieldItem.ActionType.COPY -> { + itemTextContainer.apply { + endIconDrawable = ContextCompat.getDrawable(itemView.context, R.drawable.ic_content_copy) + endIconMode = TextInputLayout.END_ICON_CUSTOM + setEndIconOnClickListener { copyTextToClipBoard(itemText.text.toString()) } + } + } + FieldItem.ActionType.HIDE -> { + itemTextContainer.apply { + endIconMode = TextInputLayout.END_ICON_PASSWORD_TOGGLE + setOnClickListener { copyTextToClipBoard(itemText.text.toString()) } + } + itemText.apply { + if (!showPassword) { + transformationMethod = PasswordTransformationMethod.getInstance() + } + setOnClickListener { copyTextToClipBoard(itemText.text.toString()) } + } + } + } + } + } + } +} |
