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.

182 lines
7.9 KiB
Kotlin

package com.cyb3rko.techniklogger.fragments
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.afollestad.materialdialogs.callbacks.onDismiss
import com.afollestad.materialdialogs.customview.customView
import com.cyb3rko.techniklogger.R
import com.cyb3rko.techniklogger.data.objects.Member
import com.cyb3rko.techniklogger.data.ParseController
import com.cyb3rko.techniklogger.databinding.FragmentManageMembersBinding
import com.google.android.material.switchmaterial.SwitchMaterial
import com.google.android.material.textfield.TextInputEditText
import es.dmoral.toasty.Toasty
class ManageMembersFragment : Fragment() {
private var _binding: FragmentManageMembersBinding? = null
private lateinit var myContext: Context
private val memberNames = mutableListOf<String>()
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentManageMembersBinding.inflate(inflater, container, false)
val root = binding.root
myContext = requireContext()
loadMembers()
binding.fab.setOnClickListener {
MaterialDialog(myContext, BottomSheet(LayoutMode.WRAP_CONTENT)).show {
title(text = "Techniker hinzufügen")
customView(R.layout.member_dialog, horizontalPadding = true)
positiveButton(text = "Hinzufügen") {
val view = it.view
val newName = view.findViewById<TextInputEditText>(R.id.name).text.toString()
val newAdmin = view.findViewById<SwitchMaterial>(R.id.admin).isChecked
Member().apply {
setAdmin(newAdmin)
setName(newName)
saveInBackground {
if (it == null) {
Toasty.success(myContext, "Hinzugefügt").show()
showAnimation(true)
loadMembers()
} else {
Toasty.error(myContext, "Fehler bei Speicherung").show()
Log.e("TechnikLogger.Techniker", it.message.toString())
}
}
}
}
}
}
binding.swipeRefreshLayout.apply {
setProgressBackgroundColorSchemeResource(R.color.refreshLayoutBackground)
setColorSchemeResources(R.color.refreshLayoutArrow)
setOnRefreshListener {
isRefreshing = false
showAnimation(true)
loadMembers()
}
}
return root
}
private fun loadMembers() {
memberNames.clear()
binding.list.adapter = ArrayAdapter(
myContext,
android.R.layout.simple_list_item_1,
memberNames
)
ParseController.fetchMembers { members, memberNames, e ->
if (e == null) {
val adapter = ArrayAdapter(
myContext,
android.R.layout.simple_list_item_1,
memberNames
)
binding.list.adapter = adapter
showAnimation(false)
binding.list.setOnItemClickListener { _, _, index, _ ->
val dialogView = layoutInflater.inflate(R.layout.member_dialog, null)
dialogView.findViewById<TextInputEditText>(R.id.name).setText(memberNames[index])
dialogView.findViewById<SwitchMaterial>(R.id.admin).isChecked = members[index].admin
MaterialDialog(myContext, BottomSheet(LayoutMode.WRAP_CONTENT)).show {
title(text = "Techniker-Info")
customView(0, dialogView, horizontalPadding = true)
onDismiss {
val view = it.view
val newName = view.findViewById<TextInputEditText>(R.id.name).text.toString()
val newAdmin = view.findViewById<SwitchMaterial>(R.id.admin).isChecked
val member = members[index]
val adminChanged = newAdmin != member.admin
val nameChanged = newName != member.name
if (adminChanged || nameChanged) {
member.apply {
setAdmin(newAdmin)
setName(newName)
saveInBackground {
if (it == null) {
Toasty.success(myContext, "Gespeichert").show()
if (nameChanged) {
showAnimation(true)
loadMembers()
}
} else {
Toasty.error(myContext, "Fehler bei Speicherung").show()
Log.e("TechnikLogger.Techniker", it.message.toString())
}
}
}
}
}
negativeButton(text = "Entlassen") {
val name = memberNames[index]
MaterialDialog(myContext).show {
title(text = "Entlassung")
message(text = "Soll '$name' wirklich entlassen werden?")
positiveButton(text = "Ja") {
members[index].apply {
retire()
saveInBackground {
if (it == null) {
Toasty.success(myContext, "Gespeichert").show()
showAnimation(true)
loadMembers()
} else {
Toasty.error(myContext, "Fehler bei Speicherung").show()
Log.e("TechnikLogger.Techniker", it.message.toString())
}
}
}
}
negativeButton(text = "Nein")
}
}
}
}
} else {
showAnimation(true, false)
Toasty.error(myContext, "Abruf fehlgeschlagen", Toasty.LENGTH_SHORT).show()
Log.e("TechnikLogger.TechVerw", e.message.toString())
}
}
}
private fun showAnimation(show: Boolean, connected: Boolean = true) {
val viewVisibility = if (show) View.VISIBLE else View.INVISIBLE
val newSpeed = if (!connected) 1.2f else 1.5f
val animation = if (connected) "loading.json" else "no-connection.json"
binding.apply {
loadingAnimation.apply {
setAnimation(animation)
speed = newSpeed
visibility = viewVisibility
playAnimation()
}
}
}
}