From 18987c3b31c2b8fe1a911297e8b104d583dd5c83 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Thu, 10 Mar 2022 20:33:40 -0600 Subject: - Card on map now updates info when there is a change - Huge device list performance improvements on search and updates --- .../TrackerMap/android/units/UnitsViewModel.kt | 44 +++++++++++++++++----- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/units/UnitsViewModel.kt') 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>() + private var _oldSelectedUnit = MutableLiveData() private var _selectedUnit = MutableLiveData() private var _mapLayerType = MutableLiveData() private var _geofences = MutableLiveData>() @@ -62,6 +63,7 @@ class UnitsViewModel( val searchQuery: LiveData get() = _searchQuery val unitsDisplayMode: LiveData get() = _unitsDisplayMode val units: LiveData> get() = _units + val oldSelectedUnit: LiveData get() = _oldSelectedUnit val selectedUnit: LiveData get() = _selectedUnit val mapLayerType: LiveData get() = _mapLayerType val geofences: LiveData> 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) { -- cgit v1.2.3