package mx.trackermap.TrackerMap.android.details.commands 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.appcompat.app.AlertDialog import androidx.fragment.app.Fragment import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitDetailsCommandsBinding import mx.trackermap.TrackerMap.android.details.UnitDetailsAdapter import org.koin.androidx.viewmodel.ext.android.viewModel @DelicateCoroutinesApi class UnitCommandsFragment: Fragment() { private var _binding: UnitDetailsCommandsBinding? = null private val binding get() = _binding!! private var deviceName: String? = null private val unitCommandsViewModel: UnitCommandsViewModel by viewModel() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = UnitDetailsCommandsBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.reportLoading.root.visibility = View.VISIBLE setupObservers() setupEvents() } override fun onDestroyView() { super.onDestroyView() _binding = null } private fun setupObservers() { unitCommandsViewModel.commands.observe(viewLifecycleOwner) { commands -> Log.d("UnitCommandsFragment", "Device commands - $commands") binding.reportLoading.root.visibility = View.GONE val context = activity!!.applicationContext val adapter = ArrayAdapter(context, R.layout.simple_list_item_checked) adapter.addAll(commands.map { it.description }) binding.commandsList.adapter = adapter } val id = arguments?.getInt(UnitDetailsAdapter.DEVICE_ID_ARG) deviceName = arguments?.getString(UnitDetailsAdapter.DEVICE_NAME_ARG) binding.nameDetail.text = deviceName unitCommandsViewModel.fetchCommands(id) } private fun setupEvents() { binding.commandsList.setOnItemClickListener { _, _, index, _ -> Log.d("UnitCommandsFragment", "Selected item at index - $index") binding.sendCommandButton.isEnabled = true unitCommandsViewModel.selectCommand(index) } binding.sendCommandButton.setOnClickListener { activity?.let { val builder = AlertDialog.Builder(it) builder.apply { setMessage(getString(R.string.send_command_confirmation_text, deviceName)) setPositiveButton(R.string.shared_cancel) { dialogInterface, _ -> dialogInterface.dismiss() } setNegativeButton(R.string.send_command) { dialogInterface, _ -> unitCommandsViewModel.sendCommand() dialogInterface.dismiss() } } builder.create().show() } } } }