aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/nullwire/trace/ExceptionHandler.java
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-12-17 06:18:39 +0000
committerKenny Root <kenny@the-b.org>2009-12-17 06:18:39 +0000
commit1557b52f5e39f61b53300cb881127ef7a0d7a325 (patch)
tree5b91e17ff76f9ff8a9e8bdd0fabce4a0ae0af791 /src/com/nullwire/trace/ExceptionHandler.java
parentf485e61fb8d2325fd1c43ab383a9ca34e84d2cd8 (diff)
downloadconnectbot-1557b52f5e39f61b53300cb881127ef7a0d7a325.tar.gz
connectbot-1557b52f5e39f61b53300cb881127ef7a0d7a325.tar.bz2
connectbot-1557b52f5e39f61b53300cb881127ef7a0d7a325.zip
Update Nullwire error reporting
Old version didn't chain to the default Android exception handler whereas this version does. Also add in OS version and phone type reporting to aid in triage. git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@438 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src/com/nullwire/trace/ExceptionHandler.java')
-rw-r--r--src/com/nullwire/trace/ExceptionHandler.java74
1 files changed, 41 insertions, 33 deletions
diff --git a/src/com/nullwire/trace/ExceptionHandler.java b/src/com/nullwire/trace/ExceptionHandler.java
index a48303d..779ec13 100644
--- a/src/com/nullwire/trace/ExceptionHandler.java
+++ b/src/com/nullwire/trace/ExceptionHandler.java
@@ -36,20 +36,24 @@ public class ExceptionHandler {
public static void checkForTraces(final Context context) {
new Thread(new Runnable() {
public void run() {
- String[] stackTraces = searchForStackTraces(context);
+ String[] stackTraces = searchForStackTraces();
if (stackTraces != null && stackTraces.length > 0) {
Log.d(TAG, "number of stack traces: " + stackTraces.length);
- submissionHandler.sendMessage(
- submissionHandler.obtainMessage(-1, context));
+ submissionHandler.sendMessage(submissionHandler
+ .obtainMessage(-1, context));
}
}
}).start();
}
+
/**
- * @param context
- */
- private static void getPackageInfo(Context context) {
+ * Register handler for unhandled exceptions.
+ *
+ * @param context
+ */
+ public static boolean register(Context context) {
+ Log.i(TAG, "Registering default exceptions handler");
// Get information about the Package
PackageManager pm = context.getPackageManager();
try {
@@ -63,6 +67,10 @@ public class ExceptionHandler {
G.APP_DESCRIPTION = context.getString(R.string.msg_version);
// Files dir for storing the stack traces
G.FILES_PATH = context.getFilesDir().getAbsolutePath();
+ // Device model
+ G.PHONE_MODEL = android.os.Build.MODEL;
+ // Android version
+ G.ANDROID_VERSION = android.os.Build.VERSION.RELEASE;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
@@ -71,35 +79,41 @@ public class ExceptionHandler {
Log.d(TAG, "APP_PACKAGE: " + G.APP_PACKAGE);
Log.d(TAG, "FILES_PATH: " + G.FILES_PATH);
Log.d(TAG, "URL: " + G.URL);
- }
- public static void register(Context context) {
- Log.i(TAG, "Registering default exceptions handler");
+ boolean stackTracesFound = false;
+ // We'll return true if any stack traces were found
+ if (searchForStackTraces().length > 0) {
+ stackTracesFound = true;
+ }
new Thread() {
@Override
public void run() {
- // Register default exceptions handler
- Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler());
+ UncaughtExceptionHandler currentHandler = Thread.getDefaultUncaughtExceptionHandler();
+
+ if (currentHandler != null) {
+ Log.d(TAG, "current handler class="+currentHandler.getClass().getName());
+ }
+ // don't register again if already registered
+ if (!(currentHandler instanceof DefaultExceptionHandler)) {
+ // Register default exceptions handler
+ Thread.setDefaultUncaughtExceptionHandler(
+ new DefaultExceptionHandler(currentHandler));
+ }
}
}.start();
+
+ return stackTracesFound;
}
/**
* Search for stack trace files.
- *
* @return
*/
- private static String[] searchForStackTraces(Context context) {
- if (stackTraceFileList != null && stackTraceFileList.length > 0)
+ private static String[] searchForStackTraces() {
+ if (stackTraceFileList != null) {
return stackTraceFileList;
-
- if (context == null)
- return null;
-
- if (G.FILES_PATH == null)
- getPackageInfo(context);
-
+ }
File dir = new File(G.FILES_PATH + "/");
// Try to create the files folder if it doesn't exist
dir.mkdir();
@@ -116,7 +130,7 @@ public class ExceptionHandler {
@Override
public void handleMessage(Message msg) {
Context context = (Context) msg.obj;
- ExceptionClickListener clickListener = new ExceptionClickListener(context);
+ ExceptionClickListener clickListener = new ExceptionClickListener();
new AlertDialog.Builder(context)
.setMessage(R.string.exceptions_submit_message)
.setPositiveButton(android.R.string.yes, clickListener)
@@ -129,13 +143,10 @@ public class ExceptionHandler {
* Look into the files folder to see if there are any "*.stacktrace" files.
* If any are present, submit them to the trace server.
*/
- public static void submitStackTraces(Context context) {
- if (context == null)
- return;
-
+ public static void submitStackTraces() {
try {
Log.d(TAG, "Looking for exceptions in: " + G.FILES_PATH);
- String[] list = searchForStackTraces(context);
+ String[] list = searchForStackTraces();
if (list != null && list.length > 0) {
Log.d(TAG, "Found " + list.length + " stacktrace(s)");
StringBuilder contents = new StringBuilder();
@@ -179,16 +190,13 @@ public class ExceptionHandler {
} catch (Exception e) {
e.printStackTrace();
} finally {
- removeStackTraces(context);
+ removeStackTraces();
}
}
- public synchronized static void removeStackTraces(Context context) {
- if (context == null)
- return;
-
+ public synchronized static void removeStackTraces() {
try {
- String[] list = searchForStackTraces(context);
+ String[] list = searchForStackTraces();
if (list == null)
return;