1 package eu
.alefzero
.owncloud
;
3 import java
.io
.BufferedReader
;
5 import java
.io
.FileWriter
;
6 import java
.io
.InputStreamReader
;
7 import java
.io
.PrintWriter
;
8 import java
.io
.StringWriter
;
10 import java
.lang
.Thread
.UncaughtExceptionHandler
;
11 import java
.util
.LinkedList
;
12 import java
.util
.List
;
14 import eu
.alefzero
.owncloud
.authenticator
.AccountAuthenticator
;
16 import android
.accounts
.Account
;
17 import android
.accounts
.AccountManager
;
18 import android
.content
.Context
;
19 import android
.net
.ConnectivityManager
;
20 import android
.os
.Environment
;
21 import android
.util
.Log
;
23 public class CrashHandler
implements UncaughtExceptionHandler
{
25 private Context mContext
;
26 private static final String TAG
= "CrashHandler";
27 private static final String crash_filename_template
= "crash";
28 private static List
<String
> TAGS
;
29 private UncaughtExceptionHandler defaultUEH
;
32 TAGS
= new LinkedList
<String
>();
33 TAGS
.add("AccountAuthenticator");
34 TAGS
.add("AccountAuthenticator");
35 TAGS
.add("ConnectionCheckerRunnable");
36 TAGS
.add("EasySSLSocketFactory");
37 TAGS
.add("FileDataStorageManager");
38 TAGS
.add("PhotoTakenBroadcastReceiver");
39 TAGS
.add("InstantUploadService");
40 TAGS
.add("FileDownloader");
41 TAGS
.add("FileUploader");
42 TAGS
.add("LocationUpdateService");
43 TAGS
.add("FileSyncAdapter");
44 TAGS
.add("AuthActivity");
45 TAGS
.add("OwnCloudPreferences");
46 TAGS
.add("FileDetailFragment");
47 TAGS
.add("FileListFragment");
48 TAGS
.add("ownCloudUploader");
49 TAGS
.add("WebdavClient");
52 public CrashHandler(Context context
) {
54 defaultUEH
= Thread
.getDefaultUncaughtExceptionHandler();
58 public void uncaughtException(Thread thread
, Throwable ex
) {
59 final Writer writer
= new StringWriter();
60 final PrintWriter printwriter
= new PrintWriter(writer
);
61 ex
.printStackTrace(printwriter
);
62 final String startrace
= writer
.toString();
64 File ocdir
= new File(Environment
.getExternalStorageDirectory().getAbsoluteFile(), "owncloud");
67 String crash_filename
= crash_filename_template
+ System
.currentTimeMillis() + ".txt";
68 File crashfile
= new File(ocdir
, crash_filename
);
70 ConnectivityManager cm
= (ConnectivityManager
) mContext
.getSystemService(Context
.CONNECTIVITY_SERVICE
);
71 String header
= String
.format("Model: %s, SDK: %d, Current net: %s\n\n",
72 android
.os
.Build
.MODEL
,
73 android
.os
.Build
.VERSION
.SDK_INT
,
74 cm
.getActiveNetworkInfo() != null ? cm
.getActiveNetworkInfo().getTypeName() : "NONE");
75 Account account
= AccountUtils
.getCurrentOwnCloudAccount(mContext
);
76 AccountManager am
= AccountManager
.get(mContext
);
77 String header2
= String
.format("Account: %s, OCUrl: %s, OCVersion: %s\n\n",
79 am
.getUserData(account
, AccountAuthenticator
.KEY_OC_BASE_URL
),
80 am
.getUserData(account
, AccountAuthenticator
.KEY_OC_VERSION
));
82 crashfile
.createNewFile();
83 FileWriter fw
= new FileWriter(crashfile
);
89 String logcat
= "logcat -d *:S ";
94 Process process
= Runtime
.getRuntime().exec(logcat
);
95 BufferedReader br
= new BufferedReader(new InputStreamReader(process
.getInputStream()));
97 while ((logline
= br
.readLine()) != null
)
98 fw
.write(logline
+"\n");
103 } catch (Exception e1
) {
104 Log
.e(TAG
, "Crash handler failed to run logcat, WTF!");
105 defaultUEH
.uncaughtException(thread
, ex
);