diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9550adc21..ab14ca819 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -139,6 +139,7 @@
+
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/AboutActivity.java b/app/src/main/java/com/github/yeriomin/yalpstore/AboutActivity.java
index 98965ae44..ca31901f1 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/AboutActivity.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/AboutActivity.java
@@ -29,7 +29,10 @@ public class AboutActivity extends YalpStoreActivity {
findViewById(R.id.developer_email).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- new YalpStoreUncaughtExceptionHandler(AboutActivity.this).send(null);
+ CrashLetterActivity.send(
+ AboutActivity.this,
+ new CrashLetterBuilder(AboutActivity.this).build(null)
+ );
}
});
if (hasPermission()) {
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/CrashLetterActivity.java b/app/src/main/java/com/github/yeriomin/yalpstore/CrashLetterActivity.java
new file mode 100644
index 000000000..a81a0d901
--- /dev/null
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/CrashLetterActivity.java
@@ -0,0 +1,58 @@
+package com.github.yeriomin.yalpstore;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.ClipboardManager;
+
+public class CrashLetterActivity extends Activity {
+
+ static public void send(Context activity, String letter) {
+ Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
+ emailIntent.setData(Uri.fromParts("mailto", activity.getString(R.string.about_developer_email), null));
+ emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getPackageName() + " Crash Report");
+ emailIntent.putExtra(Intent.EXTRA_TEXT, letter);
+ if (emailIntent.resolveActivity(activity.getPackageManager()) != null) {
+ activity.startActivity(emailIntent);
+ } else {
+ ((ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE)).setText(letter);
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ showCrashDialog();
+ }
+
+ private AlertDialog showCrashDialog() {
+ return new AlertDialog.Builder(this)
+ .setTitle(getString(R.string.dialog_title_application_crashed))
+ .setMessage(getString(R.string.dialog_message_application_crashed))
+ .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ finish();
+ }
+ })
+ .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ send(
+ CrashLetterActivity.this,
+ getIntent().getExtras().getString(YalpStoreUncaughtExceptionHandler.INTENT_MESSAGE)
+ );
+ dialog.dismiss();
+ finish();
+ }
+ })
+ .show()
+ ;
+ }
+}
diff --git a/app/src/main/java/com/github/yeriomin/yalpstore/YalpStoreUncaughtExceptionHandler.java b/app/src/main/java/com/github/yeriomin/yalpstore/YalpStoreUncaughtExceptionHandler.java
index 9233aecfd..cd2d281c0 100644
--- a/app/src/main/java/com/github/yeriomin/yalpstore/YalpStoreUncaughtExceptionHandler.java
+++ b/app/src/main/java/com/github/yeriomin/yalpstore/YalpStoreUncaughtExceptionHandler.java
@@ -1,17 +1,12 @@
package com.github.yeriomin.yalpstore;
import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
-import android.net.Uri;
-import android.os.Looper;
-import android.text.ClipboardManager;
-import android.util.Log;
class YalpStoreUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
+ static public final String INTENT_MESSAGE = "INTENT_MESSAGE";
+
private Activity activity;
public YalpStoreUncaughtExceptionHandler(Activity activity) {
@@ -21,56 +16,11 @@ class YalpStoreUncaughtExceptionHandler implements Thread.UncaughtExceptionHandl
@Override
public void uncaughtException(Thread t, final Throwable e) {
e.printStackTrace();
- Thread thread = new Thread() {
- @Override
- public void run() {
- Looper.prepare();
- showCrashDialog(e);
- Looper.loop();
- }
- };
- try {
- thread.start();
- } catch (Throwable ee) {
- Log.e(getClass().getName(), "Failed to process an uncaught exception: " + ee.getMessage());
- System.exit(1);
- }
- }
-
- public AlertDialog showCrashDialog(final Throwable e) {
- return new AlertDialog.Builder(activity)
- .setTitle(activity.getString(R.string.dialog_title_application_crashed))
- .setMessage(activity.getString(R.string.dialog_message_application_crashed))
- .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- System.exit(1);
- }
- })
- .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- send(e);
- dialog.dismiss();
- System.exit(1);
- }
- })
- .show()
- ;
- }
-
- public void send(Throwable e) {
- String letter = new CrashLetterBuilder(activity).build(e);
- Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
- emailIntent.setData(Uri.fromParts("mailto", activity.getString(R.string.about_developer_email), null));
- emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getPackageName() + " Crash Report");
- emailIntent.putExtra(Intent.EXTRA_TEXT, letter);
- if (emailIntent.resolveActivity(activity.getPackageManager()) != null) {
- activity.startActivity(emailIntent);
- } else {
- ((ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE)).setText(letter);
- }
+ Intent errorIntent = new Intent(activity.getApplicationContext(), CrashLetterActivity.class);
+ errorIntent.putExtra(INTENT_MESSAGE, new CrashLetterBuilder(activity).build(e));
+ errorIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ activity.getApplicationContext().startActivity(errorIntent);
+ android.os.Process.killProcess(android.os.Process.myPid());
+ System.exit(2);
}
}