package org.emdev.common.log; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.util.Log; import java.io.File; import org.emdev.BaseDroidApp; public final class LogManager { static File LOG_STORAGE; static LogContext root; static EmergencyHandler handler; private LogManager() { } public static void init(final Context context) { LOG_STORAGE = new File(BaseDroidApp.APP_STORAGE, "logs"); LOG_STORAGE.mkdirs(); final boolean debugEnabled = isDebugEnabledByDefault(context); Log.i(BaseDroidApp.APP_NAME, "Debug logging " + (debugEnabled ? "enabled" : "disabled") + " by default"); root = new LogContext(BaseDroidApp.APP_NAME, debugEnabled); handler = new EmergencyHandler(); } private static boolean isDebugEnabledByDefault(final Context context) { boolean debugEnabled = false; final PackageManager pm = context.getPackageManager(); try { final PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0); final int flags = ApplicationInfo.FLAG_DEBUGGABLE | 0x100 /* ApplicationInfo.FLAG_TEST_ONLY */; debugEnabled = (pi.applicationInfo.flags & flags) != 0; } catch (final NameNotFoundException ex) { ex.printStackTrace(); } return debugEnabled; } public static LogContext root() { if (root == null) { root = new LogContext(BaseDroidApp.APP_PACKAGE, false); } return root; } public static void onUnexpectedError(final Throwable th) { handler.processException(th); } }