summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-07-09 12:35:38 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-07-11 11:02:24 +0200
commit348c437c0a3fb177dc53b2a0b0a64e422964b82f (patch)
treea10f675f9a33177e91c63fd431b2ff0668588122
parent1c931e4006e669816d24b35897bd4c24a8993ae4 (diff)
downloadqtlocation-mapboxgl-348c437c0a3fb177dc53b2a0b0a64e422964b82f.tar.gz
[android] throw configuration exception when accessing Mapbox services with an invalid token
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java22
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/MapboxConfigurationException.java8
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TelemetryDefinition.java5
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java5
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxTest.java66
5 files changed, 105 insertions, 1 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
index 5a1c49a0a4..01c82ddad4 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
@@ -5,6 +5,7 @@ import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
+
import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException;
import com.mapbox.mapboxsdk.log.Logger;
@@ -87,6 +88,20 @@ public final class Mapbox {
public static void setAccessToken(String accessToken) {
validateMapbox();
INSTANCE.accessToken = accessToken;
+
+ // cleanup telemetry which is dependent on an access token
+ if (INSTANCE.telemetry != null) {
+ INSTANCE.telemetry.disableTelemetrySession();
+ INSTANCE.telemetry = null;
+ }
+
+ // initialize components dependent on a token
+ if (isAccessTokenValid(accessToken)) {
+ initializeTelemetry();
+ INSTANCE.accounts = new AccountsManager();
+ } else {
+ INSTANCE.accounts = null;
+ }
FileSource.getInstance(getApplicationContext()).setAccessToken(accessToken);
}
@@ -97,6 +112,13 @@ public final class Mapbox {
* @return the SKU token
*/
public static String getSkuToken() {
+ if (INSTANCE.accounts == null) {
+ throw new MapboxConfigurationException(
+ "A valid 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."
+ + "Currently provided token is: " + INSTANCE.accessToken);
+ }
return INSTANCE.accounts.getSkuToken();
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/MapboxConfigurationException.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/MapboxConfigurationException.java
index 86032aa2b5..431de85f05 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/MapboxConfigurationException.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/MapboxConfigurationException.java
@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.exceptions;
import android.content.Context;
+import android.support.annotation.NonNull;
/**
* A MapboxConfigurationException is thrown by MapboxMap when the SDK hasn't been properly initialised.
@@ -22,4 +23,11 @@ public class MapboxConfigurationException extends RuntimeException {
+ "\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.");
}
+
+ /**
+ * Creates a Mapbox configuration exception thrown by MapboxMap when the SDK hasn't been properly initialised.
+ */
+ public MapboxConfigurationException(@NonNull String message) {
+ super(message);
+ }
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TelemetryDefinition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TelemetryDefinition.java
index fd9950b141..863d821a12 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TelemetryDefinition.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TelemetryDefinition.java
@@ -33,6 +33,11 @@ public interface TelemetryDefinition {
void setUserTelemetryRequestState(boolean enabled);
/**
+ * Disables a started telemetry service for this session only.
+ */
+ void disableTelemetrySession();
+
+ /**
* Set the end-user selected state to participate or opt-out in telemetry collection.
*/
void setDebugLoggingEnabled(boolean debugLoggingEnabled);
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
index 92e9f44d50..e33fb7c1b5 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java
@@ -79,6 +79,11 @@ public class TelemetryImpl implements TelemetryDefinition {
}
}
+ @Override
+ public void disableTelemetrySession() {
+ telemetry.disable();
+ }
+
/**
* Set the debug logging state of telemetry.
*
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxTest.java
index 50c10766af..5b737dd4d2 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxTest.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxTest.java
@@ -5,10 +5,18 @@ import android.support.test.runner.AndroidJUnit4;
import com.mapbox.mapboxsdk.AppCenter;
import com.mapbox.mapboxsdk.Mapbox;
+import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.assertTrue;
@@ -18,6 +26,16 @@ public class MapboxTest extends AppCenter {
private static final String ACCESS_TOKEN = "pk.0000000001";
private static final String ACCESS_TOKEN_2 = "pk.0000000002";
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private String realToken;
+
+ @Before
+ public void setup() {
+ realToken = Mapbox.getAccessToken();
+ }
+
@Test
@UiThreadTest
public void testConnected() {
@@ -37,11 +55,57 @@ public class MapboxTest extends AppCenter {
@Test
@UiThreadTest
public void setAccessToken() {
- String realToken = Mapbox.getAccessToken();
Mapbox.setAccessToken(ACCESS_TOKEN);
assertSame(ACCESS_TOKEN, Mapbox.getAccessToken());
Mapbox.setAccessToken(ACCESS_TOKEN_2);
assertSame(ACCESS_TOKEN_2, Mapbox.getAccessToken());
+ }
+
+ @Test
+ @UiThreadTest
+ public void setInvalidAccessToken() {
+ final String invalidAccessToken = "xyz";
+ expectedException.expect(MapboxConfigurationException.class);
+ expectedException.expectMessage(
+ "A valid 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."
+ + "Currently provided token is: " + invalidAccessToken
+ );
+
+ Mapbox.setAccessToken(invalidAccessToken);
+ assertNull(Mapbox.getTelemetry());
+ Mapbox.getSkuToken();
+ }
+
+ @Test
+ @UiThreadTest
+ public void setNullAccessToken() {
+ expectedException.expect(MapboxConfigurationException.class);
+ expectedException.expectMessage(
+ "A valid 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."
+ + "Currently provided token is: " + null
+ );
+
+ Mapbox.setAccessToken(null);
+ assertNull(Mapbox.getTelemetry());
+ Mapbox.getSkuToken();
+ }
+
+ @Test
+ @UiThreadTest
+ public void setValidAccessToken() {
+ final String invalidAccessToken = "xyz";
+ Mapbox.setAccessToken(invalidAccessToken);
+ Mapbox.setAccessToken(ACCESS_TOKEN);
+ assertNotNull(Mapbox.getTelemetry());
+ assertNotNull(Mapbox.getSkuToken());
+ }
+
+ @After
+ public void tearDown() {
Mapbox.setAccessToken(realToken);
}
} \ No newline at end of file