package io.dwak.holohackernews.app.util; import android.support.annotation.NonNull; import android.util.Log; import java.util.regex.Matcher; import java.util.regex.Pattern; import io.dwak.holohackernews.app.HackerNewsApplication; /** * This class contains passthrough methods to {@link Log} that only print if debugging is enabled * on the {@link HackerNewsApplication} class */ public class HNLog { private static final Pattern ANONYMOUS_CLASS = Pattern.compile("(\\$\\d+)+$"); public static void d(@NonNull String message){ if(HackerNewsApplication.isDebug()){ Log.d(getTag(), message); } } public static void d(@NonNull String tag, @NonNull String message){ if(HackerNewsApplication.isDebug()){ Log.d(tag, message); } } public static void e(@NonNull String tag, @NonNull String message){ if(HackerNewsApplication.isDebug()){ Log.e(tag, message); } } public static void i(@NonNull String tag, @NonNull String message){ if(HackerNewsApplication.isDebug()){ Log.i(tag, message); } } public static void w(@NonNull String tag, @NonNull String message){ if(HackerNewsApplication.isDebug()){ Log.w(tag, message); } } public static void v(@NonNull String tag, @NonNull String message){ if(HackerNewsApplication.isDebug()){ Log.v(tag, message); } } private static String getTag(){ StackTraceElement[] stackTrace = new Throwable().getStackTrace(); if (stackTrace.length <= 2) { throw new IllegalStateException( "Synthetic stacktrace didn't have enough elements: are you using proguard?"); } return createStackElementTag(stackTrace[2]); } protected static String createStackElementTag(StackTraceElement element) { String tag = element.getClassName(); Matcher m = ANONYMOUS_CLASS.matcher(tag); if (m.find()) { tag = m.replaceAll(""); } return tag.substring(tag.lastIndexOf('.') + 1); } }