From 0da94ace198275a88eaf60f1ceb94805e093f5e6 Mon Sep 17 00:00:00 2001 From: Kanahia Date: Tue, 12 Dec 2023 23:15:48 +0530 Subject: [PATCH] Added filter to Open Street Maps --- .../NearbyParentFragmentContract.java | 1 - .../fragments/NearbyParentFragment.java | 168 +++++++++--------- .../NearbyParentFragmentPresenter.java | 5 +- 3 files changed, 89 insertions(+), 85 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java b/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java index 09e0ceccb..56d2655ae 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java @@ -40,7 +40,6 @@ public interface NearbyParentFragmentContract { void setTabItemContributions(); boolean isDetailsBottomSheetVisible(); void setBottomSheetDetailsSmaller(); - boolean isSearchThisAreaButtonVisible(); void setRecyclerViewAdapterAllSelected(); void setRecyclerViewAdapterItemsGreyedOut(); void setCheckBoxAction(); 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 6d6dcf8d6..1b6ea3337 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 @@ -34,6 +34,7 @@ import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.MotionEvent; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; @@ -132,6 +133,7 @@ import javax.inject.Inject; import javax.inject.Named; import kotlin.Unit; import org.jetbrains.annotations.NotNull; +import org.osmdroid.events.MapEventsReceiver; import org.osmdroid.events.MapListener; import org.osmdroid.events.ScrollEvent; import org.osmdroid.events.ZoomEvent; @@ -143,6 +145,7 @@ import org.osmdroid.util.constants.GeoConstants; import org.osmdroid.views.CustomZoomButtonsController; import org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener; import org.osmdroid.views.overlay.ItemizedOverlayWithFocus; +import org.osmdroid.views.overlay.MapEventsOverlay; import org.osmdroid.views.overlay.Overlay; import org.osmdroid.views.overlay.OverlayItem; import org.osmdroid.views.overlay.ScaleBarOverlay; @@ -385,18 +388,12 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment compassArrow.setRotation(0); }); - //cameraMoveListener= () -> presenter.onCameraMove(mapBox.getCameraPosition().target); - //TODO - addCheckBoxCallback(); presenter.attachView(this); isPermissionDenied = false; recenterToUserLocation = false; - - //initRvNearbyList(); initThemePreferences(); initViews(); presenter.setActionListeners(applicationKvStore); - initNearbyFilter(); org.osmdroid.config.Configuration.getInstance().load(this.getContext(),PreferenceManager.getDefaultSharedPreferences(this.getContext())); mMapView.setTilesScaledToDpi(true); @@ -431,12 +428,23 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment TilesOverlay tilesOverlay = new TilesOverlay(tileProvider, this.getContext()); tilesOverlay.setLoadingBackgroundColor(Color.TRANSPARENT); mMapView.getOverlays().add(tilesOverlay); + mMapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() { + @Override + public boolean singleTapConfirmedHelper(GeoPoint p) { + if(isListBottomSheetExpanded()) { + // Back should first hide the bottom sheet if it is expanded + hideBottomSheet(); + } else if (isDetailsBottomSheetVisible()) { + hideBottomDetailsSheet(); + } + return false; + } - RotationGestureOverlay rotationGestureOverlay = new RotationGestureOverlay(mMapView,compassArrow,compassBg); - rotationGestureOverlay.setEnabled(true); - mMapView.setMultiTouchControls(true); - mMapView.getOverlays().add(rotationGestureOverlay); - setSearchThisAreaButtonVisibility(false); + @Override + public boolean longPressHelper(GeoPoint p) { + return false; + } + })); mMapView.addMapListener(new MapListener() { @Override public boolean onScroll(ScrollEvent event) { @@ -449,7 +457,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment mylocation.setLongitude(lastMapFocus.getLongitude()); Float distance = mylocation.distanceTo(dest_location);//in meters if (lastMapFocus != null) { - if (isNetworkConnectionEstablished()) { + if (isNetworkConnectionEstablished() && (event.getX() > 0 || event.getY() > 0)) { if (distance > 2000.0) { setSearchThisAreaButtonVisibility(true); } else { @@ -463,7 +471,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment return true; } - @Override public boolean onZoom(ZoomEvent event) { return false; @@ -471,53 +478,21 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment }); - + RotationGestureOverlay rotationGestureOverlay = new RotationGestureOverlay(mMapView,compassArrow,compassBg); + rotationGestureOverlay.setEnabled(true); + mMapView.setMultiTouchControls(true); + mMapView.getOverlays().add(rotationGestureOverlay); if(nearbyParentFragmentInstanceReadyCallback!=null){ nearbyParentFragmentInstanceReadyCallback.onReady(); } + + initNearbyFilter(); + addCheckBoxCallback(); performMapReadyActions(); moveCameraToPosition(lastMapFocus); - setSearchThisAreaButtonVisibility(false); initRvNearbyList(); - //TODO Remove MapBox Code -// mapView.onCreate(savedInstanceState); -// mapView.getMapAsync(mapBoxMap -> { -// mapBox =mapBoxMap; -// initViews(); -// presenter.setActionListeners(applicationKvStore); -// initNearbyFilter(); -// mapBoxMap.setStyle(isDarkTheme? MapStyle.DARK : -// MapStyle.OUTDOORS, style -> { -// final UiSettings uiSettings = mapBoxMap.getUiSettings(); -// uiSettings.setCompassGravity(Gravity.BOTTOM | Gravity.LEFT); -// uiSettings.setCompassMargins(12, 0, 0, 24); -// uiSettings.setLogoEnabled(false); -// uiSettings.setAttributionEnabled(false); -// uiSettings.setRotateGesturesEnabled(false); -// isMapBoxReady =true; -// if(nearbyParentFragmentInstanceReadyCallback!=null){ -// nearbyParentFragmentInstanceReadyCallback.onReady(); -// } -// performMapReadyActions(); -// final CameraPosition cameraPosition; -// if(applicationKvStore.getString("LastLocation")!=null) { // Checking for last searched location -// String[] locationLatLng = applicationKvStore.getString("LastLocation").split(","); -// cameraPosition = new CameraPosition.Builder() -// .target(new LatLng(Double.valueOf(locationLatLng[0]), -// Double.valueOf(locationLatLng[1]))) -// .zoom(ZOOM_LEVEL) -// .build(); -// }else { -// cameraPosition = new CameraPosition.Builder() -// .target(new LatLng(51.50550, -0.07520)) -// .zoom(ZOOM_OUT) -// .build(); -// } -// mapBoxMap.setCameraPosition(cameraPosition); -// onResume(); -// }); -// }); + onResume(); tvAttribution.setText(Html.fromHtml(getString(R.string.map_attribution))); tvAttribution.setMovementMethod(LinkMovementMethod.getInstance()); @@ -580,6 +555,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment rvNearbyList.setLayoutManager(new LinearLayoutManager(getContext())); adapter = new PlaceAdapter(bookmarkLocationDao, place -> { + recenterMap(place.getLocation()); centerMapToPlace(place); return Unit.INSTANCE; }, @@ -710,7 +686,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment @Override public void onPause() { super.onPause(); - mapView.onPause(); mMapView.onPause(); compositeDisposable.clear(); presenter.detachView(); @@ -724,9 +699,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment locationManager.removeLocationListener(presenter); locationManager.unregisterLocationManager(); } - if (null != mapBox) { - mapBox.removeOnCameraMoveListener(cameraMoveListener); - } }catch (final Exception e){ Timber.e(e); //Broadcast receivers should always be unregistered inside catch, you never know if they were already registered or not @@ -810,16 +782,16 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment public void initNearbyFilter() { nearbyFilterList.setVisibility(View.GONE); - + hideBottomSheet(); searchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> { + LayoutUtils.setLayoutHeightAllignedToWidth(1.25, nearbyFilterList); if (hasFocus) { - presenter.searchViewGainedFocus(); nearbyFilterList.setVisibility(View.VISIBLE); + presenter.searchViewGainedFocus(); } else { nearbyFilterList.setVisibility(View.GONE); } }); - recyclerView.setHasFixedSize(true); recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); @@ -848,7 +820,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment nearbyFilterList.getLayoutParams().width = (int) LayoutUtils.getScreenWidth(getActivity(), 0.75); recyclerView.setAdapter(nearbyFilterSearchRecyclerViewAdapter); LayoutUtils.setLayoutHeightAllignedToWidth(1.25, nearbyFilterList); - compositeDisposable.add(RxSearchView.queryTextChanges(searchView) .takeUntil(RxView.detaches(searchView)) .debounce(500, TimeUnit.MILLISECONDS) @@ -1327,7 +1298,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment private void updateMapMarkers(final NearbyController.NearbyPlacesInfo nearbyPlacesInfo, final boolean shouldUpdateSelectedMarker) { presenter.updateMapMarkers(nearbyPlacesInfo, selectedMarker,shouldUpdateSelectedMarker); //TODO - //setFilterState(); + setFilterState(); } @@ -1364,11 +1335,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } } - @Override - public boolean isSearchThisAreaButtonVisible() { - return searchThisAreaButton.getVisibility() == View.VISIBLE; - } - @Override public void setRecyclerViewAdapterAllSelected() { if (nearbyFilterSearchRecyclerViewAdapter != null && NearbyController.currentLocation != null) { @@ -1652,13 +1618,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment final boolean displayWlm, final boolean filterForPlaceState, final boolean filterForAllNoneType) { - // Remove the previous markers before updating them - hideAllMarkers(); - //TODO - // clearAllMarkers(); - - filteredMarkers = new ArrayList<>(); + clearAllMarkers(); for (final MarkerPlaceGroup markerPlaceGroup : NearbyController.markerLabelList) { final Place place = markerPlaceGroup.getPlace(); @@ -1704,11 +1665,15 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment updateMarker(markerPlaceGroup.getIsBookmarked(), place, NearbyController.currentLocation); } } -// TODO -// mapBox.clear(); -// mapBox.addMarkers(filteredMarkers); -// addNearbyMarkersToMapBoxMap(filteredMarkers,null); - addMarkersToMap(filteredMarkers,null); + if (selectedLabels == null || selectedLabels.size() == 0 ) { + ArrayList markerArrayList = new ArrayList<>(); + for (final MarkerPlaceGroup markerPlaceGroup : NearbyController.markerLabelList) { + NearbyBaseMarker nearbyBaseMarker = new NearbyBaseMarker(); + nearbyBaseMarker.place(markerPlaceGroup.getPlace()); + markerArrayList.add(nearbyBaseMarker); + } + addMarkersToMap(markerArrayList, null); + } } @Override @@ -1724,7 +1689,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment */ public void updateMarker(final boolean isBookmarked, final Place place, @Nullable final fr.free.nrw.commons.location.LatLng curLatLng) { if(curLatLng != null){ - addMarkerToMap(place,isBookmarked); + addMarkerToMap(place,isBookmarked); } } @@ -1786,9 +1751,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment * @param nearbyBaseMarkers The list of Place objects containing information about the locations. */ private void addMarkersToMap(List nearbyBaseMarkers,final Marker selectedMarker){ - //TODO Work on bookmarks - //clearAllMarkers(); - ArrayList items = new ArrayList<>(); for (int i = 0;i 2000.0) { + setSearchThisAreaButtonVisibility(true); + } else { + setSearchThisAreaButtonVisibility(false); + } + } + } else { + setSearchThisAreaButtonVisibility(false); + } + } } @Override @@ -2117,6 +2099,28 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment scaleBarOverlay.setBackgroundPaint(barPaint); scaleBarOverlay.enableScaleBar(); mMapView.getOverlays().add(scaleBarOverlay); + mMapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() { + @Override + public boolean singleTapConfirmedHelper(GeoPoint p) { + if(isListBottomSheetExpanded()) { + // Back should first hide the bottom sheet if it is expanded + hideBottomSheet(); + } else if (isDetailsBottomSheetVisible()) { + hideBottomDetailsSheet(); + } + return true; + } + + @Override + public boolean longPressHelper(GeoPoint p) { + return false; + } + })); + RotationGestureOverlay rotationGestureOverlay = new RotationGestureOverlay(mMapView,compassArrow,compassBg); + rotationGestureOverlay.setEnabled(true); + mMapView.setMultiTouchControls(true); + mMapView.getOverlays().add(rotationGestureOverlay); + } /** diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.java b/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.java index c06d9890c..3a37b5e30 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/presenter/NearbyParentFragmentPresenter.java @@ -296,7 +296,7 @@ public class NearbyParentFragmentPresenter (LocationUtils.commonsLatLngToMapBoxLatLng(NearbyController.latestSearchLocation)); if (nearbyParentFragmentView.isNetworkConnectionEstablished()) { if (distance > NearbyController.latestSearchRadius) { - nearbyParentFragmentView.setSearchThisAreaButtonVisibility(true); + //nearbyParentFragmentView.setSearchThisAreaButtonVisibility(true); } else { nearbyParentFragmentView.setSearchThisAreaButtonVisibility(false); } @@ -308,12 +308,13 @@ public class NearbyParentFragmentPresenter @Override public void filterByMarkerType(List