diff options
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.java | 66 |
1 files changed, 55 insertions, 11 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..c3d927a287 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,12 +2,18 @@ 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.Nullable; 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 @@ -27,16 +33,48 @@ import com.mapbox.mapboxsdk.constants.MapboxConstants; * 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; + @Nullable private String skuToken; + private boolean isManaged; AccountsManager() { - String userId = validateUserId(); - validateRotation(userId); + isManaged = isSkuTokenManaged(); + if (isManaged) { + String userId = validateUserId(); + validateRotation(userId); + } else { + timestamp = 0L; + skuToken = null; + } + } + + 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 String validateUserId() { @@ -55,21 +93,27 @@ class AccountsManager { private void validateRotation(String userId) { SharedPreferences sharedPreferences = getSharedPreferences(); timestamp = sharedPreferences.getLong(PREFERENCE_TIMESTAMP, 0L); - skuToken = sharedPreferences.getString(PREFERENCE_SKU_TOKEN, ""); + skuToken = sharedPreferences.getString(KEY_PREFERENCE_SKU_TOKEN, ""); if (timestamp == 0L || TextUtils.isEmpty(skuToken)) { skuToken = generateSkuToken(userId); timestamp = persistRotation(skuToken); } } + @Nullable 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,7 +129,7 @@ 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; } @@ -93,7 +137,7 @@ class AccountsManager { @NonNull private SharedPreferences getSharedPreferences() { return Mapbox.getApplicationContext() - .getSharedPreferences(MapboxConstants.MAPBOX_SHARED_PREFERENCES, Context.MODE_PRIVATE); + .getSharedPreferences(MapboxConstants.MAPBOX_SHARED_PREFERENCES, Context.MODE_PRIVATE); } static long getNow() { |