summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main
diff options
context:
space:
mode:
authorPablo Guardiola <pablo.guardiola@mapbox.com>2019-05-30 11:24:24 -0400
committerGitHub <noreply@github.com>2019-05-30 11:24:24 -0400
commit0181ef8f63351aa2724d5a89ba9ea3e5484e3aaf (patch)
tree93699aea34417baed261b9c592032e8710cebdf3 /platform/android/MapboxGLAndroidSDK/src/main
parent316584fabc4dacaa53e7a208a88f5f87e6f243b0 (diff)
downloadqtlocation-mapboxgl-0181ef8f63351aa2724d5a89ba9ea3e5484e3aaf.tar.gz
[android] add support for external sdk clients to be able to manage the tokens on their side (#14631)
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java96
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java6
2 files changed, 83 insertions, 19 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java
index 4fd0200a37..5b8f10e01d 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java
@@ -2,41 +2,94 @@ package com.mapbox.mapboxsdk;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.text.format.DateUtils;
import com.mapbox.android.accounts.v1.MapboxAccounts;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
+import com.mapbox.mapboxsdk.log.Logger;
+
+import static com.mapbox.mapboxsdk.constants.MapboxConstants.KEY_PREFERENCE_SKU_TOKEN;
/**
* REMOVAL OR MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS
* OF SERVICE
- *
+ * <p>
* The following code is used to access Mapbox's Mapping APIs.
- *
+ * <p>
* Removal or modification of this code when used with Mapbox's Mapping APIs
* can result in termination of your agreement and/or your account with
* Mapbox.
- *
+ * <p>
* Using this code to access Mapbox Mapping APIs from outside the Mapbox Maps
* SDK also violates the Mapbox Terms of Service. On Android, Mapping APIs
* should be accessed using the methods documented at
* https://www.mapbox.com/android.
- *
+ * <p>
* You can access the Mapbox Terms of Service at https://www.mapbox.com/tos/
*/
class AccountsManager {
+ private static final String TAG = "Mbgl-AccountsManager";
private static final String PREFERENCE_USER_ID = "com.mapbox.mapboxsdk.accounts.userid";
private static final String PREFERENCE_TIMESTAMP = "com.mapbox.mapboxsdk.accounts.timestamp";
- private static final String PREFERENCE_SKU_TOKEN = "com.mapbox.mapboxsdk.accounts.skutoken";
- private long timestamp;
+ private SharedPreferences sharedPreferences;
private String skuToken;
+ private long timestamp;
+ private boolean isManaged;
AccountsManager() {
- String userId = validateUserId();
- validateRotation(userId);
+ isManaged = isSkuTokenManaged();
+ initialize();
+ }
+
+ @VisibleForTesting
+ AccountsManager(SharedPreferences sharedPreferences, boolean isManaged) {
+ this.sharedPreferences = sharedPreferences;
+ this.isManaged = isManaged;
+ initialize();
+ }
+
+ private void initialize() {
+ retrieveSkuTokenAndTimestamp();
+ if (isManaged) {
+ String userId = validateUserId();
+ validateRotation(userId);
+ }
+ }
+
+ private boolean isSkuTokenManaged() {
+ boolean value = MapboxConstants.DEFAULT_MANAGE_SKU_TOKEN;
+ try {
+ // Try getting a custom value from the app Manifest
+ ApplicationInfo appInfo = retrieveApplicationInfo();
+ if (appInfo.metaData != null) {
+ value = appInfo.metaData.getBoolean(
+ MapboxConstants.KEY_META_DATA_MANAGE_SKU_TOKEN,
+ MapboxConstants.DEFAULT_MANAGE_SKU_TOKEN
+ );
+ }
+ } catch (Exception exception) {
+ Logger.e(TAG, "Failed to read the package metadata: ", exception);
+ }
+
+ return value;
+ }
+
+ private ApplicationInfo retrieveApplicationInfo() throws PackageManager.NameNotFoundException {
+ return Mapbox.getApplicationContext().getPackageManager().getApplicationInfo(
+ Mapbox.getApplicationContext().getPackageName(),
+ PackageManager.GET_META_DATA);
+ }
+
+ private void retrieveSkuTokenAndTimestamp() {
+ SharedPreferences sharedPreferences = getSharedPreferences();
+ skuToken = sharedPreferences.getString(KEY_PREFERENCE_SKU_TOKEN, "");
+ timestamp = sharedPreferences.getLong(PREFERENCE_TIMESTAMP, 0L);
}
private String validateUserId() {
@@ -53,23 +106,25 @@ class AccountsManager {
}
private void validateRotation(String userId) {
- SharedPreferences sharedPreferences = getSharedPreferences();
- timestamp = sharedPreferences.getLong(PREFERENCE_TIMESTAMP, 0L);
- skuToken = sharedPreferences.getString(PREFERENCE_SKU_TOKEN, "");
- if (timestamp == 0L || TextUtils.isEmpty(skuToken)) {
+ if (TextUtils.isEmpty(skuToken) || timestamp == 0L) {
skuToken = generateSkuToken(userId);
timestamp = persistRotation(skuToken);
}
}
String getSkuToken() {
- if (isExpired()) {
+ if (isManaged) {
+ if (isExpired()) {
+ SharedPreferences sharedPreferences = getSharedPreferences();
+ String userId = sharedPreferences.getString(PREFERENCE_USER_ID, "");
+ skuToken = generateSkuToken(userId);
+ timestamp = persistRotation(skuToken);
+ }
+ } else {
SharedPreferences sharedPreferences = getSharedPreferences();
- String userId = sharedPreferences.getString(PREFERENCE_USER_ID, "");
- skuToken = generateSkuToken(userId);
- timestamp = persistRotation(skuToken);
+ String notManagedSkuToken = sharedPreferences.getString(KEY_PREFERENCE_SKU_TOKEN, "");
+ skuToken = notManagedSkuToken;
}
-
return skuToken;
}
@@ -85,15 +140,18 @@ class AccountsManager {
long now = getNow();
SharedPreferences.Editor editor = getSharedPreferences().edit();
editor.putLong(PREFERENCE_TIMESTAMP, now);
- editor.putString(PREFERENCE_SKU_TOKEN, skuToken);
+ editor.putString(KEY_PREFERENCE_SKU_TOKEN, skuToken);
editor.apply();
return now;
}
@NonNull
private SharedPreferences getSharedPreferences() {
- return Mapbox.getApplicationContext()
+ if (sharedPreferences == null) {
+ sharedPreferences = Mapbox.getApplicationContext()
.getSharedPreferences(MapboxConstants.MAPBOX_SHARED_PREFERENCES, Context.MODE_PRIVATE);
+ }
+ return sharedPreferences;
}
static long getNow() {
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java
index 30ff649032..2c906e7203 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java
@@ -37,6 +37,12 @@ public class MapboxConstants {
*/
public static final boolean DEFAULT_MEASURE_TILE_DOWNLOAD_ON = false;
+ public static final String KEY_PREFERENCE_SKU_TOKEN = "com.mapbox.mapboxsdk.accounts.skutoken";
+
+ public static final String KEY_META_DATA_MANAGE_SKU_TOKEN = "com.mapbox.ManageSkuToken";
+
+ public static final boolean DEFAULT_MANAGE_SKU_TOKEN = true;
+
/**
* Unmeasured state
*/