1ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak/* 2ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Copyright (c) 2015, Motorola Mobility LLC 3ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * All rights reserved. 4ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 5ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Redistribution and use in source and binary forms, with or without 6ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * modification, are permitted provided that the following conditions are met: 7ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * - Redistributions of source code must retain the above copyright 8ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * notice, this list of conditions and the following disclaimer. 9ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * - Redistributions in binary form must reproduce the above copyright 10ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * notice, this list of conditions and the following disclaimer in the 11ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * documentation and/or other materials provided with the distribution. 12ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * - Neither the name of Motorola Mobility nor the 13ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * names of its contributors may be used to endorse or promote products 14ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * derived from this software without specific prior written permission. 15ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 16ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 18ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA MOBILITY LLC BE LIABLE 20ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 26ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * DAMAGE. 27ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 28ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 29ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakpackage com.android.ims.internal; 30ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 31ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport java.lang.String; 32ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.util.Log; 33ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 34ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.text.TextUtils; 35ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 36ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak/** 37ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Logger 38ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 39ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @hide 40ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 41ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakpublic class Logger { 42ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 4324c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean VERBOSE = isLoggable(android.util.Log.VERBOSE); 4424c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean DEBUG = isLoggable(android.util.Log.DEBUG); 4524c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean INFO = isLoggable(android.util.Log.INFO); 4624c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean WARN = isLoggable(android.util.Log.WARN); 4724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean ERROR = isLoggable(android.util.Log.ERROR); 48ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 49ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 50ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * RCS test mode flag 51ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 5224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean mRcsTestMode = false; 53ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 54ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 55ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Log tag name 56ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 5724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static String TAG = "rcs"; 58ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 59ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 60ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Classname 61ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 6224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private String mClassName; 63ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 64ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 65ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Constructor 66ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 6724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger * @param mClassName Classname 68ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 6924c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private Logger(String tagName, String mClassName) { 70ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak if(!TextUtils.isEmpty(tagName)) { 7124c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger TAG = tagName; 72ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 73ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 7424c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger int index = mClassName.lastIndexOf('.'); 75ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak if (index != -1) { 7624c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger this.mClassName = mClassName.substring(index+1); 77ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } else { 7824c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger this.mClassName = mClassName; 79ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 80ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 81ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 82ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public static void setRcsTestMode(boolean test) { 8324c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger mRcsTestMode = test; 8424c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger // Reset log-ability of each mode. 8524c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger DEBUG = isLoggable(android.util.Log.DEBUG); 8624c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger INFO = isLoggable(android.util.Log.INFO); 8724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger VERBOSE = isLoggable(android.util.Log.VERBOSE); 8824c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger WARN = isLoggable(android.util.Log.WARN); 8924c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger ERROR = isLoggable(android.util.Log.ERROR); 90ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 91ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 92ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 93ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Is logger activated. Reserved for future debug tool to turn on/off the log only. 94ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 95ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @return boolean 96ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 9724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private boolean isActivated() { 98ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak return true; 99ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 100ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 101ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 10224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger * Verbose trace 10324c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger * 10424c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger * @param trace Trace 10524c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger */ 10624c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger public void verbose(String trace) { 10724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && VERBOSE) { 10824c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.d(TAG, "[" + mClassName +"] " + trace); 10924c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger } 11024c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger } 11124c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger 11224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger /** 113ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Debug trace 114ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 115ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 116ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 117ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void debug(String trace) { 11824c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && DEBUG) { 11924c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.d(TAG, "[" + mClassName +"] " + trace); 120ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 121ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 122ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 123ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 124ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Debug trace 125ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 126ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 127ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param e the exception which need to be printed. 128ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 129ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void debug(String trace, Throwable e) { 13024c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && DEBUG) { 13124c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.d(TAG, "[" + mClassName +"] " + trace, e); 132ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 133ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 134ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 135ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 136ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Info trace 137ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 138ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 139ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 140ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void info(String trace) { 14124c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && INFO) { 14224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.i(TAG, "[" + mClassName +"] " + trace); 143ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 144ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 145ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 146ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 147ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Warning trace 148ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 149ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 150ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 151ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void warn(String trace) { 15224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && WARN) { 15324c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.w(TAG, "[" + mClassName +"] " + trace); 154ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 155ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 156ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 157ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 158ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Error trace 159ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 160ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 161ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 162ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void error(String trace) { 16324c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && ERROR) { 16424c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.e(TAG, "[" + mClassName +"] " + trace); 165ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 166ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 167ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 168ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 169ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Error trace 170ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 171ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 172ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param e Exception 173ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 174ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void error(String trace, Throwable e) { 17524c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger if (isActivated() && ERROR) { 17624c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.e(TAG, "[" + mClassName +"] " + trace, e); 177ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 178ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 179ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 180ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /* 181ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Print the debug log and don't consider the traceLevel 182ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 183ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 184ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param e Exception 185ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 186ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void print(String trace) { 18724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.i(TAG, "[" + mClassName +"] " + trace); 188ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 189ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 190ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 191ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Print the debug log and don't consider the traceLevel 192ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 193ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param trace Trace 194ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param e Exception 195ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 196ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public void print(String trace, Throwable e) { 19724c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger Log.i(TAG, "[" + mClassName +"] " + trace, e); 19824c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger } 19924c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger 200518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger // Hide all numbers except for the last two 201518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger public static String hidePhoneNumberPii(String number) { 202518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger if(TextUtils.isEmpty(number) || mRcsTestMode || number.length() <= 2) { 203518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger return number; 204518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger } 205518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger StringBuilder sb = new StringBuilder(number.length()); 206518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger sb.append("...*"); 207518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger sb.append(number.substring(number.length()-2, number.length())); 208518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger return sb.toString(); 209518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger } 210518a6aa0d7e96379d504e07bb6bd5f5379a08d68Brad Ebinger 21124c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger /** 21224c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger * Determines if the debug level is currently loggable. 21324c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger */ 21424c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger private static boolean isLoggable(int level) { 21524c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger return mRcsTestMode || android.util.Log.isLoggable(TAG, level); 216ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 217ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 218ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 219ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Create a static instance 220ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 221ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param classname Classname 222ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @return Instance 223ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 224ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public static synchronized Logger getLogger(String tagName, String classname) { 225ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak return new Logger(tagName, classname); 226ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 227ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 228ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak /** 229ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Create a static instance 230ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * 231ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @param classname Classname 232ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * @return Instance 233ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */ 234ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak public static synchronized Logger getLogger(String classname) { 23524c2d001dcf56d035bf3849c160f0bbd08668cccBrad Ebinger return new Logger(TAG, classname); 236ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak } 237ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak} 238ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak 239