mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Refactor: Load bookmarked locations using Flow
* `BookmarkLocationsController`: Changed to use `Flow` to load bookmarked locations. * `BookmarkLocationsDao`: Changed to return `Flow` of bookmark location instead of a list. * `BookmarkLocationsFragment`: Used `LifecycleScope` to collect data from flow and display it. * Removed unused `getAllBookmarkLocations()` from `BookmarkLocationsViewModel`. * Used `map` in `BookmarkLocationsDao` to convert from `BookmarksLocations` to `Place` list.
This commit is contained in:
parent
97037858a3
commit
8d8b722d30
4 changed files with 19 additions and 7 deletions
|
|
@ -1,6 +1,8 @@
|
||||||
package fr.free.nrw.commons.bookmarks.locations
|
package fr.free.nrw.commons.bookmarks.locations
|
||||||
|
|
||||||
import fr.free.nrw.commons.nearby.Place
|
import fr.free.nrw.commons.nearby.Place
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.flow
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
|
@ -13,5 +15,6 @@ class BookmarkLocationsController @Inject constructor(
|
||||||
* Load bookmarked locations from the database.
|
* Load bookmarked locations from the database.
|
||||||
* @return a list of Place objects.
|
* @return a list of Place objects.
|
||||||
*/
|
*/
|
||||||
fun loadFavoritesLocations(): List<Place> = listOf()
|
fun loadFavoritesLocations(): Flow<List<Place>> =
|
||||||
|
bookmarkLocationDao.getAllBookmarksLocationsPlace()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import fr.free.nrw.commons.nearby.NearbyController
|
||||||
import fr.free.nrw.commons.nearby.Place
|
import fr.free.nrw.commons.nearby.Place
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
abstract class BookmarkLocationsDao {
|
abstract class BookmarkLocationsDao {
|
||||||
|
|
@ -17,7 +18,7 @@ abstract class BookmarkLocationsDao {
|
||||||
abstract suspend fun addBookmarkLocation(bookmarkLocation: BookmarksLocations)
|
abstract suspend fun addBookmarkLocation(bookmarkLocation: BookmarksLocations)
|
||||||
|
|
||||||
@Query("SELECT * FROM bookmarks_locations")
|
@Query("SELECT * FROM bookmarks_locations")
|
||||||
abstract suspend fun getAllBookmarksLocations(): List<BookmarksLocations>
|
abstract fun getAllBookmarksLocations(): Flow<List<BookmarksLocations>>
|
||||||
|
|
||||||
@Query("SELECT EXISTS (SELECT 1 FROM bookmarks_locations WHERE location_name = :name)")
|
@Query("SELECT EXISTS (SELECT 1 FROM bookmarks_locations WHERE location_name = :name)")
|
||||||
abstract suspend fun findBookmarkLocation(name: String): Boolean
|
abstract suspend fun findBookmarkLocation(name: String): Boolean
|
||||||
|
|
@ -44,6 +45,6 @@ abstract class BookmarkLocationsDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllBookmarksLocationsPlace(): Flow<List<Place>> {
|
fun getAllBookmarksLocationsPlace(): Flow<List<Place>> {
|
||||||
return flow { getAllBookmarksLocations().map { it.toPlace() } }
|
return flow { getAllBookmarksLocations().map { it.map { it1 -> it1.toPlace() } } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -15,8 +15,10 @@ import fr.free.nrw.commons.R
|
||||||
import fr.free.nrw.commons.contributions.ContributionController
|
import fr.free.nrw.commons.contributions.ContributionController
|
||||||
import fr.free.nrw.commons.databinding.FragmentBookmarksLocationsBinding
|
import fr.free.nrw.commons.databinding.FragmentBookmarksLocationsBinding
|
||||||
import fr.free.nrw.commons.filepicker.FilePicker
|
import fr.free.nrw.commons.filepicker.FilePicker
|
||||||
|
import fr.free.nrw.commons.nearby.Place
|
||||||
import fr.free.nrw.commons.nearby.fragments.CommonPlaceClickActions
|
import fr.free.nrw.commons.nearby.fragments.CommonPlaceClickActions
|
||||||
import fr.free.nrw.commons.nearby.fragments.PlaceAdapter
|
import fr.free.nrw.commons.nearby.fragments.PlaceAdapter
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -128,7 +130,13 @@ class BookmarkLocationsFragment : DaggerFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initList() {
|
private fun initList() {
|
||||||
val places = controller.loadFavoritesLocations()
|
var places: List<Place> = listOf()
|
||||||
|
viewLifecycleOwner.lifecycleScope.launch {
|
||||||
|
controller.loadFavoritesLocations().collect {
|
||||||
|
adapter.items = it
|
||||||
|
places = it
|
||||||
|
}
|
||||||
|
}
|
||||||
adapter.items = places
|
adapter.items = places
|
||||||
binding?.loadingImagesProgressBar?.visibility = View.GONE
|
binding?.loadingImagesProgressBar?.visibility = View.GONE
|
||||||
if (places.isEmpty()) {
|
if (places.isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ class BookmarkLocationsViewModel(
|
||||||
private val bookmarkLocationsDao: BookmarkLocationsDao
|
private val bookmarkLocationsDao: BookmarkLocationsDao
|
||||||
): ViewModel() {
|
): ViewModel() {
|
||||||
|
|
||||||
fun getAllBookmarkLocations(): Flow<List<Place>> {
|
// fun getAllBookmarkLocations(): List<Place> {
|
||||||
return bookmarkLocationsDao.getAllBookmarksLocationsPlace()
|
// return bookmarkLocationsDao.getAllBookmarksLocationsPlace()
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue