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.

130 lines
4.7 KiB
Kotlin

package com.cyb3rko.techniklogger.fragments
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.fragment.app.Fragment
import com.cyb3rko.techniklogger.R
import com.cyb3rko.techniklogger.data.ParseController
import com.cyb3rko.techniklogger.databinding.FragmentManageMembersBinding
import com.cyb3rko.techniklogger.logE
import com.cyb3rko.techniklogger.modals.MemberBottomSheet
import com.cyb3rko.techniklogger.showErrorToast
import com.cyb3rko.techniklogger.showSuccessToast
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 {
MemberBottomSheet { member ->
member?.saveInBackground { exception ->
if (exception == null) {
showSuccessToast("Hinzugefügt")
showAnimation(true)
loadMembers()
} else {
showErrorToast("Fehler beim Hinzufügen")
logE("Fehler beim Hinzufügen des Technikers")
exception.printStackTrace()
}
}
}.show(parentFragmentManager, MemberBottomSheet.TAG)
}
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(true) { 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 member = members[index]
MemberBottomSheet(members[index]) { editedMember ->
if (editedMember == null) {
showAnimation(true)
loadMembers()
return@MemberBottomSheet
}
if (editedMember != member) {
editedMember.saveInBackground {
if (it == null) {
showSuccessToast("Gespeichert")
showAnimation(true)
loadMembers()
} else {
showErrorToast("Fehler bei der Speicherung")
logE("Fehler bei der Speicherung des neuen Technikers")
it.printStackTrace()
}
}
}
}.show(parentFragmentManager, MemberBottomSheet.TAG)
}
} else {
showAnimation(true, false)
showErrorToast("Abruf fehlgeschlagen")
logE("Abruf der Techniker fehlgeschlagen")
e.printStackTrace()
}
}
}
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()
}
}
}
}