diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/mvp/contract/NearbyMapContract.java b/app/src/main/java/fr/free/nrw/commons/nearby/mvp/contract/NearbyMapContract.java index e1cc4fd4d..1a9cf7cdd 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/mvp/contract/NearbyMapContract.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/mvp/contract/NearbyMapContract.java @@ -19,9 +19,7 @@ import fr.free.nrw.commons.nearby.mvp.presenter.NearbyParentFragmentPresenter; /** * This interface defines specific View and UserActions for map - * part of the nearby. On the other hand both extends methods - * from parent View and UserActions where general methods are - * defined (in Nearby Contract) + * part of the nearby. */ public interface NearbyMapContract { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/mvp/fragments/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/mvp/fragments/NearbyMapFragment.java index 2c79f9dac..d277763be 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/mvp/fragments/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/mvp/fragments/NearbyMapFragment.java @@ -65,8 +65,7 @@ import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween; * @see #getMapAsync(OnMapReadyCallback) */ public class NearbyMapFragment extends CommonsDaggerSupportFragment - implements OnMapReadyCallback, - NearbyMapContract.View{ + implements OnMapReadyCallback, NearbyMapContract.View{ @Inject BookmarkLocationsDao bookmarkLocationDao; @@ -75,6 +74,7 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment private MapFragment.OnMapViewReadyCallback mapViewReadyCallback; private MapboxMap mapboxMap; private MapView map; + private final double CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT = 0.005; private final double CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE = 0.004; private static final double ZOOM_LEVEL = 14f; @@ -260,30 +260,36 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment } } + /** + * Clears map, adds nearby markers to map + * @param latLng current location + * @param placeList all places will be displayed on the map + * @param selectedMarker clicked marker by user + * @param nearbyParentFragmentPresenter presenter + */ @Override public void updateMapMarkers(LatLng latLng, List placeList , Marker selectedMarker , NearbyParentFragmentPresenter nearbyParentFragmentPresenter) { - Log.d("denemeTest","updateMapMarkers, curLatng:"+latLng); + Timber.d("Updates map markers"); List customBaseMarkerOptions = NearbyController .loadAttractionsFromLocationToBaseMarkerOptions(latLng, // Curlatlang will be used to calculate distances placeList, getActivity(), bookmarkLocationDao.getAllBookmarksLocations()); mapboxMap.clear(); - // TODO: set search latlang here - - /*mapboxMap.animateCamera(CameraUpdateFactory - .newCameraPosition(cameraPosition), 1000);*/ - // TODO: set position depening to botom sheet position heere - // We are trying to find nearby places around our custom searched area, thus custom parameter is nonnull addNearbyMarkersToMapBoxMap(customBaseMarkerOptions, selectedMarker, nearbyParentFragmentPresenter); // Re-enable mapbox gestures on custom location markers load mapboxMap.getUiSettings().setAllGesturesEnabled(true); } + /** + * Makes map camera follow users location with animation + * @param curLatLng current location of user + */ @Override public void updateMapToTrackPosition(LatLng curLatLng) { + Timber.d("Updates map camera to track user position"); CameraPosition cameraPosition = new CameraPosition.Builder().target (LocationUtils.commonsLatLngToMapBoxLatLng(curLatLng)).build(); mapboxMap.setCameraPosition(cameraPosition); @@ -300,11 +306,11 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment * Should be called only on creation of mapboxMap, there * is other method to update markers location with users * move. + * @param curLatLng current location */ @Override public void addCurrentLocationMarker(LatLng curLatLng) { - Log.d("denemeTest","addCurrentLocationMarker"); - Timber.d("addCurrentLocationMarker is called"); + Timber.d("Adds current location marker"); Icon icon = IconFactory.getInstance(getContext()).fromResource(R.drawable.current_location_marker); @@ -312,9 +318,7 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment .position(new com.mapbox.mapboxsdk.geometry.LatLng(curLatLng.getLatitude(), curLatLng.getLongitude())); currentLocationMarkerOptions.setIcon(icon); // Set custom icon - Marker currentLocationMarker = mapboxMap.addMarker(currentLocationMarkerOptions); - - List circle = createCircleArray(curLatLng.getLatitude(), curLatLng.getLongitude(), + List circle = UiUtils.createCircleArray(curLatLng.getLatitude(), curLatLng.getLongitude(), curLatLng.getAccuracy() * 2, 100); PolygonOptions currentLocationPolygonOptions = new PolygonOptions() @@ -324,50 +328,24 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment mapboxMap.addPolygon(currentLocationPolygonOptions); } - //TODO: go to util /** - * Creates a series of points that create a circle on the map. - * Takes the center latitude, center longitude of the circle, - * the radius in meter and the number of nodes of the circle. - * - * @return List List of LatLng points of the circle. + * Adds markers to map + * @param baseMarkerList is markers will be added + * @param selectedMarker is selected marker by user + * @param nearbyParentFragmentPresenter presenter */ - private List createCircleArray( - double centerLat, double centerLong, float radius, int nodes) { - List circle = new ArrayList<>(); - float radiusKilometer = radius / 1000; - double radiusLong = radiusKilometer - / (111.320 * Math.cos(centerLat * Math.PI / 180)); - double radiusLat = radiusKilometer / 110.574; - - for (int i = 0; i < nodes; i++) { - double theta = ((double) i / (double) nodes) * (2 * Math.PI); - double nodeLongitude = centerLong + radiusLong * Math.cos(theta); - double nodeLatitude = centerLat + radiusLat * Math.sin(theta); - circle.add(new com.mapbox.mapboxsdk.geometry.LatLng(nodeLatitude, nodeLongitude)); - } - return circle; - } - @Override public void addNearbyMarkersToMapBoxMap(@Nullable List baseMarkerList , Marker selectedMarker , NearbyParentFragmentPresenter nearbyParentFragmentPresenter) { Log.d("denemeTest","add markers to map"); mapboxMap.addMarkers(baseMarkerList); - mapboxMap.setOnInfoWindowCloseListener(marker -> { - /*if (marker == selected) { - bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); - }*/ - }); map.getMapAsync(mapboxMap -> { mapboxMap.addMarkers(baseMarkerList); - //fabRecenter.setVisibility(View.VISIBLE); setMapMarkerActions(selectedMarker, nearbyParentFragmentPresenter); }); } - @Override public LatLng getCameraTarget() { return LocationUtils @@ -405,6 +383,12 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment }); } + /** + * Sets marker icon according to marker status. Sets title and distance. + * @param isBookmarked true if place is bookmarked + * @param place + * @param curLatLng current location + */ public void updateMarker(boolean isBookmarked, Place place, @Nullable LatLng curLatLng) { VectorDrawableCompat vectorDrawable; @@ -446,7 +430,7 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment */ @Override public void centerMapToPlace(Place place, boolean isPortraitMode) { - Log.d("denemeSon","isPortyrait:"+isPortraitMode); + Timber.d("Map is centered to place"); double cameraShift; if (isPortraitMode) { cameraShift = CAMERA_TARGET_SHIFT_FACTOR_PORTRAIT; diff --git a/app/src/main/java/fr/free/nrw/commons/utils/UiUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/UiUtils.java index 81e02b9ea..ca2253e78 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/UiUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/UiUtils.java @@ -6,6 +6,11 @@ import android.graphics.Canvas; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import android.util.DisplayMetrics; +import com.mapbox.mapboxsdk.geometry.LatLng; + +import java.util.ArrayList; +import java.util.List; + public class UiUtils { /** @@ -43,4 +48,28 @@ public class UiUtils { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return px / ((float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT); } + + /** + * Creates a series of points that create a circle on the map. + * Takes the center latitude, center longitude of the circle, + * the radius in meter and the number of nodes of the circle. + * + * @return List List of LatLng points of the circle. + */ + public static List createCircleArray( + double centerLat, double centerLong, float radius, int nodes) { + List circle = new ArrayList<>(); + float radiusKilometer = radius / 1000; + double radiusLong = radiusKilometer + / (111.320 * Math.cos(centerLat * Math.PI / 180)); + double radiusLat = radiusKilometer / 110.574; + + for (int i = 0; i < nodes; i++) { + double theta = ((double) i / (double) nodes) * (2 * Math.PI); + double nodeLongitude = centerLong + radiusLong * Math.cos(theta); + double nodeLatitude = centerLat + radiusLat * Math.sin(theta); + circle.add(new com.mapbox.mapboxsdk.geometry.LatLng(nodeLatitude, nodeLongitude)); + } + return circle; + } }