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