From 10f41ef157317aec3dfc54c445465662d8502469 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Wed, 8 Nov 2017 14:46:56 +0000
Subject: [PATCH] Log network usage at shutdown.

---
 .../briarproject/briar/android/AppModule.java | 10 +++++
 .../briar/android/NetworkUsageLogger.java     | 40 +++++++++++++++++++
 2 files changed, 50 insertions(+)
 create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/NetworkUsageLogger.java

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
index c5b09f2443..4d5dad242d 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
@@ -38,6 +38,8 @@ public class AppModule {
 	static class EagerSingletons {
 		@Inject
 		AndroidNotificationManager androidNotificationManager;
+		@Inject
+		NetworkUsageLogger networkUsageLogger;
 	}
 
 	private final Application application;
@@ -173,4 +175,12 @@ public class AppModule {
 			ScreenFilterMonitorImpl screenFilterMonitor) {
 		return screenFilterMonitor;
 	}
+
+	@Provides
+	NetworkUsageLogger provideNetworkUsageLogger(
+			LifecycleManager lifecycleManager) {
+		NetworkUsageLogger networkUsageLogger = new NetworkUsageLogger();
+		lifecycleManager.registerService(networkUsageLogger);
+		return networkUsageLogger;
+	}
 }
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/NetworkUsageLogger.java b/briar-android/src/main/java/org/briarproject/briar/android/NetworkUsageLogger.java
new file mode 100644
index 0000000000..dcf500cbf6
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/NetworkUsageLogger.java
@@ -0,0 +1,40 @@
+package org.briarproject.briar.android;
+
+import android.net.TrafficStats;
+import android.os.Process;
+
+import org.briarproject.bramble.api.lifecycle.Service;
+import org.briarproject.bramble.api.lifecycle.ServiceException;
+
+import java.util.logging.Logger;
+
+import static java.util.logging.Level.INFO;
+
+class NetworkUsageLogger implements Service {
+
+	private static final Logger LOG =
+			Logger.getLogger(NetworkUsageLogger.class.getName());
+
+	private volatile long startTime, rxBytes, txBytes;
+
+	@Override
+	public void startService() throws ServiceException {
+		startTime = System.currentTimeMillis();
+		int uid = Process.myUid();
+		rxBytes = TrafficStats.getUidRxBytes(uid);
+		txBytes = TrafficStats.getUidTxBytes(uid);
+	}
+
+	@Override
+	public void stopService() throws ServiceException {
+		if (LOG.isLoggable(INFO)) {
+			long sessionDuration = System.currentTimeMillis() - startTime;
+			int uid = Process.myUid();
+			long rx = TrafficStats.getUidRxBytes(uid) - rxBytes;
+			long tx = TrafficStats.getUidTxBytes(uid) - txBytes;
+			LOG.info("Duration " + (sessionDuration / 1000) + " seconds");
+			LOG.info("Received " + rx + " bytes");
+			LOG.info("Sent " + tx + " bytes");
+		}
+	}
+}
-- 
GitLab