diff options
author | Guardiola31337 <pablo.guardiola@mapbox.com> | 2019-05-09 18:15:31 -0400 |
---|---|---|
committer | Guardiola31337 <pablo.guardiola@mapbox.com> | 2019-05-21 10:34:58 -0400 |
commit | 08ce07cab3d5c74f744298a1bd5e7eadd64f563b (patch) | |
tree | d4b876bd0bd2512152ab673701758937ba415593 | |
parent | c2f974f2a57348213cc02d2472f9c54ba86e6010 (diff) | |
download | qtlocation-mapboxgl-upstream/pg-external-sku-handling.tar.gz |
[android] add support for external sdk clients to be able to manage the tokens on their sideupstream/pg-external-sku-handling
3 files changed, 68 insertions, 12 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() { 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 ffcf8d74ec..7ea958b736 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,18 @@ 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"; + + /** + * Key used to switch SKU token management on/off in AndroidManifest.xml + */ + public static final String KEY_META_DATA_MANAGE_SKU_TOKEN = "com.mapbox.ManageSkuToken"; + + /** + * Default value for KEY_META_DATA_MANAGE_SKU_TOKEN (default is on) + */ + public static final boolean DEFAULT_MANAGE_SKU_TOKEN = true; + /** * Unmeasured state */ diff --git a/platform/android/gradle/dependencies.gradle b/platform/android/gradle/dependencies.gradle index d681853a6b..a6b205309b 100644 --- a/platform/android/gradle/dependencies.gradle +++ b/platform/android/gradle/dependencies.gradle @@ -11,7 +11,7 @@ ext { mapboxTelemetry : '4.4.1', mapboxCore : '1.3.0', mapboxGestures : '0.4.2', - mapboxAccounts : '0.1.0', + mapboxAccounts : '0.2.0', supportLib : '27.1.1', constraintLayout: '1.1.2', uiAutomator : '2.1.3', |