diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3281842b0..f88235c3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
### 0.98 (upcoming release)
+* Add opt-in crash reporting via ACRA
+
* Add support for HTTP basic authentication of repos
* Fix repo updating on older devices with little memory
diff --git a/F-Droid/AndroidManifest.xml b/F-Droid/AndroidManifest.xml
index 7237aea99..76f6e7659 100644
--- a/F-Droid/AndroidManifest.xml
+++ b/F-Droid/AndroidManifest.xml
@@ -376,6 +376,12 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
+
Light
Dark
Night
+
+ F-Droid has crashed
+ An unexpected error occurred
+ forcing the application to stop. Would you like to e-mail the
+ details to help fix the issue?
+ You can add extra information and comments here:
diff --git a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
index 87ce5a83e..da1eade0a 100644
--- a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
+++ b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
@@ -43,6 +43,9 @@ import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.utils.StorageUtils;
+import org.acra.ACRA;
+import org.acra.ReportingInteractionMode;
+import org.acra.annotation.ReportsCrashes;
import org.apache.commons.net.util.SubnetUtils;
import org.fdroid.fdroid.Preferences.ChangeListener;
@@ -62,6 +65,12 @@ import java.util.Locale;
import sun.net.www.protocol.bluetooth.Handler;
+@ReportsCrashes(mailTo = "team@f-droid.org",
+ mode = ReportingInteractionMode.DIALOG,
+ resDialogTitle = R.string.crash_dialog_title,
+ resDialogText = R.string.crash_dialog_text,
+ resDialogCommentPrompt = R.string.crash_dialog_comment_prompt
+ )
public class FDroidApp extends Application {
private static final String TAG = "FDroidApp";
@@ -183,6 +192,7 @@ public class FDroidApp extends Application {
}
updateLanguage();
super.onCreate();
+ ACRA.init(this);
// Needs to be setup before anything else tries to access it.
// Perhaps the constructor is a better place, but then again,