From b546e7a75dc8d4db40973986dc77d8b5eb9afe7f Mon Sep 17 00:00:00 2001 From: TwistedUmbrella Date: Sat, 15 Feb 2014 13:05:40 -0500 Subject: [PATCH] Handle crashes more gracefully and allow opting out report --- shell/android/res/values/strings.xml | 2 + .../com/reicast/emulator/MainActivity.java | 51 ++++++++++++++----- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/shell/android/res/values/strings.xml b/shell/android/res/values/strings.xml index 689bf02f6..13d476a95 100644 --- a/shell/android/res/values/strings.xml +++ b/shell/android/res/values/strings.xml @@ -34,6 +34,8 @@ Available Dreamcast Games + Previous Crash Detected + Customize Touch Controls Launch Editor Touch Vibration diff --git a/shell/android/src/com/reicast/emulator/MainActivity.java b/shell/android/src/com/reicast/emulator/MainActivity.java index 9454e60d2..2b3e22cfa 100644 --- a/shell/android/src/com/reicast/emulator/MainActivity.java +++ b/shell/android/src/com/reicast/emulator/MainActivity.java @@ -25,7 +25,6 @@ import android.view.View.OnTouchListener; import android.widget.TextView; import android.widget.Toast; -import com.android.util.DreamTime; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.OnOpenListener; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; @@ -65,22 +64,19 @@ public class MainActivity extends SlidingFragmentActivity implements public void uncaughtException(Thread t, Throwable error) { if (error != null) { Log.e("com.reicast.emulator", error.getMessage()); - Toast.makeText(MainActivity.this, - getString(R.string.platform), - Toast.LENGTH_SHORT).show(); - GenerateLogs mGenerateLogs = new GenerateLogs(MainActivity.this); - mGenerateLogs.setUnhandled(error.getMessage()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - mGenerateLogs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, - home_directory); - } else { - mGenerateLogs.execute(home_directory); - } + mPrefs.edit().putString("prior_error", error.getMessage()).commit(); + MainActivity.this.finish(); } } }; Thread.setDefaultUncaughtExceptionHandler(mUEHandler); + String prior_error = mPrefs.getString("prior_error", null); + if (!prior_error.equals(null)) { + initiateReport(prior_error); + mPrefs.edit().remove("prior_error").commit(); + } + // Check that the activity is using the layout version with // the fragment_container FrameLayout if (findViewById(R.id.fragment_container) != null) { @@ -264,6 +260,37 @@ public class MainActivity extends SlidingFragmentActivity implements } + private void initiateReport(final String error) { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setTitle(getString(R.string.report_issue)); + builder.setMessage(error); + builder.setNegativeButton("Cancel", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + builder.setNegativeButton("Report", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Toast.makeText(MainActivity.this, + getString(R.string.platform), + Toast.LENGTH_SHORT).show(); + GenerateLogs mGenerateLogs = new GenerateLogs(MainActivity.this); + mGenerateLogs.setUnhandled(error); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + mGenerateLogs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, + home_directory); + } else { + mGenerateLogs.execute(home_directory); + } + dialog.dismiss(); + } + }); + builder.create(); + builder.show(); + } + public static boolean isBiosExisting() { File bios = new File(home_directory, "data/dc_boot.bin"); return bios.exists();