package com.droidwatcher; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import com.droidwatcher.services.AppService; import com.stericson.RootTools.RootTools; import android.os.Environment; import android.util.Log; public class Debug { //TODO: don't forget about debug public static final Boolean DEBUG = true; private static final String sTag = "DEBUG"; private static StringBuilder sStringBuilder; private static SimpleDateFormat sDateFormat; public static void setRootToolsDebugMode(){ RootTools.debugMode = DEBUG; } private static StringBuilder getStringBuilder(){ if (sStringBuilder == null) { sStringBuilder = new StringBuilder(); sDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS"); sStringBuilder .append(sDateFormat.format(new Date())).append("\n") .append("version: ").append(AppService.APP_VERSION).append("\n") .append("root: ").append(AppService.isRootAvailable()).append("\n") .append(android.os.Build.MODEL).append("\n") .append(android.os.Build.VERSION.RELEASE).append("\n") .append(android.os.Build.BRAND).append("\n") .append(android.os.Build.PRODUCT).append("\n") .append(android.os.Build.MODEL).append("\n") .append("\n").append("- - - - - - - - - - - - - -").append("\n"); } return sStringBuilder; } public static synchronized void debugLog(String msg){ try { getStringBuilder().append(sDateFormat.format(new Date())).append(" ").append(msg).append("\n"); } catch (Exception e) { exception(e); } } public static synchronized void debugLog(Exception exception){ try { getStringBuilder().append(sDateFormat.format(new Date())).append(" ").append(exception.getMessage()).append("\n"); StackTraceElement[] elements = exception.getStackTrace(); if (elements == null || elements.length == 0) { return; } for (StackTraceElement element : elements) { sStringBuilder .append(element.getClassName()) .append(" ") .append(element.getMethodName()) .append(" ") .append(element.getLineNumber()) .append("\n"); } } catch (Exception e) { exception(e); } } public static synchronized void dumpDebugLog() { if (sStringBuilder == null) { return; } try { File logFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/droid_watcher_log.txt"); if (!logFile.exists()) { try { logFile.createNewFile(); } catch (IOException e) { exception(e); } } BufferedWriter buf = null; try { buf = new BufferedWriter(new FileWriter(logFile, true)); buf.append(sStringBuilder.toString()); buf.newLine(); } catch (IOException e) { exception(e); } finally{ if (buf != null) { buf.close(); } } } catch (Exception e) { exception(e); } finally { sStringBuilder = null; } } public static void i(String msg){ i(sTag, msg); } private static void i(String tag, String msg){ if (DEBUG) { Log.i(tag, msg); } } public static void w(String msg){ w(sTag, msg, null); } public static void w(String msg, Throwable tr){ w(sTag, msg, tr); } private static void w(String tag, String msg, Throwable tr){ if (DEBUG) { if (tr == null) { Log.w(tag, msg); } else{ Log.w(tag, msg, tr); } } } public static void exception(Exception e){ if (DEBUG && e != null) { e.printStackTrace(); } } public static void stackTrace(StackTraceElement[] elements){ if (DEBUG) { StringBuilder sb = new StringBuilder(); for (StackTraceElement element : elements) { sb.append(element.getClassName() + " " + element.getMethodName()).append("\n"); } Log.i(sTag, sb.toString()); } } public static class Timer{ private static HashMap<String, Long> sTimers; public synchronized static void start(String name){ Log.i("TIMER", name + ": start timer"); if (sTimers == null) { sTimers = new HashMap<String, Long>(); } sTimers.put(name, System.currentTimeMillis()); } public synchronized static void stop(String name){ if (sTimers != null && sTimers.containsKey(name)) { Long begin = sTimers.get(name); Log.i("TIMER", name + ": " + (System.currentTimeMillis() - begin) + " ms."); sTimers.remove(name); } else{ Log.w("TIMER", name + ": timer does not exist"); } } } }