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

Commit

Permalink
[android] check for Mapbox#INSTANCE when initializing the MapView
Browse files Browse the repository at this point in the history
  • Loading branch information
LukasPaczos authored and Łukasz Paczos committed Apr 9, 2019
1 parent 104091c commit f22c014
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -180,4 +180,11 @@ static boolean isAccessTokenValid(@Nullable String accessToken) {
accessToken = accessToken.trim().toLowerCase(MapboxConstants.MAPBOX_LOCALE);
return accessToken.length() != 0 && (accessToken.startsWith("pk.") || accessToken.startsWith("sk."));
}

/**
* Internal use. Check if the {@link Mapbox#INSTANCE} is present.
*/
public static boolean hasInstance() {
return INSTANCE != null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.mapbox.mapboxsdk.R;
import com.mapbox.mapboxsdk.annotations.Annotation;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException;
import com.mapbox.mapboxsdk.location.LocationComponent;
import com.mapbox.mapboxsdk.maps.renderer.MapRenderer;
import com.mapbox.mapboxsdk.maps.renderer.glsurfaceview.GLSurfaceViewMapRenderer;
Expand Down Expand Up @@ -120,6 +121,10 @@ protected void initialize(@NonNull final Context context, @NonNull final MapboxM
return;
}

if (!Mapbox.hasInstance()) {
throw new MapboxConfigurationException();
}

// hide surface until map is fully loaded #10990
setForeground(new ColorDrawable(options.getForegroundLoadColor()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
import android.content.Context;
import android.support.annotation.CallSuper;
import android.support.annotation.Keep;

import android.support.annotation.NonNull;

import com.mapbox.mapboxsdk.LibraryLoader;
import com.mapbox.mapboxsdk.log.Logger;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.storage.FileSource;
Expand All @@ -22,6 +23,10 @@
@Keep
public abstract class MapRenderer implements MapRendererScheduler {

static {
LibraryLoader.load();
}

private static final String TAG = "Mbgl-MapRenderer";

// Holds the pointer to the native peer after initialisation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
package com.mapbox.mapboxsdk;

import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.DisplayMetrics;

import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException;
import com.mapbox.mapboxsdk.maps.MapView;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertSame;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

Expand All @@ -19,6 +32,9 @@ public class MapboxTest {
private Context context;
private Context appContext;

@Rule
public ExpectedException expectedException = ExpectedException.none();

@Before
public void before() {
context = mock(Context.class);
Expand Down Expand Up @@ -66,9 +82,28 @@ public void testBlaBlaToken() {
assertFalse(Mapbox.isAccessTokenValid("blabla"));
}

@Test
public void testNoInstance() {
DisplayMetrics displayMetrics = mock(DisplayMetrics.class);
Resources resources = mock(Resources.class);
when(resources.getDisplayMetrics()).thenReturn(displayMetrics);
when(context.getResources()).thenReturn(resources);
TypedArray typedArray = mock(TypedArray.class);
when(context.obtainStyledAttributes(nullable(AttributeSet.class), any(int[].class), anyInt(), anyInt()))
.thenReturn(typedArray);

expectedException.expect(MapboxConfigurationException.class);
expectedException.expectMessage(
"\nUsing MapView requires calling Mapbox.getInstance(Context context, String accessToken) before "
+ "inflating or creating the view. The access token parameter is required when using a Mapbox service."
+ "\nPlease see https://www.mapbox.com/help/create-api-access-token/ to learn how to create one."
+ "\nMore information in this guide https://www.mapbox.com/help/first-steps-android-sdk/#access-tokens."
);
new MapView(context);
}

@After
public void after() {
MapboxInjector.clear();
}

}

0 comments on commit f22c014

Please sign in to comment.