summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java112
1 files changed, 112 insertions, 0 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
new file mode 100644
index 0000000000..4fd0200a37
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java
@@ -0,0 +1,112 @@
+package com.mapbox.mapboxsdk;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.support.annotation.NonNull;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+
+import com.mapbox.android.accounts.v1.MapboxAccounts;
+import com.mapbox.mapboxsdk.constants.MapboxConstants;
+
+/**
+ * REMOVAL OR MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS
+ * OF SERVICE
+ *
+ * The following code is used to access Mapbox's Mapping APIs.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * You can access the Mapbox Terms of Service at https://www.mapbox.com/tos/
+ */
+class 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 String skuToken;
+
+ AccountsManager() {
+ String userId = validateUserId();
+ validateRotation(userId);
+ }
+
+ private String validateUserId() {
+ SharedPreferences sharedPreferences = getSharedPreferences();
+ String userId = sharedPreferences.getString(PREFERENCE_USER_ID, "");
+ if (TextUtils.isEmpty(userId)) {
+ userId = generateUserId();
+ SharedPreferences.Editor editor = getSharedPreferences().edit();
+ editor.putString(PREFERENCE_USER_ID, userId);
+ editor.apply();
+ }
+
+ return userId;
+ }
+
+ 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)) {
+ skuToken = generateSkuToken(userId);
+ timestamp = persistRotation(skuToken);
+ }
+ }
+
+ String getSkuToken() {
+ if (isExpired()) {
+ SharedPreferences sharedPreferences = getSharedPreferences();
+ String userId = sharedPreferences.getString(PREFERENCE_USER_ID, "");
+ skuToken = generateSkuToken(userId);
+ timestamp = persistRotation(skuToken);
+ }
+
+ return skuToken;
+ }
+
+ private boolean isExpired() {
+ return isExpired(getNow(), timestamp);
+ }
+
+ static boolean isExpired(long now, long then) {
+ return ((now - then) > DateUtils.HOUR_IN_MILLIS);
+ }
+
+ private long persistRotation(String skuToken) {
+ long now = getNow();
+ SharedPreferences.Editor editor = getSharedPreferences().edit();
+ editor.putLong(PREFERENCE_TIMESTAMP, now);
+ editor.putString(PREFERENCE_SKU_TOKEN, skuToken);
+ editor.apply();
+ return now;
+ }
+
+ @NonNull
+ private SharedPreferences getSharedPreferences() {
+ return Mapbox.getApplicationContext()
+ .getSharedPreferences(MapboxConstants.MAPBOX_SHARED_PREFERENCES, Context.MODE_PRIVATE);
+ }
+
+ static long getNow() {
+ return System.currentTimeMillis();
+ }
+
+ @NonNull
+ private String generateUserId() {
+ return MapboxAccounts.obtainEndUserId();
+ }
+
+ @NonNull
+ private String generateSkuToken(String userId) {
+ return MapboxAccounts.obtainMapsSkuUserToken(userId);
+ }
+}