Handle crashes more gracefully and allow opting out report

This commit is contained in:
TwistedUmbrella 2014-02-15 13:05:40 -05:00
parent 16702f9c38
commit b546e7a75d
2 changed files with 41 additions and 12 deletions

View File

@ -34,6 +34,8 @@
<string name="games_listing">Available Dreamcast Games</string>
<string name="report_issue">Previous Crash Detected</string>
<string name="customize_touch_controls">Customize Touch Controls</string>
<string name="launch_editor">Launch Editor</string>
<string name="touch_vibration">Touch Vibration</string>

View File

@ -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();