diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index 609ff29e3..3f8722f19 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -251,8 +251,11 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac binding.detailAppBar.toolbar.inflateMenu(R.menu.detail) favToggle = binding.detailAppBar.toolbar.menu.findItem(R.id.menu_fav) - binding.detailAppBar.toolbar.menu.findItem(R.id.menu_edit).title = - getString(R.string.edit_at_datasource, vm.apiName) + + vm.apiName.observe(viewLifecycleOwner) { + binding.detailAppBar.toolbar.menu.findItem(R.id.menu_edit).title = + getString(R.string.edit_at_datasource, it) + } binding.detailView.topPart.doOnNextLayout { bottomSheetBehavior.peekHeight = binding.detailView.topPart.bottom @@ -433,6 +436,12 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } true } + + R.id.menu_reload -> { + vm.reloadChargerDetails() + true + } + else -> false } } @@ -1332,17 +1341,16 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac ).show() true } + } + - val reloadItem = menu.findItem(R.id.menu_reload) - reloadItem.setOnMenuItemClickListener { + override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) { + R.id.menu_reload -> { vm.reloadChargepoints(true) true } - } - - override fun onMenuItemSelected(menuItem: MenuItem): Boolean { - return false + else -> false } override fun getRootView(): View { diff --git a/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt b/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt index 3b1c69976..d0177e2ab 100644 --- a/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt +++ b/app/src/main/java/net/vonforst/evmap/storage/ChargeLocationsDao.kt @@ -310,7 +310,8 @@ class ChargeLocationsRepository( } fun getChargepointDetail( - id: Long + id: Long, + overrideCache: Boolean = false ): LiveData> { val dbResult = chargeLocationsDao.getChargeLocationById( id, @@ -326,7 +327,11 @@ class ChargeLocationsRepository( chargeLocationsDao.insert(result.data!!) } } - return PreferCacheLiveData(dbResult, apiResult, cacheSoftLimit) + return if (overrideCache) { + apiResult + } else { + PreferCacheLiveData(dbResult, apiResult, cacheSoftLimit) + } } fun getFilters(sp: StringProvider) = MediatorLiveData>>().apply { diff --git a/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt b/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt index b65c26489..43c7c004e 100644 --- a/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt +++ b/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt @@ -163,9 +163,13 @@ class MapViewModel(application: Application, private val state: SavedStateHandle val chargerSparse: MutableLiveData by lazy { state.getLiveData("chargerSparse") } + private val triggerChargerDetailsRefresh = MutableLiveData(false) val chargerDetails: LiveData> = chargerSparse.switchMap { charger -> - charger?.id?.let { - repo.getChargepointDetail(it) + triggerChargerDetailsRefresh.value = false + triggerChargerDetailsRefresh.switchMap { overrideCache -> + charger?.id?.let { + repo.getChargepointDetail(it, overrideCache) + } } }.apply { observeForever { chargerDetail -> @@ -207,7 +211,7 @@ class MapViewModel(application: Application, private val state: SavedStateHandle val location: MutableLiveData by lazy { MutableLiveData() } - private val triggerAvailabilityRefresh = MutableLiveData(true) + private val triggerAvailabilityRefresh = MutableLiveData(true) val availability: LiveData> by lazy { chargerSparse.switchMap { charger -> charger?.let { @@ -602,6 +606,10 @@ class MapViewModel(application: Application, private val state: SavedStateHandle triggerAvailabilityRefresh.value = true } + fun reloadChargerDetails() { + triggerChargerDetailsRefresh.value = true + } + fun loadChargerById(chargerId: Long) { chargerSparse.value = null repo.getChargepointDetail(chargerId).observeForever { response -> diff --git a/app/src/main/res/menu/detail.xml b/app/src/main/res/menu/detail.xml index eb67ac0c9..ad0d88bae 100644 --- a/app/src/main/res/menu/detail.xml +++ b/app/src/main/res/menu/detail.xml @@ -2,12 +2,6 @@ - - + + + + \ No newline at end of file