Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Commit ebe6a30

Browse files
authored
[android] Make sure onFinish has new camera position after camera.move (#10324)
1 parent 9b41791 commit ebe6a30

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java

+4
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,10 @@ public void run() {
713713
// MapChange.REGION_DID_CHANGE_ANIMATED is not called for `jumpTo`
714714
// invalidate camera position to provide OnCameraChange event.
715715
invalidateCameraPosition();
716+
717+
if (callback != null) {
718+
callback.onFinish();
719+
}
716720
}
717721
});
718722
}

platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java

-3
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,6 @@ final void moveCamera(MapboxMap mapboxMap, CameraUpdate update, MapboxMap.Cancel
9898
cancelTransitions();
9999
cameraChangeDispatcher.onCameraMoveStarted(OnCameraMoveStartedListener.REASON_API_ANIMATION);
100100
mapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom);
101-
if (callback != null) {
102-
callback.onFinish();
103-
}
104101
cameraChangeDispatcher.onCameraIdle();
105102
}
106103
}

platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java

+30-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.mapbox.mapboxsdk.annotations.PolygonOptions;
1515
import com.mapbox.mapboxsdk.annotations.Polyline;
1616
import com.mapbox.mapboxsdk.annotations.PolylineOptions;
17+
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
1718
import com.mapbox.mapboxsdk.constants.MapboxConstants;
1819
import com.mapbox.mapboxsdk.exceptions.InvalidMarkerPositionException;
1920
import com.mapbox.mapboxsdk.geometry.LatLng;
@@ -31,9 +32,12 @@
3132
import java.util.ArrayList;
3233
import java.util.List;
3334

35+
import timber.log.Timber;
36+
3437
import static android.support.test.espresso.Espresso.onView;
3538
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
3639
import static android.support.test.espresso.matcher.ViewMatchers.withId;
40+
import static com.mapbox.mapboxsdk.testapp.utils.TestConstants.LAT_LNG_DELTA;
3741
import static junit.framework.TestCase.assertFalse;
3842
import static junit.framework.TestCase.assertNotNull;
3943
import static org.junit.Assert.assertEquals;
@@ -90,8 +94,33 @@ public void onViewAction(UiController uiController, View view) {
9094
}
9195

9296
//
93-
// CameraForLatLngBounds
97+
// Camera tests
9498
//
99+
@Test
100+
public void testCameraPositionOnFinish() {
101+
ViewUtils.checkViewIsDisplayed(R.id.mapView);
102+
onView(withId(R.id.mapView)).perform(new MapboxMapAction(new InvokeViewAction() {
103+
@Override
104+
public void onViewAction(UiController uiController, View view) {
105+
106+
final LatLng latLng = new LatLng(30.0, 30.0);
107+
mapboxMap.moveCamera(CameraUpdateFactory.newLatLng(latLng), new MapboxMap.CancelableCallback() {
108+
@Override
109+
public void onCancel() {
110+
}
111+
112+
@Override
113+
public void onFinish() {
114+
LatLng cameraPositionLatLng = mapboxMap.getCameraPosition().target;
115+
Timber.d(cameraPositionLatLng.toString());
116+
assertEquals(cameraPositionLatLng.getLatitude(), latLng.getLatitude(), LAT_LNG_DELTA);
117+
assertEquals(cameraPositionLatLng.getLongitude(), latLng.getLongitude(), LAT_LNG_DELTA);
118+
}
119+
});
120+
}
121+
}));
122+
}
123+
95124
@Test
96125
public void testCameraForLatLngBounds() {
97126
ViewUtils.checkViewIsDisplayed(R.id.mapView);

0 commit comments

Comments
 (0)