diff options
author | Kenny Root <kenny@the-b.org> | 2009-12-17 06:18:39 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-12-17 06:18:39 +0000 |
commit | 1557b52f5e39f61b53300cb881127ef7a0d7a325 (patch) | |
tree | 5b91e17ff76f9ff8a9e8bdd0fabce4a0ae0af791 /src/com/nullwire/trace/ExceptionHandler.java | |
parent | f485e61fb8d2325fd1c43ab383a9ca34e84d2cd8 (diff) | |
download | connectbot-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.java | 74 |
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; |