diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java index a5a54ec4a..7d40d2543 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java @@ -33,7 +33,7 @@ public abstract class PlaceDao { @Query("SELECT * from place WHERE entityID=:entity") public abstract Place getPlace(String entity); - @Query("SELECT * from place WHERE latitude>=:latBegin AND longitude>=:lngBegin " + @Query("SELECT * from place WHERE name!='' AND latitude>=:latBegin AND longitude>=:lngBegin " + "AND latitude<:latEnd AND longitude<:lngEnd") public abstract List fetchPlaces(double latBegin, double lngBegin, double latEnd, double lngEnd); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java index 942a25f33..4a4e359f5 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java @@ -5,6 +5,7 @@ import io.reactivex.Completable; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import timber.log.Timber; /** * The LocalDataSource class for Places @@ -29,7 +30,7 @@ public class PlacesLocalDataSource { return placeDao.getPlace(entityID); } - public List fetchPlaces(final LatLng mapTopRight, final LatLng mapBottomLeft) { + public List fetchPlaces(final LatLng mapBottomLeft, final LatLng mapTopRight) { class Constraint { final double latBegin; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index 5be19ea40..8aa4d63b6 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -1852,20 +1852,24 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment clickedMarker.closeInfoWindow(); } clickedMarker = marker1; - binding.bottomSheetDetails.dataCircularProgress.setVisibility(View.VISIBLE); - binding.bottomSheetDetails.icon.setVisibility(View.GONE); - binding.bottomSheetDetails.wikiDataLl.setVisibility(View.GONE); - if (Objects.equals(place.name, "")) { - getPlaceData(place.getWikiDataEntityId(), place, marker1, isBookMarked); + if (!isNetworkErrorOccurred) { + binding.bottomSheetDetails.dataCircularProgress.setVisibility(View.VISIBLE); + binding.bottomSheetDetails.icon.setVisibility(View.GONE); + binding.bottomSheetDetails.wikiDataLl.setVisibility(View.GONE); + if (Objects.equals(place.name, "")) { + getPlaceData(place.getWikiDataEntityId(), place, marker1, isBookMarked); + } else { + marker.showInfoWindow(); + binding.bottomSheetDetails.dataCircularProgress.setVisibility(View.GONE); + binding.bottomSheetDetails.icon.setVisibility(View.VISIBLE); + binding.bottomSheetDetails.wikiDataLl.setVisibility(View.VISIBLE); + passInfoToSheet(place); + hideBottomSheet(); + } + bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } else { marker.showInfoWindow(); - binding.bottomSheetDetails.dataCircularProgress.setVisibility(View.GONE); - binding.bottomSheetDetails.icon.setVisibility(View.VISIBLE); - binding.bottomSheetDetails.wikiDataLl.setVisibility(View.VISIBLE); - passInfoToSheet(place); - hideBottomSheet(); } - bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); return true; }); return marker; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.kt b/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.kt index 835149da9..927a92b31 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.kt @@ -512,9 +512,22 @@ class NearbyParentFragmentPresenter } } } else { - localPlaceSearchJob = scope.launch { + loadPlacesDataAyncJob?.cancel() + localPlaceSearchJob = scope.launch(Dispatchers.IO) { delay(LOCAL_SCROLL_DELAY) - + val mapFocus = nearbyParentFragmentView.mapFocus + val markerPlaceGroups = placesRepository.fetchPlaces( + nearbyParentFragmentView.screenBottomLeft, + nearbyParentFragmentView.screenTopRight + ).sortedBy { it.getDistanceInDouble(mapFocus) }.take(NearbyController.MAX_RESULTS) + .map { + MarkerPlaceGroup( + bookmarkLocationDao.findBookmarkLocation(it), it + ) + } + ensureActive() + NearbyController.currentLocation = mapFocus + schedulePlacesUpdate(markerPlaceGroups, force = true) } } }