package mx.trackermap.TrackerMap.android.details.information import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TableRow import android.widget.TextView import androidx.fragment.app.Fragment import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitDetailsInformationBinding import mx.trackermap.TrackerMap.android.details.UnitDetailsAdapter import mx.trackermap.TrackerMap.client.models.UnitInformation import org.koin.androidx.viewmodel.ext.android.viewModel class UnitInformationFragment : Fragment() { private var _binding: UnitDetailsInformationBinding? = null private val binding get() = _binding!! private val unitInformationViewModel: UnitInformationViewModel by viewModel() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = UnitDetailsInformationBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setupObservers() fetchInformation() } override fun onDestroyView() { super.onDestroyView() _binding = null } private fun setupObservers() { unitInformationViewModel.unit.observe(this) { unitInformation -> Log.d("UnitInformationFragment", "Unit Information Fetched - $unitInformation") unitInformation?.let { displayInformation(it) } } } private fun fetchInformation() { val id = arguments?.getInt(UnitDetailsAdapter.DEVICE_ID_ARG) unitInformationViewModel.fetchUnit(id ?: 0) } private fun displayInformation(unit: UnitInformation) { val context = context!! val details: MutableMap = mutableMapOf() details["Contact"] = unit.device.contact ?: "" details["Speed"] = context.getString( R.string.unit_speed_format, unit.position?.speed?.toInt() ?: 0 ) details["Address"] = unit.position?.address ?: "" details["Latitude"] = "${unit.position?.latitude}" details["Longitude"] = "${unit.position?.longitude}" details["Protocol"] = unit.position?.protocol ?: "" binding.nameDetail.text = unit.device.name details.forEach { entry -> val row = TableRow(context) val keyText = TextView(context) val valueText = TextView(context) row.addView(keyText) row.addView(valueText) binding.informationTable.addView(row) keyText.text = entry.key valueText.text = entry.value } } }