From 67d9afe77eb91cd4859f772943df455476d62939 Mon Sep 17 00:00:00 2001 From: Ufald <39745544+Ufald@users.noreply.github.com> Date: Mon, 5 Aug 2019 16:30:42 +0530 Subject: [PATCH] Center map on location clicked in nearby list and notification card(#2060) (#2366) * center map on location clicked in nearby (#2060) * improved animation * Center map on location clicked in nearby list * removed unnecessary methods * center map on location clicked in nearby notification card * some minor changes * travis build error * resolved errors * Tidy up PR --- .../nrw/commons/nearby/NearbyFragment.java | 11 +++++++++ .../nrw/commons/nearby/NearbyMapFragment.java | 23 +++++++++++++++++-- .../nearby/NearbyNotificationCardView.java | 16 ++++++++++--- .../nrw/commons/nearby/PlaceRenderer.java | 5 +++- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java index 062f7da90..ec00043d6 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java @@ -705,6 +705,17 @@ public class NearbyFragment extends CommonsDaggerSupportFragment } } + + /** + * Centers the map in nearby fragment to a given place + * @param place is new center of the map + */ + public void centerMapToPlace(Place place) { + if (nearbyMapFragment != null) { + nearbyMapFragment.centerMapToPlace(place); + } + } + public boolean isBottomSheetExpanded() { return bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED; } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index bbc6cd09e..67c41c951 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -225,7 +225,6 @@ public class NearbyMapFragment extends DaggerFragment { Timber.d("curLatLng found, setting up map view..."); setupMapView(savedInstanceState); } - setHasOptionsMenu(false); return mapView; @@ -254,6 +253,7 @@ public class NearbyMapFragment extends DaggerFragment { }); } + /** * Updates map slightly means it doesn't updates all nearby markers around. It just updates * location tracker marker of user. @@ -719,7 +719,6 @@ public class NearbyMapFragment extends DaggerFragment { passInfoToSheet(place); bottomSheetListBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); - } return false; }); @@ -1040,6 +1039,25 @@ public class NearbyMapFragment extends DaggerFragment { } } + /** + * Centers the map in nearby fragment to a given place + * @param place is new center of the map + */ + public void centerMapToPlace(Place place) { + mapView.getMapAsync(mapboxMap1 -> { + CameraPosition position = new CameraPosition.Builder() + .target(isBottomListSheetExpanded ? + new LatLng(place.location.getLatitude()- CAMERA_TARGET_SHIFT_FACTOR_LANDSCAPE, + place.getLocation().getLongitude()) + : new LatLng(place.getLocation().getLatitude(), place.getLocation().getLongitude(), 0)) // Sets the new camera position + .zoom(isBottomListSheetExpanded ? + ZOOM_LEVEL + :mapboxMap.getCameraPosition().zoom) // Same zoom level + .build(); + mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 1000); + }); + } + public void updateMarker(boolean isBookmarked, Place place) { @@ -1077,5 +1095,6 @@ public class NearbyMapFragment extends DaggerFragment { } + } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java index b5bc8b219..30acedb8a 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java @@ -17,6 +17,8 @@ import fr.free.nrw.commons.utils.SwipableCardView; import fr.free.nrw.commons.utils.ViewUtil; import timber.log.Timber; +import static fr.free.nrw.commons.contributions.MainActivity.NEARBY_TAB_POSITION; + /** * Custom card view for nearby notification card view on main screen, above contributions list */ @@ -66,7 +68,6 @@ public class NearbyNotificationCardView extends SwipableCardView { progressBar = rootView.findViewById(R.id.progressBar); - setActionListeners(); } @Override @@ -81,8 +82,16 @@ public class NearbyNotificationCardView extends SwipableCardView { } - private void setActionListeners() { - this.setOnClickListener(view -> ((MainActivity)getContext()).viewPager.setCurrentItem(1)); + private void setActionListeners(Place place) { + this.setOnClickListener(view -> { + MainActivity m = (MainActivity) getContext(); + + // Change to nearby tab + m.viewPager.setCurrentItem(NEARBY_TAB_POSITION); + + // Center the map to the place + ((NearbyFragment) m.contributionsActivityPagerAdapter.getItem(NEARBY_TAB_POSITION)).centerMapToPlace(place); + }); } @Override public boolean onSwipe(View view) { @@ -120,6 +129,7 @@ public class NearbyNotificationCardView extends SwipableCardView { contentLayout.setVisibility(VISIBLE); // Make progress bar invisible once data is ready progressBar.setVisibility(GONE); + setActionListeners(place); // And content views visible since they are ready notificationTitle.setVisibility(VISIBLE); notificationDistance.setVisibility(VISIBLE); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java index 3d45b080f..50291dcb8 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java @@ -116,9 +116,12 @@ public class PlaceRenderer extends Renderer { ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(lastPosition, buttonLayout.getHeight()); } } - + if (onBookmarkClick == null) { + ((NearbyFragment) fragment.getParentFragment()).centerMapToPlace(place); + } }; view.setOnClickListener(listener); + view.requestFocus(); view.setOnFocusChangeListener((view1, hasFocus) -> { if (!hasFocus && buttonLayout.isShown()) {