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

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

Issue 5697499218051072: Usage of new API, cleanups (reduced) (Closed)
Patch Set: Removed another whitespace change Created April 28, 2014, 8:36 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
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 16 matching lines...) Expand all
27 import android.content.pm.PackageManager.NameNotFoundException; 27 import android.content.pm.PackageManager.NameNotFoundException;
28 import android.os.Build; 28 import android.os.Build;
29 import android.util.Log; 29 import android.util.Log;
30 30
31 /** 31 /**
32 * Writes crash data in file. 32 * Writes crash data in file.
33 */ 33 */
34 public class CrashHandler implements UncaughtExceptionHandler 34 public class CrashHandler implements UncaughtExceptionHandler
35 { 35 {
36 public static final String REPORT_FILE = "AdblockPlus_Crash_Report.txt"; 36 public static final String REPORT_FILE = "AdblockPlus_Crash_Report.txt";
37 private UncaughtExceptionHandler defaultUEH; 37
38 private final UncaughtExceptionHandler defaultUEH;
39 private final Context context;
40
38 private NotificationManager notificationManager; 41 private NotificationManager notificationManager;
39 private Context context;
40
41 private boolean generateReport; 42 private boolean generateReport;
42 private boolean restoreProxy; 43 private boolean restoreProxy;
43 private String host; 44 private String host;
44 private String port; 45 private String port;
45 private String excl; 46 private String excl;
46 47
47 public CrashHandler(Context context) 48 public CrashHandler(final Context context)
48 { 49 {
49 defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); 50 defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
50 this.context = context; 51 this.context = context;
51 notificationManager = (NotificationManager) context.getSystemService(Context .NOTIFICATION_SERVICE); 52 notificationManager = (NotificationManager) context.getSystemService(Context .NOTIFICATION_SERVICE);
52 generateReport = false; 53 generateReport = false;
53 restoreProxy = false; 54 restoreProxy = false;
54 } 55 }
55 56
56 public UncaughtExceptionHandler getDefault() 57 public UncaughtExceptionHandler getDefault()
57 { 58 {
58 return defaultUEH; 59 return defaultUEH;
59 } 60 }
60 61
61 @Override 62 @Override
62 public void uncaughtException(Thread t, Throwable e) 63 public void uncaughtException(final Thread t, final Throwable e)
63 { 64 {
64 if (generateReport) 65 if (generateReport)
65 writeToFile(e, REPORT_FILE); 66 writeToFile(e, REPORT_FILE);
66 67
67 if (restoreProxy) 68 if (restoreProxy)
68 clearProxySettings(); 69 clearProxySettings();
69 70
70 if (notificationManager != null) 71 if (notificationManager != null)
71 { 72 {
72 try 73 try
73 { 74 {
74 notificationManager.cancel(ProxyService.ONGOING_NOTIFICATION_ID); 75 notificationManager.cancel(ProxyService.ONGOING_NOTIFICATION_ID);
75 } 76 }
76 catch (Throwable ex) 77 catch (final Throwable ex)
77 { 78 {
78 ex.printStackTrace(); 79 ex.printStackTrace();
79 } 80 }
80 } 81 }
81 notificationManager = null; 82 notificationManager = null;
82 83
83 defaultUEH.uncaughtException(t, e); 84 defaultUEH.uncaughtException(t, e);
84 } 85 }
85 86
86 public void generateReport(boolean report) 87 public void generateReport(final boolean report)
87 { 88 {
88 generateReport = report; 89 generateReport = report;
89 } 90 }
90 91
91 @SuppressLint("WorldReadableFiles") 92 @SuppressLint("WorldReadableFiles")
92 private void writeToFile(Throwable error, String filename) 93 private void writeToFile(final Throwable error, final String filename)
93 { 94 {
94 Log.e("DCR", "Writing crash report"); 95 Log.e("DCR", "Writing crash report");
95 int versionCode = -1; 96 int versionCode = -1;
96 try 97 try
97 { 98 {
98 PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPac kageName(), 0); 99 final PackageInfo pi = context.getPackageManager().getPackageInfo(context. getPackageName(), 0);
99 versionCode = pi.versionCode; 100 versionCode = pi.versionCode;
100 } 101 }
101 catch (NameNotFoundException ex) 102 catch (final NameNotFoundException ex)
102 { 103 {
103 } 104 }
104 try 105 try
105 { 106 {
106 PrintWriter pw = new PrintWriter(context.openFileOutput(filename, Context. MODE_WORLD_READABLE)); 107 final PrintWriter pw = new PrintWriter(context.openFileOutput(filename, Co ntext.MODE_WORLD_READABLE));
107 // Write Android version 108 // Write Android version
108 pw.println(Build.VERSION.SDK_INT); 109 pw.println(Build.VERSION.SDK_INT);
109 // Write application build number 110 // Write application build number
110 pw.println(versionCode); 111 pw.println(versionCode);
111 112
112 // Write exception data 113 // Write exception data
113 printThrowable(error, pw); 114 printThrowable(error, pw);
114 Throwable cause = error.getCause(); 115 final Throwable cause = error.getCause();
115 // Write cause data 116 // Write cause data
116 if (cause != null) 117 if (cause != null)
117 { 118 {
118 pw.println("cause"); 119 pw.println("cause");
119 printThrowable(cause, pw); 120 printThrowable(cause, pw);
120 } 121 }
121 pw.flush(); 122 pw.flush();
122 pw.close(); 123 pw.close();
123 } 124 }
124 catch (Throwable e) 125 catch (final Throwable e)
125 { 126 {
126 e.printStackTrace(); 127 e.printStackTrace();
127 } 128 }
128 } 129 }
129 130
130 private void printThrowable(Throwable error, PrintWriter pw) 131 private void printThrowable(final Throwable error, final PrintWriter pw)
131 { 132 {
132 // Use simplest format for speed - we do not have much time 133 // Use simplest format for speed - we do not have much time
133 pw.println(error.getClass().getName()); 134 pw.println(error.getClass().getName());
134 pw.println(error.getMessage()); 135 pw.println(error.getMessage());
135 StackTraceElement[] trace = error.getStackTrace(); 136 final StackTraceElement[] trace = error.getStackTrace();
136 for (StackTraceElement element : trace) 137 for (final StackTraceElement element : trace)
137 { 138 {
138 pw.print(element.getClassName()); 139 pw.print(element.getClassName());
139 pw.print("|"); 140 pw.print("|");
140 pw.print(element.getMethodName()); 141 pw.print(element.getMethodName());
141 pw.print("|"); 142 pw.print("|");
142 pw.print(element.isNativeMethod()); 143 pw.print(element.isNativeMethod());
143 pw.print("|"); 144 pw.print("|");
144 pw.print(element.getFileName()); 145 pw.print(element.getFileName());
145 pw.print("|"); 146 pw.print("|");
146 pw.print(element.getLineNumber()); 147 pw.print(element.getLineNumber());
147 pw.println(); 148 pw.println();
148 } 149 }
149 } 150 }
150 151
151 public void saveProxySettings(String host, String port, String excl) 152 public void saveProxySettings(final String host, final String port, final Stri ng excl)
152 { 153 {
153 Log.e("DCR", "Saving proxy " + host + ":" + port + "/" + excl); 154 Log.e("DCR", "Saving proxy " + host + ":" + port + "/" + excl);
154 this.host = host; 155 this.host = host;
155 this.port = port; 156 this.port = port;
156 this.excl = excl; 157 this.excl = excl;
157 restoreProxy = true; 158 restoreProxy = true;
158 } 159 }
159 160
160 public void clearProxySettings() 161 public void clearProxySettings()
161 { 162 {
162 Log.e("DCR", "Clearing proxy"); 163 Log.e("DCR", "Clearing proxy");
163 restoreProxy = false; 164 restoreProxy = false;
164 int p = 0; 165 int p = 0;
165 try 166 try
166 { 167 {
167 p = Integer.valueOf(port); 168 p = Integer.valueOf(port);
168 } 169 }
169 catch (NumberFormatException e) 170 catch (final NumberFormatException e)
170 { 171 {
171 // ignore - no valid port, it will be correctly processed later 172 // ignore - no valid port, it will be correctly processed later
172 } 173 }
173 ProxySettings.setConnectionProxy(context, host, p, excl); 174 ProxySettings.setConnectionProxy(context, host, p, excl);
174 } 175 }
175 } 176 }
OLDNEW
« no previous file with comments | « src/org/adblockplus/android/ConfigurationActivity.java ('k') | src/org/adblockplus/android/CrashReportDialog.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld