aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
diff options
context:
space:
mode:
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt44
1 files changed, 35 insertions, 9 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
index ba29090..174d55e 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
@@ -54,6 +54,7 @@ class UnitsViewModel(
private var _searchQuery = savedStateHandle.getLiveData("searchQuery", "")
private var _unitsDisplayMode = MutableLiveData(UnitsDisplayMode.MAP)
private var _units = MutableLiveData<List<UnitInformation>>()
+ private var _oldSelectedUnit = MutableLiveData<UnitInformation?>()
private var _selectedUnit = MutableLiveData<UnitInformation?>()
private var _mapLayerType = MutableLiveData<MapLayer.Type>()
private var _geofences = MutableLiveData<Map<Int, Geofence>>()
@@ -62,6 +63,7 @@ class UnitsViewModel(
val searchQuery: LiveData<String> get() = _searchQuery
val unitsDisplayMode: LiveData<UnitsDisplayMode> get() = _unitsDisplayMode
val units: LiveData<List<UnitInformation>> get() = _units
+ val oldSelectedUnit: LiveData<UnitInformation?> get() = _oldSelectedUnit
val selectedUnit: LiveData<UnitInformation?> get() = _selectedUnit
val mapLayerType: LiveData<MapLayer.Type> get() = _mapLayerType
val geofences: LiveData<Map<Int, Geofence>> get() = _geofences
@@ -82,6 +84,7 @@ class UnitsViewModel(
Log.d("UnitsViewModel", "Setup observers")
unitsController.displayedUnitsFlow.collect { units ->
this._units.value = units
+ updateSelectedUnit()
}
}
@@ -91,22 +94,45 @@ class UnitsViewModel(
}
}
- fun selectUnit(unit: UnitInformation) {
- Log.d("UnitsViewModel", "Selecting unit ${unit.device.name}")
+ fun selectUnit(unit: UnitInformation?, switchToMap: Boolean = true) {
+ Log.d("UnitsViewModel", "Selecting unit ${unit?.device?.name}")
+ _oldSelectedUnit.postValue(_selectedUnit.value)
_selectedUnit.postValue(unit)
- setDisplayMode(UnitsDisplayMode.MAP)
+ if (unit != null && switchToMap) {
+ setDisplayMode(UnitsDisplayMode.MAP)
+ }
}
- fun selectUnitWith(positionId: Int?) {
- if (positionId == null) {
+ fun selectUnitWithPositionId(id: Int?, switchToMap: Boolean = true) {
+ if (id == null) {
Log.d("UnitsViewModel", "Deselecting unit")
- _selectedUnit.postValue(null)
+ selectUnit(null, switchToMap = switchToMap)
return
}
- Log.d("UnitsViewModel", "Selecting unit with position id: $positionId")
- val unit = _units.value?.find { it.position?.id == positionId }
- _selectedUnit.postValue(unit)
+ Log.d("UnitsViewModel", "Selecting unit with position id: $id")
+ val unit = _units.value?.find { it.position?.id == id }
+ selectUnit(unit, switchToMap = switchToMap)
+ }
+
+ private fun selectUnitWithUnitId(id: Int?, switchToMap: Boolean = true) {
+ if (id == null) {
+ Log.d("UnitsViewModel", "Deselecting unit")
+ selectUnit(null, switchToMap = switchToMap)
+ return
+ }
+
+ Log.d("UnitsViewModel", "Selecting unit with device id: $id")
+ val unit = _units.value?.find { it.device.id == id }
+ selectUnit(unit, switchToMap = switchToMap)
+ }
+
+ private fun updateSelectedUnit() {
+ selectedUnit.value?.let { selected ->
+ Log.d("UnitsViewModel", "Updating selected unit with id: ${selected.device.id}")
+ selectUnitWithUnitId(selected.device.id, switchToMap = false)
+ }
+
}
fun setDisplayMode(displayMode: UnitsDisplayMode) {