aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-03-10 20:33:40 -0600
committerIván Ávalos <avalos@disroot.org>2022-03-10 20:33:40 -0600
commit18987c3b31c2b8fe1a911297e8b104d583dd5c83 (patch)
tree43bc8d56c873fb1c6b4f56f3750f45a60519984d /androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt
parent9b8eee4362c368e682bfe18d5cef44d6b9d109bf (diff)
downloadetbsa-trackermap-mobile-18987c3b31c2b8fe1a911297e8b104d583dd5c83.tar.gz
etbsa-trackermap-mobile-18987c3b31c2b8fe1a911297e8b104d583dd5c83.tar.bz2
etbsa-trackermap-mobile-18987c3b31c2b8fe1a911297e8b104d583dd5c83.zip
- Card on map now updates info when there is a change
- Huge device list performance improvements on search and updates
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) {