diff --git a/gradle.properties b/gradle.properties
index 74406c825..17a8f7ac8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -25,7 +25,7 @@ mavenGroupId = com.microsoft.graph
mavenArtifactId = microsoft-graph-core
mavenMajorVersion = 1
mavenMinorVersion = 0
-mavenPatchVersion = 5
+mavenPatchVersion = 6
mavenArtifactSuffix =
nightliesUrl = http://dl.bintray.com/MicrosoftGraph/Maven
diff --git a/pom.xml b/pom.xml
index b86d28dbe..dc77c1858 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
com.microsoft.graph
microsoft-graph-core
- 1.0.5
+ 1.0.6
pom
diff --git a/readme.md b/readme.md
index a706ea649..b280482d9 100644
--- a/readme.md
+++ b/readme.md
@@ -20,7 +20,7 @@ repositories {
dependencies {
// Include the sdk as a dependency
- implementation 'com.microsoft.graph:microsoft-graph-core:1.0.5'
+ implementation 'com.microsoft.graph:microsoft-graph-core:1.0.6'
}
```
@@ -32,7 +32,7 @@ Add the dependency in `dependencies` in pom.xml
com.microsoft.graph
microsoft-graph-core
- 1.0.5
+ 1.0.6
```
diff --git a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java
index 51d3569c5..b5da60c3f 100644
--- a/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java
+++ b/src/main/java/com/microsoft/graph/httpcore/TelemetryHandler.java
@@ -1,6 +1,7 @@
package com.microsoft.graph.httpcore;
import java.io.IOException;
+import java.lang.reflect.Field;
import com.microsoft.graph.httpcore.middlewareoption.TelemetryOptions;
@@ -10,31 +11,60 @@
public class TelemetryHandler implements Interceptor{
- public static final String SDK_VERSION = "SdkVersion";
- public static final String VERSION = "v1.0.5";
- public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
- public static final String JAVA_VERSION_PREFIX = "java";
- public static final String CLIENT_REQUEST_ID = "client-request-id";
+ public static final String SDK_VERSION = "SdkVersion";
+ public static final String VERSION = "v1.0.6";
+ public static final String GRAPH_VERSION_PREFIX = "graph-java-core";
+ public static final String JAVA_VERSION_PREFIX = "java";
+ public static final String ANDROID_VERSION_PREFIX = "android";
+ public static final String CLIENT_REQUEST_ID = "client-request-id";
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request request = chain.request();
- Request.Builder telemetryAddedBuilder = request.newBuilder();
+ @Override
+ public Response intercept(Chain chain) throws IOException {
+ final Request request = chain.request();
+ final Request.Builder telemetryAddedBuilder = request.newBuilder();
- TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
- if(telemetryOptions == null)
- telemetryOptions = new TelemetryOptions();
+ TelemetryOptions telemetryOptions = request.tag(TelemetryOptions.class);
+ if(telemetryOptions == null)
+ telemetryOptions = new TelemetryOptions();
- String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")";
- String javaVersion = System.getProperty("java.version");
- String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion;
- telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);
+ final String featureUsage = "(featureUsage=" + telemetryOptions.getFeatureUsage() + ")";
+ final String javaVersion = System.getProperty("java.version");
+ final String androidVersion = getAndroidAPILevel();
+ final String sdkversion_value = GRAPH_VERSION_PREFIX + "/" + VERSION + " " + featureUsage + " " + JAVA_VERSION_PREFIX + "/" + javaVersion + " " + ANDROID_VERSION_PREFIX + "/" + androidVersion;
+ telemetryAddedBuilder.addHeader(SDK_VERSION, sdkversion_value);
- if(request.header(CLIENT_REQUEST_ID) == null) {
- telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId());
- }
+ if(request.header(CLIENT_REQUEST_ID) == null) {
+ telemetryAddedBuilder.addHeader(CLIENT_REQUEST_ID, telemetryOptions.getClientRequestId());
+ }
- return chain.proceed(telemetryAddedBuilder.build());
- }
+ return chain.proceed(telemetryAddedBuilder.build());
+ }
+ private String androidAPILevel;
+ private String getAndroidAPILevel() {
+ if(androidAPILevel == null) {
+ androidAPILevel = getAndroidAPILevelInternal();
+ }
+ return androidAPILevel;
+ }
+ private String getAndroidAPILevelInternal() {
+ try {
+ final Class> buildClass = Class.forName("android.os.Build");
+ final Class>[] subclasses = buildClass.getDeclaredClasses();
+ Class> versionClass = null;
+ for(final Class> subclass : subclasses) {
+ if(subclass.getName().endsWith("VERSION")) {
+ versionClass = subclass;
+ break;
+ }
+ }
+ final Field sdkVersionField = versionClass.getField("SDK_INT");
+ final Object value = sdkVersionField.get(null);
+ final String valueStr = String.valueOf(value);
+ return valueStr == null || valueStr == "" ? "0" : valueStr;
+ } catch (IllegalAccessException | ClassNotFoundException | NoSuchFieldException ex) {
+ // we're not on android and return "0" to align with java version which returns "0" when running on android
+ return "0";
+ }
+ }
}
diff --git a/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java b/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java
index deab260a4..8fcffc3df 100644
--- a/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java
+++ b/src/test/java/com/microsoft/graph/httpcore/TelemetryHandlerTest.java
@@ -5,7 +5,6 @@
import java.io.IOException;
-import org.junit.Ignore;
import org.junit.Test;
import okhttp3.Interceptor;
@@ -13,60 +12,61 @@
import okhttp3.Request;
import okhttp3.Response;
-@Ignore
public class TelemetryHandlerTest {
- @Test
- public void telemetryInitTest() {
- TelemetryHandler telemetryHandler = new TelemetryHandler();
- assertNotNull(telemetryHandler);
- }
-
- @Test
- public void interceptTest() throws IOException {
- String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
- +TelemetryHandler.VERSION;
- OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
- @Override
- public Request authenticateRequest(Request request) {
- return request;
- }
- });
- Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
- Response response = client.newCall(request).execute();
- assertNotNull(response);
- assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
- }
-
- @Test
- public void arrayInterceptorsTest() throws IOException {
-
- AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {
-
- @Override
- public Request authenticateRequest(Request request) {
- return request;
- }
- });
- Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
- OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
- String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
- +TelemetryHandler.VERSION;
- Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
- Response response = client.newCall(request).execute();
- assertNotNull(response);
- assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
- }
-
- @Test
- public void arrayInterceptorEmptyTest() throws IOException {
- Interceptor[] interceptors = null;
- OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
- String expectedHeader = TelemetryHandler.SDK_VERSION + TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
- +TelemetryHandler.VERSION;
- Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
- Response response = client.newCall(request).execute();
- assertNotNull(response);
- assertTrue(response.request().header("SdkVersion").contains(expectedHeader));
- }
-
+ @Test
+ public void telemetryInitTest() {
+ final TelemetryHandler telemetryHandler = new TelemetryHandler();
+ assertNotNull(telemetryHandler);
+ }
+
+ @Test
+ public void interceptTest() throws IOException {
+ final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+ +TelemetryHandler.VERSION;
+ final OkHttpClient client = HttpClients.createDefault(new ICoreAuthenticationProvider() {
+ @Override
+ public Request authenticateRequest(Request request) {
+ return request;
+ }
+ });
+ final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
+ final Response response = client.newCall(request).execute();
+ assertNotNull(response);
+ assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
+ assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.ANDROID_VERSION_PREFIX));
+ assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(TelemetryHandler.JAVA_VERSION_PREFIX));
+ }
+
+ @Test
+ public void arrayInterceptorsTest() throws IOException {
+
+ final AuthenticationHandler authenticationHandler = new AuthenticationHandler(new ICoreAuthenticationProvider() {
+
+ @Override
+ public Request authenticateRequest(Request request) {
+ return request;
+ }
+ });
+ final Interceptor[] interceptors = {new RetryHandler(), new RedirectHandler(), authenticationHandler};
+ final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
+ final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+ +TelemetryHandler.VERSION;
+ final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
+ final Response response = client.newCall(request).execute();
+ assertNotNull(response);
+ assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
+ }
+
+ @Test
+ public void arrayInterceptorEmptyTest() throws IOException {
+ final Interceptor[] interceptors = null;
+ final OkHttpClient client = HttpClients.createFromInterceptors(interceptors);
+ final String expectedHeader = TelemetryHandler.GRAPH_VERSION_PREFIX +"/"
+ +TelemetryHandler.VERSION;
+ final Request request = new Request.Builder().url("https://graph.microsoft.com/v1.0/users/").build();
+ final Response response = client.newCall(request).execute();
+ assertNotNull(response);
+ assertTrue(response.request().header(TelemetryHandler.SDK_VERSION).contains(expectedHeader));
+ }
+
}