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