From: Bartek Przybylski Date: Tue, 12 Jun 2012 20:58:07 +0000 (+0200) Subject: crashlog handler X-Git-Tag: oc-android-1.4.3~366 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/efc9808d9ab46612d7bcc0d76b3c151bfb92861a?ds=sidebyside crashlog handler --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index bbd5fb24..5e2cdee4 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -32,6 +32,8 @@ + + TAGS; + private UncaughtExceptionHandler defaultUEH; + + static { + TAGS = new LinkedList(); + TAGS.add("AccountAuthenticator"); + TAGS.add("AccountAuthenticator"); + TAGS.add("ConnectionCheckerRunnable"); + TAGS.add("EasySSLSocketFactory"); + TAGS.add("FileDataStorageManager"); + TAGS.add("PhotoTakenBroadcastReceiver"); + TAGS.add("InstantUploadService"); + TAGS.add("FileDownloader"); + TAGS.add("FileUploader"); + TAGS.add("LocationUpdateService"); + TAGS.add("FileSyncAdapter"); + TAGS.add("AuthActivity"); + TAGS.add("OwnCloudPreferences"); + TAGS.add("FileDetailFragment"); + TAGS.add("FileListFragment"); + TAGS.add("ownCloudUploader"); + TAGS.add("WebdavClient"); + } + + public CrashHandler(Context context) { + mContext = context; + defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); + } + + @Override + public void uncaughtException(Thread thread, Throwable ex) { + final Writer writer = new StringWriter(); + final PrintWriter printwriter = new PrintWriter(writer); + ex.printStackTrace(printwriter); + final String startrace = writer.toString(); + printwriter.close(); + File ocdir = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(), "owncloud"); + ocdir.mkdirs(); + + String crash_filename = crash_filename_template + System.currentTimeMillis() + ".txt"; + File crashfile = new File(ocdir, crash_filename); + try { + ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + String header = String.format("Model: %s, SDK: %d, Current net: %s\n\n", + android.os.Build.MODEL, + android.os.Build.VERSION.SDK_INT, + cm.getActiveNetworkInfo() != null ? cm.getActiveNetworkInfo().getTypeName() : "NONE"); + Account account = AccountUtils.getCurrentOwnCloudAccount(mContext); + AccountManager am = AccountManager.get(mContext); + String header2 = String.format("Account: %s, OCUrl: %s, OCVersion: %s\n\n", + account.name, + am.getUserData(account, AccountAuthenticator.KEY_OC_BASE_URL), + am.getUserData(account, AccountAuthenticator.KEY_OC_VERSION)); + + crashfile.createNewFile(); + FileWriter fw = new FileWriter(crashfile); + fw.write(header); + fw.write(header2); + fw.write(startrace); + fw.write("\n\n"); + + String logcat = "logcat -d *:S "; + + for (String s : TAGS) + logcat += s + ":V "; + + Process process = Runtime.getRuntime().exec(logcat); + BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); + String logline; + while ((logline = br.readLine()) != null) + fw.write(logline+"\n"); + + br.close(); + fw.close(); + + } catch (Exception e1) { + Log.e(TAG, "Crash handler failed to run logcat, WTF!"); + defaultUEH.uncaughtException(thread, ex); + return; + } + } +} diff --git a/src/eu/alefzero/owncloud/CrashlogSendActivity.java b/src/eu/alefzero/owncloud/CrashlogSendActivity.java new file mode 100644 index 00000000..b9217603 --- /dev/null +++ b/src/eu/alefzero/owncloud/CrashlogSendActivity.java @@ -0,0 +1,7 @@ +package eu.alefzero.owncloud; + +import com.actionbarsherlock.app.SherlockActivity; + +public class CrashlogSendActivity extends SherlockActivity { + +} diff --git a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java index 5c027035..0f2daf01 100644 --- a/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java +++ b/src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java @@ -18,7 +18,10 @@ package eu.alefzero.owncloud.ui.activity; +import java.io.BufferedReader; import java.io.File; +import java.io.InputStreamReader; +import java.lang.Thread.UncaughtExceptionHandler; import java.net.URLEncoder; import java.util.ArrayList; @@ -38,6 +41,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; +import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -55,6 +59,7 @@ import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.Window; import eu.alefzero.owncloud.AccountUtils; +import eu.alefzero.owncloud.CrashHandler; import eu.alefzero.owncloud.R; import eu.alefzero.owncloud.authenticator.AccountAuthenticator; import eu.alefzero.owncloud.datamodel.DataStorageManager; @@ -96,7 +101,9 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarIndeterminateVisibility(false); - + + Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext())); + if(savedInstanceState != null){ mCurrentDir = (OCFile) savedInstanceState.getParcelable(KEY_CURRENT_DIR); } @@ -558,6 +565,5 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements intent.putExtra("authorities", new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE }); startActivity(intent); } - } - + } }