Skip to content

Commit

Permalink
Merge branch 'android-unity-changes' into device-data-collection
Browse files Browse the repository at this point in the history
  • Loading branch information
kattrali committed Jun 27, 2018
2 parents 0b10611 + 1e34c3e commit 1229c2e
Show file tree
Hide file tree
Showing 12 changed files with 297 additions and 226 deletions.
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.bugsnag.android;

import static com.bugsnag.android.BugsnagTestUtils.generateClient;
import static com.bugsnag.android.BugsnagTestUtils.streamableToJson;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;

import org.json.JSONException;
import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -30,9 +30,13 @@ public class AppDataSummaryTest {
*/
@Before
public void setUp() throws Exception {
Configuration config = new Configuration("some-api-key");
Context context = InstrumentationRegistry.getContext();
appData = new AppDataSummary(context, config);
AppDataCollector appDataCollector = new AppDataCollector(generateClient());
appData = appDataCollector.generateAppDataSummary();
}

@After
public void tearDown() throws Exception {
Async.cancelTasks();
}

@Test
Expand Down
20 changes: 13 additions & 7 deletions sdk/src/androidTest/java/com/bugsnag/android/AppDataTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.bugsnag.android;

import static com.bugsnag.android.BugsnagTestUtils.generateClient;
import static com.bugsnag.android.BugsnagTestUtils.generateSessionTracker;
import static com.bugsnag.android.BugsnagTestUtils.streamableToJson;
import static org.junit.Assert.assertEquals;
Expand All @@ -15,6 +16,7 @@

import org.json.JSONException;
import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -27,8 +29,7 @@ public class AppDataTest {

private Configuration config;
private AppData appData;
private Context context;
private SessionTracker sessionTracker;
private AppDataCollector appDataCollector;

/**
* Configures a new AppData for testing accessors + serialisation
Expand All @@ -38,9 +39,14 @@ public class AppDataTest {
@Before
public void setUp() throws Exception {
config = new Configuration("some-api-key");
context = InstrumentationRegistry.getContext();
sessionTracker = generateSessionTracker();
appData = new AppData(context, config, sessionTracker);
Client client = new Client(InstrumentationRegistry.getContext(), config);
appDataCollector = new AppDataCollector(client);
appData = appDataCollector.generateAppData();
}

@After
public void tearDown() throws Exception {
Async.cancelTasks();
}

@Test
Expand Down Expand Up @@ -102,7 +108,7 @@ public void testJsonSerialisation() throws JSONException, IOException {
public void testAppVersionOverride() throws JSONException, IOException {
String appVersion = "1.2.3";
config.setAppVersion(appVersion);
appData = new AppData(context, config, sessionTracker);
appData = appDataCollector.generateAppData();

JSONObject appDataJson = streamableToJson(appData);
assertEquals(appVersion, appDataJson.get("version"));
Expand All @@ -112,7 +118,7 @@ public void testAppVersionOverride() throws JSONException, IOException {
public void testReleaseStageOverride() throws JSONException, IOException {
String releaseStage = "test-stage";
config.setReleaseStage(releaseStage);
appData = new AppData(context, config, sessionTracker);
appData = appDataCollector.generateAppData();

JSONObject appDataJson = streamableToJson(appData);
assertEquals(releaseStage, appDataJson.get("releaseStage"));
Expand Down
17 changes: 17 additions & 0 deletions sdk/src/androidTest/java/com/bugsnag/android/ClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static com.bugsnag.android.BugsnagTestUtils.generateClient;
import static com.bugsnag.android.BugsnagTestUtils.getSharedPrefs;
import static com.bugsnag.android.BugsnagTestUtils.streamableToJson;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
Expand Down Expand Up @@ -318,6 +319,22 @@ public void testAppDataSummary() {
assertNotEquals(client.getAppDataSummary(), appData);
}

@Test
public void testAppDataMetaData() {
Client client = generateClient();
MetaData metaData = new MetaData();
Map<String, Object> app = metaData.getTab("app");
assertEquals(0, app.size());

client.populateAppMetaData(metaData);
assertEquals(5, app.size());
assertEquals("Bugsnag Android Tests", app.get("name"));
assertEquals("com.bugsnag.android.test", app.get("packageName"));
assertEquals("1.0", app.get("versionName"));
assertNotNull(app.get("memoryUsage"));
assertNotNull(app.get("lowMemory"));
}

@Test
public void testDeviceData() {
Client client = generateClient();
Expand Down
13 changes: 3 additions & 10 deletions sdk/src/androidTest/java/com/bugsnag/android/ErrorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,17 +314,10 @@ public void testNullContext() throws Exception {
}

@Test
public void testAppDataContext() throws Exception {
public void testActiveScreen() throws Exception {
error.setContext(null);
Context context = InstrumentationRegistry.getContext();
SessionTracker sessionTracker = generateSessionTracker();
String expectedContext = "FooActivity";
sessionTracker.updateForegroundTracker(expectedContext,
true, System.currentTimeMillis());
AppData appData = new AppData(context, config, sessionTracker);
error.setAppData(appData);
assertEquals(appData, error.getAppData());
assertEquals(expectedContext, error.getContext());
error.getMetaData().addToTab("app", "activeScreen", "FooActivity");
assertEquals("FooActivity", error.getContext());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.bugsnag.android;

import static com.bugsnag.android.BugsnagTestUtils.generateClient;
import static com.bugsnag.android.BugsnagTestUtils.generateSession;
import static com.bugsnag.android.BugsnagTestUtils.generateSessionTracker;
import static com.bugsnag.android.BugsnagTestUtils.streamableToJson;
Expand Down Expand Up @@ -53,7 +54,7 @@ public void setUp() throws Exception {

private SessionTrackingPayload generatePayloadFromSession(Context context,
Session session) throws Exception {
appData = new AppData(context, new Configuration("a"), generateSessionTracker());
appData = new AppDataCollector(generateClient()).generateAppData();
return new SessionTrackingPayload(session, appData);
}

Expand Down
108 changes: 1 addition & 107 deletions sdk/src/main/java/com/bugsnag/android/AppData.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package com.bugsnag.android;

import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

Expand All @@ -15,15 +10,7 @@
*/
public class AppData extends AppDataSummary {

private static final long startTimeMs = SystemClock.elapsedRealtime();

@Nullable
final String appName;

@NonNull
private final Context appContext;
private final SessionTracker sessionTracker;

@SuppressWarnings("NullableProblems") // initialised after construction
@NonNull
private String packageName;

Expand All @@ -34,21 +21,6 @@ public class AppData extends AppDataSummary {
private long foregroundMs;
private boolean inForeground;

AppData(@NonNull Context appContext,
@NonNull Configuration config,
SessionTracker sessionTracker) {
super(appContext, config);
this.appContext = appContext;
this.sessionTracker = sessionTracker;
appName = getAppName(appContext);

packageName = calculatePackageName(appContext);
buildUuid = config.getBuildUUID();
durationMs = getDurationMs();
foregroundMs = sessionTracker.getDurationInForegroundMs(System.currentTimeMillis());
inForeground = sessionTracker.isInForeground();
}

@Override
public void toStream(@NonNull JsonStream writer) throws IOException {
writer.beginObject();
Expand All @@ -61,34 +33,6 @@ public void toStream(@NonNull JsonStream writer) throws IOException {
writer.endObject();
}

// TODO migrate metadata fields to separate class
void addAppMetaData(MetaData metaData) {
metaData.addToTab("app", "name", appName);
metaData.addToTab("app", "packageName", packageName);
metaData.addToTab("app", "versionName", getVersionName());
metaData.addToTab("app", "activeScreen", getActiveScreenClass());
metaData.addToTab("app", "memoryUsage", getMemoryUsage());
metaData.addToTab("app", "lowMemory", isLowMemory(appContext));
}

/**
* The name of the running Android app, from android:label in
* AndroidManifest.xml
*/
@Nullable
private static String getAppName(@NonNull Context appContext) {
try {
PackageManager packageManager = appContext.getPackageManager();
String packageName = appContext.getPackageName();
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);

return (String) packageManager.getApplicationLabel(appInfo);
} catch (PackageManager.NameNotFoundException exception) {
Logger.warn("Could not get app name");
}
return null;
}

/**
* @return the application's package name
*/
Expand Down Expand Up @@ -171,54 +115,4 @@ public void setInForeground(boolean inForeground) {
this.inForeground = inForeground;
}

@Nullable
String getActiveScreenClass() {
return sessionTracker.getContextActivity();
}

/**
* Get the actual memory used by the VM (which may not be the total used
* by the app in the case of NDK usage).
*/
@NonNull
private static Long getMemoryUsage() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}

/**
* Check if the device is currently running low on memory.
*/
@Nullable
private static Boolean isLowMemory(@NonNull Context appContext) {
try {
ActivityManager activityManager =
(ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);

if (activityManager != null) {
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memInfo);
return memInfo.lowMemory;
}
} catch (Exception exception) {
Logger.warn("Could not check lowMemory status");
}
return null;
}

/**
* Get the time in milliseconds since Bugsnag was initialized, which is a
* good approximation for how long the app has been running.
*/
static long getDurationMs() {
return SystemClock.elapsedRealtime() - startTimeMs;
}


/**
* The package name of the running Android app, eg: com.example.myapp
*/
@NonNull
private static String calculatePackageName(@NonNull Context appContext) {
return appContext.getPackageName();
}
}

0 comments on commit 1229c2e

Please sign in to comment.