summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-02-17 15:49:33 +0100
committerKonstantin Käfer <mail@kkaefer.com>2017-02-17 16:08:32 +0100
commit9f1ffdd3e04e7334271a12ab493618f1c38f555a (patch)
tree6c9b8b1e5b587a3ff347651002d0826b8201260e
parentd4c569a0187d98bca6b71671fa5daf6ee09747da (diff)
downloadqtlocation-mapboxgl-upstream/android-access-token-validation.tar.gz
[android] change Mapbox#getInstance to Mapbox#initialize and disallow duplicate initializationupstream/android-access-token-validation
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java28
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/DuplicateInitializationException.java20
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidAccessTokenException.java2
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java2
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java2
-rw-r--r--platform/android/MapboxGLAndroidSDKWearTestApp/src/main/java/com/mapbox/weartestapp/MapboxApplication.java2
6 files changed, 38 insertions, 18 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 f954073974..ead83fe1f2 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
@@ -8,6 +8,7 @@ import android.text.TextUtils;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.exceptions.InvalidAccessTokenException;
+import com.mapbox.mapboxsdk.exceptions.DuplicateInitializationException;
import com.mapbox.mapboxsdk.location.LocationSource;
import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
import com.mapbox.services.android.telemetry.MapboxTelemetry;
@@ -22,25 +23,26 @@ public final class Mapbox {
private Boolean connected;
/**
- * Get an instance of Mapbox.
+ * Initialize the Mapbox object.
* <p>
* This class manages the active access token, application context and connectivity state.
* </p>
*
* @param context Android context which holds or is an application context
* @param accessToken Mapbox access token
- * @return the single instance of Mapbox
*/
- public static synchronized Mapbox getInstance(@NonNull Context context, @NonNull String accessToken) {
- if (INSTANCE == null) {
- Context appContext = context.getApplicationContext();
- INSTANCE = new Mapbox(appContext, accessToken);
- LocationEngine locationEngine = new LocationSource(appContext);
- locationEngine.setPriority(LocationEnginePriority.NO_POWER);
- MapboxTelemetry.getInstance().initialize(appContext, accessToken, locationEngine);
- ConnectivityReceiver.instance(appContext);
+ public static void initialize(@NonNull Context context, @NonNull String accessToken) {
+ if (INSTANCE != null) {
+ throw new DuplicateInitializationException();
}
- return INSTANCE;
+
+ validateAccessToken(accessToken);
+ Context appContext = context.getApplicationContext();
+ INSTANCE = new Mapbox(appContext, accessToken);
+ LocationEngine locationEngine = new LocationSource(appContext);
+ locationEngine.setPriority(LocationEnginePriority.NO_POWER);
+ MapboxTelemetry.getInstance().initialize(appContext, accessToken, locationEngine);
+ ConnectivityReceiver.instance(appContext);
}
private Mapbox(@NonNull Context context, @NonNull String accessToken) {
@@ -54,7 +56,6 @@ public final class Mapbox {
* @return Mapbox Access Token
*/
public static String getAccessToken() {
- validateAccessToken();
return INSTANCE.accessToken;
}
@@ -63,8 +64,7 @@ public final class Mapbox {
*
* @throws InvalidAccessTokenException exception thrown when not using a valid accessToken
*/
- private static void validateAccessToken() throws InvalidAccessTokenException {
- String accessToken = INSTANCE.accessToken;
+ public static void validateAccessToken(String accessToken) throws InvalidAccessTokenException {
if (TextUtils.isEmpty(accessToken) || (!accessToken.toLowerCase(MapboxConstants.MAPBOX_LOCALE).startsWith("pk.")
&& !accessToken.toLowerCase(MapboxConstants.MAPBOX_LOCALE).startsWith("sk."))) {
throw new InvalidAccessTokenException();
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/DuplicateInitializationException.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/DuplicateInitializationException.java
new file mode 100644
index 0000000000..3cedf1ade8
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/DuplicateInitializationException.java
@@ -0,0 +1,20 @@
+package com.mapbox.mapboxsdk.exceptions;
+
+import android.content.Context;
+import android.os.Bundle;
+
+import com.mapbox.mapboxsdk.maps.MapView;
+
+/**
+ * A {@code DuplicateInitializationException} is thrown by {@link com.mapbox.mapboxsdk.Mapbox}
+ * when the global Mapbox singleton has been initialized already
+ *
+ * @see MapView#onCreate(Bundle)
+ * @see com.mapbox.mapboxsdk.Mapbox#getInstance(Context, String)
+ */
+public class DuplicateInitializationException extends RuntimeException {
+
+ public DuplicateInitializationException() {
+ super("Mapbox singleton can only be initialized once");
+ }
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidAccessTokenException.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidAccessTokenException.java
index 95851fc1d2..f05d69d7bc 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidAccessTokenException.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidAccessTokenException.java
@@ -16,7 +16,7 @@ import com.mapbox.mapboxsdk.maps.MapView;
public class InvalidAccessTokenException extends RuntimeException {
public InvalidAccessTokenException() {
- super("\nUsing MapView requires setting a valid access token. Use Mapbox.getInstance(Context context, "
+ super("\nUsing MapView requires setting a valid access token. Use Mapbox.initialize(Context context, "
+ "String accessToken) to provide one. "
+ "\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.");
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java
index a10c6eaad3..5c0ea017bb 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java
@@ -37,7 +37,7 @@ public class MapboxApplication extends Application {
.penaltyDeath()
.build());
- Mapbox.getInstance(getApplicationContext(), getString(R.string.mapbox_access_token));
+ Mapbox.initialize(getApplicationContext(), getString(R.string.mapbox_access_token));
}
private void initializeLogger() {
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java
index c2b0cb0769..408c534ab5 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java
@@ -67,7 +67,7 @@ public class OfflineActivity extends AppCompatActivity
// You can use Mapbox.setConnected(Boolean) to manually set the connectivity
// state of your app. This will override any checks performed via the ConnectivityManager.
- // Mapbox.getInstance().setConnected(false);
+ // Mapbox.setConnected(false);
Boolean connected = Mapbox.isConnected();
Timber.d(String.format(MapboxConstants.MAPBOX_LOCALE,
"Mapbox is connected: %b", connected));
diff --git a/platform/android/MapboxGLAndroidSDKWearTestApp/src/main/java/com/mapbox/weartestapp/MapboxApplication.java b/platform/android/MapboxGLAndroidSDKWearTestApp/src/main/java/com/mapbox/weartestapp/MapboxApplication.java
index cbbdcb8493..564bc62442 100644
--- a/platform/android/MapboxGLAndroidSDKWearTestApp/src/main/java/com/mapbox/weartestapp/MapboxApplication.java
+++ b/platform/android/MapboxGLAndroidSDKWearTestApp/src/main/java/com/mapbox/weartestapp/MapboxApplication.java
@@ -11,7 +11,7 @@ public class MapboxApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
- Mapbox.getInstance(getApplicationContext(), getString(R.string.mapbox_access_token));
+ Mapbox.initialize(getApplicationContext(), getString(R.string.mapbox_access_token));
LeakCanary.install(this);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()