package mx.trackermap.TrackerMap.android.units import android.content.Intent import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.commit import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitsActivityBinding import mx.trackermap.TrackerMap.android.devices.DevicesFragment import mx.trackermap.TrackerMap.android.map.UnitMapFragment import mx.trackermap.TrackerMap.android.session.UserInformationActivity import org.koin.androidx.viewmodel.ext.android.viewModel @DelicateCoroutinesApi class UnitsActivity : AppCompatActivity() { private var _binding: UnitsActivityBinding? = null private val binding get() = _binding!! private val unitsViewModel: UnitsViewModel by viewModel() private val mapFragment: UnitMapFragment by lazy { UnitMapFragment(unitsViewModel) } private val devicesFragment: DevicesFragment by lazy { DevicesFragment(unitsViewModel) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) _binding = UnitsActivityBinding.inflate(layoutInflater) setContentView(binding.root) setupEvents() } override fun onResume() { super.onResume() setupObservers() } override fun onPause() { super.onPause() removeObservers() } override fun onDestroy() { super.onDestroy() _binding = null } private fun setupEvents() { binding.userButton.setOnClickListener { val intent = Intent(applicationContext, UserInformationActivity::class.java) startActivity(intent) } binding.displayModeToggle.setOnClickListener { unitsViewModel.toggleDisplayMode() } binding.searchInput.doAfterTextChanged { Log.d("UnitsActivity", "Search changed to ${it.toString()}") unitsViewModel.search(it.toString()) } } private fun setupObservers() { unitsViewModel.unitsDisplayMode.observe(this) { displayMode -> binding.displayModeToggle.setImageResource( when (displayMode) { UnitsViewModel.UnitsDisplayMode.LIST -> R.drawable.icon_map UnitsViewModel.UnitsDisplayMode.MAP -> R.drawable.icon_list else -> R.drawable.icon_map } ) binding.displayModeToggle.contentDescription = getString( when (displayMode) { UnitsViewModel.UnitsDisplayMode.LIST -> R.string.toggle_map UnitsViewModel.UnitsDisplayMode.MAP -> R.string.toggle_list else -> R.string.toggle_map } ) val newFragment = when (displayMode) { UnitsViewModel.UnitsDisplayMode.LIST -> devicesFragment UnitsViewModel.UnitsDisplayMode.MAP -> mapFragment } supportFragmentManager.commit { replace(R.id.displayContainer, newFragment) } } } private fun removeObservers() { unitsViewModel.unitsDisplayMode.removeObservers(this) } }