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