11e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde/*
21e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * Copyright (C) 2015 The Android Open Source Project
31e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde *
41e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * Licensed under the Apache License, Version 2.0 (the "License");
51e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * you may not use this file except in compliance with the License.
61e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * You may obtain a copy of the License at
71e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde *
81e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde *      http://www.apache.org/licenses/LICENSE-2.0
91e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde *
101e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * Unless required by applicable law or agreed to in writing, software
111e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * distributed under the License is distributed on an "AS IS" BASIS,
121e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * See the License for the specific language governing permissions and
141e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * limitations under the License.
151e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde */
161e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
171e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohdepackage com.android.camera.debug;
181e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
191e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohdeimport com.android.camera.debug.Log.Tag;
201738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lallimport com.google.common.annotations.VisibleForTesting;
211e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
221e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohdeimport javax.annotation.ParametersAreNonnullByDefault;
231e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
241e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde/**
251e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde * Set of commonly used loggers.
261e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde */
271e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde@ParametersAreNonnullByDefault
281e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohdepublic class Loggers {
291e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    /**
301e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     * This creates a factory that will eat all log input.
311e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     */
321e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    public static Logger.Factory noOpFactory() {
331e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        return NoOpLoggerFactory.instance();
341e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    }
351e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
361e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    /**
371738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * This creates a factory that will use the standard android static log
381738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * methods.
391e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     */
401e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    public static Logger.Factory tagFactory() {
411e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        return TagLoggerFactory.instance();
421e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    }
431e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
441e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    /**
451738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * Creates a logger factory which always returns the given logger.
461738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     */
471738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall    public static Logger.Factory factoryFor(final Logger logger) {
481738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        return new Logger.Factory() {
491738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall            @Override
501738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall            public Logger create(Tag tag) {
511738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall                return logger;
521738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall            }
531738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        };
541738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall    }
551738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall
561738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall    /**
571e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     * Creates loggers that eat all input and does nothing.
581e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     */
591e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    private static class NoOpLoggerFactory implements Logger.Factory {
601e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        private static class Singleton {
611e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            private static final NoOpLoggerFactory INSTANCE = new NoOpLoggerFactory();
621e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
631e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
641738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public static NoOpLoggerFactory instance() {
651738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall            return Singleton.INSTANCE;
661738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
671e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
681e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        private final NoOpLogger mNoOpLogger;
691e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
701e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public NoOpLoggerFactory() {
711e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            mNoOpLogger = new NoOpLogger();
721e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
731e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
741e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
751e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public Logger create(Tag tag) {
761e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            return mNoOpLogger;
771e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
781e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    }
791e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
801e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    /**
811738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * Creates loggers that use tag objects to write to standard android log
821738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * output.
831e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     */
841e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    private static class TagLoggerFactory implements Logger.Factory {
851e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        private static class Singleton {
861e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            private static final TagLoggerFactory INSTANCE = new TagLoggerFactory();
871e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
881e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
891738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public static TagLoggerFactory instance() {
901738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall            return Singleton.INSTANCE;
911738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
921e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
931e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
941e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public Logger create(Tag tag) {
951e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            return new TagLogger(tag);
961e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
971e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    }
981e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
991e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    /**
1001e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     * NoOp logger eats all input messages and does not display them.
1011e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     */
1021e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    private static class NoOpLogger implements Logger {
1031e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1041738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void d(String msg) {
1051738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1061e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1071e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1081738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void d(String msg, Throwable tr) {
1091738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1101e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1111e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1121738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void e(String msg) {
1131738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1141e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1151e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1161738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void e(String msg, Throwable tr) {
1171738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1181e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1191e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1201738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void i(String msg) {
1211738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1221e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1231e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1241738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void i(String msg, Throwable tr) {
1251738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1261e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1271e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1281738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void v(String msg) {
1291738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1301e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1311e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1321738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void v(String msg, Throwable tr) {
1331738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1341e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1351e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1361738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void w(String msg) {
1371738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1381e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1391e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1401738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        public void w(String msg, Throwable tr) {
1411738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall        }
1421e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    }
1431e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1441e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    /**
1451738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * TagLogger logger writes to the standard static log output with the given
1461738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall     * tag object.
1471e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde     */
1481e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    private static class TagLogger implements Logger {
1491e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        private final Log.Tag mTag;
1501e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1511e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public TagLogger(Log.Tag tag) {
1521e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            mTag = tag;
1531e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1541e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1551e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1561e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void d(String msg) {
1571e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.d(mTag, msg);
1581e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1591e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1601e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1611e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void d(String msg, Throwable tr) {
1621e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.d(mTag, msg, tr);
1631e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1641e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1651e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1661e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void e(String msg) {
1671e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.e(mTag, msg);
1681e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1691e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1701e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1711e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void e(String msg, Throwable tr) {
1721e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.e(mTag, msg, tr);
1731e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1741e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1751e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1761e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void i(String msg) {
1771e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.i(mTag, msg);
1781e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1791e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1801e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1811e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void i(String msg, Throwable tr) {
1821e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.i(mTag, msg, tr);
1831e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1841e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1851e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1861e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void v(String msg) {
1871e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.v(mTag, msg);
1881e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1891e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1901e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1911e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void v(String msg, Throwable tr) {
1921e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.v(mTag, msg, tr);
1931e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1941e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
1951e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
1961e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void w(String msg) {
1971e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.w(mTag, msg);
1981e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
1991e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde
2001e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        @Override
2011e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        public void w(String msg, Throwable tr) {
2021e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde            Log.w(mTag, msg, tr);
2031e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde        }
2041e123ea83881996b6c5ac3e29702050cc42d43adPaul Rohde    }
2051738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall}
206