Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/org/adblockplus/android/CrashHandler.java

Issue 8487098: ABP/Android crash reporter (Closed)
Patch Set: Created Oct. 5, 2012, 9:20 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « res/layout/crashreport.xml ('k') | src/org/adblockplus/android/CrashReportDialog.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 package org.adblockplus.android;
2
3 import java.io.PrintWriter;
4 import java.lang.Thread.UncaughtExceptionHandler;
5
6 import android.app.NotificationManager;
7 import android.content.Context;
8 import android.content.pm.PackageInfo;
9 import android.content.pm.PackageManager.NameNotFoundException;
10 import android.os.Build;
11 import android.util.Log;
12
13 /**
14 * Writes crash data in file.
15 */
16 public class CrashHandler implements UncaughtExceptionHandler
17 {
18 public static final String REPORT_FILE = "AdblockPlus_Crash_Report.txt";
19 private UncaughtExceptionHandler defaultUEH;
20 private NotificationManager notificationManager;
21 private Context mContext;
22
23 public CrashHandler(Context context)
24 {
25 defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
26 mContext = context;
27 notificationManager = (NotificationManager) context.getSystemService(Context .NOTIFICATION_SERVICE);
28 }
29
30 public UncaughtExceptionHandler getDefault()
31 {
32 return defaultUEH;
33 }
34
35 @Override
36 public void uncaughtException(Thread t, Throwable e)
37 {
38 writeToFile(e, REPORT_FILE);
39 if (notificationManager != null)
40 {
41 try
42 {
43 notificationManager.cancel(ProxyService.ONGOING_NOTIFICATION_ID);
44 }
45 catch (Throwable ex)
46 {
47 ex.printStackTrace();
48 }
49 }
50 notificationManager = null;
51
52 defaultUEH.uncaughtException(t, e);
53 }
54
55 private void writeToFile(Throwable error, String filename)
56 {
57 Log.e("DCR", "Writing crash report");
58 int versionCode = -1;
59 try
60 {
61 PackageInfo pi = mContext.getPackageManager().getPackageInfo(mContext.getP ackageName(), 0);
62 versionCode = pi.versionCode;
63 }
64 catch (NameNotFoundException ex)
65 {
66 }
67 try
68 {
69 PrintWriter pw = new PrintWriter(mContext.openFileOutput(filename, Context .MODE_WORLD_READABLE));
70 // Write Android version
71 pw.println(Build.VERSION.SDK_INT);
72 // Write application build number
73 pw.println(versionCode);
74
75 // Write exception data
76 printThrowable(error, pw);
77 Throwable cause = error.getCause();
78 // Write cause data
79 if (cause != null)
80 {
81 pw.println("cause");
82 printThrowable(cause, pw);
83 }
84 pw.flush();
85 pw.close();
86 }
87 catch (Throwable e)
88 {
89 e.printStackTrace();
90 }
91 }
92
93 private void printThrowable(Throwable error, PrintWriter pw)
94 {
95 // Use simplest format for speed - we do not have much time
96 pw.println(error.getClass().getName());
97 pw.println(error.getMessage());
98 StackTraceElement[] trace = error.getStackTrace();
99 for (StackTraceElement element : trace)
100 {
101 pw.print(element.getClassName());
102 pw.print("|");
103 pw.print(element.getMethodName());
104 pw.print("|");
105 pw.print(element.isNativeMethod());
106 pw.print("|");
107 pw.print(element.getFileName());
108 pw.print("|");
109 pw.print(element.getLineNumber());
110 pw.println();
111 }
112 }
113 }
OLDNEW
« no previous file with comments | « res/layout/crashreport.xml ('k') | src/org/adblockplus/android/CrashReportDialog.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld