Add a handler to grab uncaught exceptions to submit later

This commit is contained in:
TwistedUmbrella 2014-02-03 14:55:08 -05:00
parent 7944355f10
commit 5f8f4f9e3b
2 changed files with 41 additions and 6 deletions

View File

@ -1,6 +1,7 @@
package com.reicast.emulator;
import java.io.File;
import java.lang.Thread.UncaughtExceptionHandler;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
@ -9,6 +10,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
@ -16,14 +18,12 @@ import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.Toast;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.OnOpenListener;
@ -39,6 +39,8 @@ public class MainActivity extends SlidingFragmentActivity implements
private TextView menuHeading;
private SlidingMenu sm;
private UncaughtExceptionHandler mUEHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -49,6 +51,25 @@ public class MainActivity extends SlidingFragmentActivity implements
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
home_directory = mPrefs.getString("home_directory", home_directory);
JNIdc.config(home_directory);
mUEHandler = new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable error) {
if (error != null) {
Toast.makeText(MainActivity.this,
getString(R.string.platform),
Toast.LENGTH_SHORT).show();
UploadLogs mUploadLogs = new UploadLogs(MainActivity.this);
mUploadLogs.setUnhandled(error.getMessage());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
mUploadLogs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
home_directory);
} else {
mUploadLogs.execute(home_directory);
}
}
}
};
Thread.setDefaultUncaughtExceptionHandler(mUEHandler);
// Check that the activity is using the layout version with
// the fragment_container FrameLayout

View File

@ -31,6 +31,8 @@ public class UploadLogs extends AsyncTask<String, Integer, String> {
public static final String JB = "JellyBean";
public static final String KK = "KitKat";
public static final String NF = "Not Found";
private String unHandledIOE;
private Context mContext;
@ -100,6 +102,10 @@ public class UploadLogs extends AsyncTask<String, Integer, String> {
return "ERROR: " + ex.getMessage();
}
}
public void setUnhandled(String unHandledIOE) {
this.unHandledIOE = unHandledIOE;
}
@Override
protected String doInBackground(String... params) {
@ -107,15 +113,23 @@ public class UploadLogs extends AsyncTask<String, Integer, String> {
String logOuput = params[0] + "/" + currentTime + ".txt";
Process mLogcatProc = null;
BufferedReader reader = null;
final StringBuilder log = new StringBuilder();
String separator = System.getProperty("line.separator");
log.append(discoverCPUData());
if (unHandledIOE != null) {
log.append(separator);
log.append(separator);
log.append("Unhandled Exceptions");
log.append(separator);
log.append(separator);
log.append(unHandledIOE);
}
try {
mLogcatProc = Runtime.getRuntime().exec(
new String[] { "logcat", "-d", "AndroidRuntime:E *:S" });
reader = new BufferedReader(new InputStreamReader(
mLogcatProc.getInputStream()));
String line;
final StringBuilder log = new StringBuilder();
String separator = System.getProperty("line.separator");
log.append(discoverCPUData());
log.append(separator);
log.append(separator);
log.append("AndroidRuntime Output");