From 3215519040c2e7a2f5131898de7549eda42ce32a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Fri, 2 Nov 2018 13:04:23 +0100 Subject: [android] deliver onMapReady only if mapboxMap is not null --- .../src/main/java/com/mapbox/mapboxsdk/maps/MapView.java | 3 ++- .../mapboxsdk/testapp/activity/BaseActivityTest.java | 11 ++++++++++- .../testapp/utils/OnMapReadyIdlingResource.java | 16 ++++++++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 3b1352e153..3d56e134f6 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -951,7 +951,8 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback { */ @UiThread public void getMapAsync(final @NonNull OnMapReadyCallback callback) { - if (mapCallback.isInitialLoad()) { + if (mapCallback.isInitialLoad() || mapboxMap == null) { + // Add callback to the list only if the style hasn't loaded, or the drawing surface isn't ready mapCallback.addOnMapReadyCallback(callback); } else { callback.onMapReady(mapboxMap); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/activity/BaseActivityTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/activity/BaseActivityTest.java index b1bcead8b9..a0168cc63d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/activity/BaseActivityTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/activity/BaseActivityTest.java @@ -6,17 +6,21 @@ import android.support.test.espresso.IdlingRegistry; import android.support.test.espresso.IdlingResourceTimeoutException; import android.support.test.espresso.ViewInteraction; import android.support.test.rule.ActivityTestRule; + import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction; import com.mapbox.mapboxsdk.testapp.action.WaitAction; import com.mapbox.mapboxsdk.testapp.utils.OnMapReadyIdlingResource; + import junit.framework.Assert; + import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TestName; + import timber.log.Timber; import static android.support.test.espresso.Espresso.onView; @@ -38,7 +42,12 @@ public abstract class BaseActivityTest { @Before public void beforeTest() { try { - Timber.e(String.format("%s - %s", testNameRule.getMethodName(), "@Before test: register idle resource")); + Timber.e(String.format( + "%s - %s - %s", + getClass().getSimpleName(), + testNameRule.getMethodName(), + "@Before test: register idle resource" + )); idlingResource = new OnMapReadyIdlingResource(rule.getActivity()); IdlingRegistry.getInstance().register(idlingResource); Espresso.onIdle(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java index 16959ed5b5..312350f28c 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java @@ -11,21 +11,20 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; +import junit.framework.Assert; + public class OnMapReadyIdlingResource implements IdlingResource, OnMapReadyCallback { private MapboxMap mapboxMap; private IdlingResource.ResourceCallback resourceCallback; - private final Handler handler = new Handler(Looper.getMainLooper()); @WorkerThread public OnMapReadyIdlingResource(final Activity activity) { - handler.post(new Runnable() { - @Override - public void run() { - MapView mapView = (MapView) activity.findViewById(R.id.mapView); - if (mapView != null) { - mapView.getMapAsync(OnMapReadyIdlingResource.this); - } + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(() -> { + MapView mapView = activity.findViewById(R.id.mapView); + if (mapView != null) { + mapView.getMapAsync(OnMapReadyIdlingResource.this); } }); } @@ -51,6 +50,7 @@ public class OnMapReadyIdlingResource implements IdlingResource, OnMapReadyCallb @Override public void onMapReady(MapboxMap mapboxMap) { + Assert.assertNotNull("MapboxMap should not be null", mapboxMap); this.mapboxMap = mapboxMap; if (resourceCallback != null) { resourceCallback.onTransitionToIdle(); -- cgit v1.2.1