package mx.trackermap.TrackerMap.android.devices import android.content.Intent import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.databinding.DevicesFragmentBinding import mx.trackermap.TrackerMap.android.details.DetailsActivity import mx.trackermap.TrackerMap.android.units.UnitsViewModel import mx.trackermap.TrackerMap.client.models.UnitInformation import org.koin.androidx.viewmodel.ext.android.viewModel @DelicateCoroutinesApi class DevicesFragment : Fragment() { private var _binding: DevicesFragmentBinding? = null private val binding get() = _binding!! private val unitsViewModel: UnitsViewModel by viewModel() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { super.onCreateView(inflater, container, savedInstanceState) _binding = DevicesFragmentBinding.inflate(inflater, container, false) return binding.root } override fun onDestroyView() { super.onDestroyView() _binding = null } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setupList() setupObservers() } private fun setupList() { binding.devicesList.layoutManager = LinearLayoutManager( context, LinearLayoutManager.VERTICAL, false ) binding.devicesList.adapter = DevicesAdapter(emptyList(), null) } @DelicateCoroutinesApi private fun setupObservers() { Log.d("DevicesFragment", "setupObservers()") unitsViewModel.units.observe(viewLifecycleOwner) { units -> Log.d("DevicesFragment", "Success $units") binding.devicesList.swapAdapter( DevicesAdapter(units, this::itemAction), false ) } } private fun itemAction(unit: UnitInformation, action: Action) { when (action) { Action.DETAILS, Action.REPORTS, Action.COMMANDS -> { Log.d("DevicesFragment", "Action: $action - Unit: $unit") val activity = requireActivity() val intent = Intent(activity.applicationContext, DetailsActivity::class.java) intent.putExtra(DetailsActivity.DEVICE_ID_EXTRA, unit.device.id) intent.putExtra(DetailsActivity.ACTION_EXTRA, action) startActivity(intent) } Action.CLICK -> { unitsViewModel.selectUnit(unit) } } } }