You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.1 KiB
Kotlin

package com.cyb3rko.techniklogger.modals
import android.content.DialogInterface
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.cyb3rko.techniklogger.data.objects.Member
import com.cyb3rko.techniklogger.databinding.MemberDialogBinding
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
internal class MemberBottomSheet(
private val member: Member? = null,
private val action: (member: Member?) -> Unit
): BottomSheetDialogFragment() {
private lateinit var binding: MemberDialogBinding
private var mode = -1
private lateinit var mMember: Member
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = MemberDialogBinding.inflate(layoutInflater)
if (member == null) {
mode = MODE_ADD
} else {
mMember = member.copy()
binding.name.setText(mMember.name)
binding.admin.isChecked = mMember.admin
mode = MODE_EDIT
}
if (mode == MODE_ADD) {
binding.title.text = "Techniker hinzufügen"
binding.button.text = "Hinzufügen"
} else {
binding.title.text = "Techniker-Info"
binding.button.text = "Entlassen"
}
binding.button.setOnClickListener {
val newName = binding.name.text.toString()
val newAdmin = binding.admin.isChecked
if (mode == MODE_ADD) {
Member().apply {
setAdmin(newAdmin)
setName(newName)
action(this)
dismiss()
}
} else {
MaterialAlertDialogBuilder(requireContext())
.setTitle("Entlassung")
.setMessage("Soll '${mMember.name}' wirklich entlassen werden?")
.setPositiveButton("Ja") { _ , _ ->
mMember.apply {
retire()
action(this)
dismiss()
}
}
.setNegativeButton("Nein", null)
.show()
}
}
return binding.root
}
override fun onDismiss(dialog: DialogInterface) {
if (mode == MODE_EDIT && ::binding.isInitialized) {
val newName = binding.name.text.toString()
val newAdmin = binding.admin.isChecked
val adminChanged = newAdmin != mMember.admin
val nameChanged = newName != mMember.name
if (adminChanged || nameChanged) {
mMember.apply {
setAdmin(newAdmin)
setName(newName)
action(this)
}
}
}
}
companion object {
const val TAG = "Member Bottom Sheet"
const val MODE_ADD = 0
const val MODE_EDIT = 1
}
}