Add a handler to grab uncaught exceptions to submit later
This commit is contained in:
parent
7944355f10
commit
5f8f4f9e3b
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue