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
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()
|
|
}
|
|
}
|
|
}
|
|
}
|