From 0f98e1e12538d2644fea2c61e3b1ff463f765f69 Mon Sep 17 00:00:00 2001
From: Hans-Christoph Steiner <hans@eds.org>
Date: Thu, 1 Feb 2018 14:28:08 +0100
Subject: [PATCH] ACRA: add more fields to crash reports, but no user
 identifying info

extended info on things we already have:
* PRODUCT is another name for BRAND/PHONE_MODEL
* TOTAL_MEM_SIZE can be derived from hardware name
* DISPLAY is also available by looking up the hardware
* STACK_TRACE_HASH should make automated sorting easier

new info:
* PACKAGE_NAME is only new info if the user is using a whitelabel app
* AVAILABLE_MEM_SIZE can be used to track users, but only when provided at
  high resolution, e.g. once per second or higher.  Most users only send a
  single crash report.  High frequency reporters send under 100, which is
  still orders of magnatude below what is needed to track users.
---
 .../java/org/fdroid/fdroid/FDroidApp.java     | 27 ++++++++++++++-----
 .../fdroid/fdroid/acra/CrashReportSender.java |  4 +--
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
index 18fc3d916..649c6a2b9 100644
--- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
+++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
@@ -41,13 +41,14 @@ import android.text.TextUtils;
 import android.util.Log;
 import android.view.WindowManager;
 import android.widget.Toast;
-
 import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache;
 import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
 import com.nostra13.universalimageloader.core.ImageLoader;
 import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
-
+import info.guardianproject.netcipher.NetCipher;
+import info.guardianproject.netcipher.proxy.OrbotHelper;
 import org.acra.ACRA;
+import org.acra.ReportField;
 import org.acra.ReportingInteractionMode;
 import org.acra.annotation.ReportsCrashes;
 import org.apache.commons.net.util.SubnetUtils;
@@ -64,6 +65,7 @@ import org.fdroid.fdroid.installer.InstallHistoryService;
 import org.fdroid.fdroid.net.ImageLoaderForUIL;
 import org.fdroid.fdroid.net.WifiStateChangeService;
 import org.fdroid.fdroid.views.hiding.HidingManager;
+import sun.net.www.protocol.bluetooth.Handler;
 
 import java.io.IOException;
 import java.net.URL;
@@ -72,14 +74,25 @@ import java.net.URLStreamHandlerFactory;
 import java.security.Security;
 import java.util.List;
 
-import info.guardianproject.netcipher.NetCipher;
-import info.guardianproject.netcipher.proxy.OrbotHelper;
-import sun.net.www.protocol.bluetooth.Handler;
-
 @ReportsCrashes(mailTo = "reports@f-droid.org",
         mode = ReportingInteractionMode.DIALOG,
         reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class,
-        reportSenderFactoryClasses = org.fdroid.fdroid.acra.CrashReportSenderFactory.class
+        reportSenderFactoryClasses = org.fdroid.fdroid.acra.CrashReportSenderFactory.class,
+        customReportContent = {
+                ReportField.USER_COMMENT,
+                ReportField.PACKAGE_NAME,
+                ReportField.APP_VERSION_NAME,
+                ReportField.ANDROID_VERSION,
+                ReportField.PRODUCT,
+                ReportField.BRAND,
+                ReportField.PHONE_MODEL,
+                ReportField.DISPLAY,
+                ReportField.TOTAL_MEM_SIZE,
+                ReportField.AVAILABLE_MEM_SIZE,
+                ReportField.CUSTOM_DATA,
+                ReportField.STACK_TRACE_HASH,
+                ReportField.STACK_TRACE,
+        }
 )
 public class FDroidApp extends Application {
 
diff --git a/app/src/main/java/org/fdroid/fdroid/acra/CrashReportSender.java b/app/src/main/java/org/fdroid/fdroid/acra/CrashReportSender.java
index 200bd8aeb..dab8946e1 100644
--- a/app/src/main/java/org/fdroid/fdroid/acra/CrashReportSender.java
+++ b/app/src/main/java/org/fdroid/fdroid/acra/CrashReportSender.java
@@ -5,8 +5,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.support.annotation.NonNull;
-
-import org.acra.ACRAConstants;
 import org.acra.ReportField;
 import org.acra.collections.ImmutableSet;
 import org.acra.collector.CrashReportData;
@@ -38,7 +36,7 @@ public class CrashReportSender implements ReportSender {
     private String[] buildSubjectBody(Context context, CrashReportData errorContent) {
         ImmutableSet fields = this.config.getReportFields();
         if (fields.isEmpty()) {
-            fields = new ImmutableSet<ReportField>(ACRAConstants.DEFAULT_MAIL_REPORT_FIELDS);
+            return new String[]{"No ACRA Report Fields found."};
         }
 
         String subject = context.getPackageName() + " Crash Report";