You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.0 KiB
146 lines
4.0 KiB
4 months ago
|
/*
|
||
|
* Copyright (C) 2013 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package com.android.incallui;
|
||
|
|
||
|
import android.net.Uri;
|
||
|
import android.telecom.PhoneAccount;
|
||
|
import android.telephony.PhoneNumberUtils;
|
||
|
import com.android.dialer.common.LogUtil;
|
||
|
import java.security.MessageDigest;
|
||
|
import java.security.NoSuchAlgorithmException;
|
||
|
|
||
|
/** Manages logging for the entire class. */
|
||
|
public class Log {
|
||
|
|
||
|
public static void d(String tag, String msg) {
|
||
|
LogUtil.d(tag, msg);
|
||
|
}
|
||
|
|
||
|
public static void d(Object obj, String msg) {
|
||
|
LogUtil.d(getPrefix(obj), msg);
|
||
|
}
|
||
|
|
||
|
public static void d(Object obj, String str1, Object str2) {
|
||
|
LogUtil.d(getPrefix(obj), str1 + str2);
|
||
|
}
|
||
|
|
||
|
public static void v(Object obj, String msg) {
|
||
|
LogUtil.v(getPrefix(obj), msg);
|
||
|
}
|
||
|
|
||
|
public static void v(Object obj, String str1, Object str2) {
|
||
|
LogUtil.v(getPrefix(obj), str1 + str2);
|
||
|
}
|
||
|
|
||
|
public static void e(String tag, String msg, Exception e) {
|
||
|
LogUtil.e(tag, msg, e);
|
||
|
}
|
||
|
|
||
|
public static void e(String tag, String msg) {
|
||
|
LogUtil.e(tag, msg);
|
||
|
}
|
||
|
|
||
|
public static void e(Object obj, String msg, Exception e) {
|
||
|
LogUtil.e(getPrefix(obj), msg, e);
|
||
|
}
|
||
|
|
||
|
public static void e(Object obj, String msg) {
|
||
|
LogUtil.e(getPrefix(obj), msg);
|
||
|
}
|
||
|
|
||
|
public static void i(String tag, String msg) {
|
||
|
LogUtil.i(tag, msg);
|
||
|
}
|
||
|
|
||
|
public static void i(Object obj, String msg) {
|
||
|
LogUtil.i(getPrefix(obj), msg);
|
||
|
}
|
||
|
|
||
|
public static void w(Object obj, String msg) {
|
||
|
LogUtil.w(getPrefix(obj), msg);
|
||
|
}
|
||
|
|
||
|
public static String piiHandle(Object pii) {
|
||
|
if (pii == null || LogUtil.isVerboseEnabled()) {
|
||
|
return String.valueOf(pii);
|
||
|
}
|
||
|
|
||
|
if (pii instanceof Uri) {
|
||
|
Uri uri = (Uri) pii;
|
||
|
|
||
|
// All Uri's which are not "tel" go through normal pii() method.
|
||
|
if (!PhoneAccount.SCHEME_TEL.equals(uri.getScheme())) {
|
||
|
return pii(pii);
|
||
|
} else {
|
||
|
pii = uri.getSchemeSpecificPart();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
String originalString = String.valueOf(pii);
|
||
|
StringBuilder stringBuilder = new StringBuilder(originalString.length());
|
||
|
for (char c : originalString.toCharArray()) {
|
||
|
if (PhoneNumberUtils.isDialable(c)) {
|
||
|
stringBuilder.append('*');
|
||
|
} else {
|
||
|
stringBuilder.append(c);
|
||
|
}
|
||
|
}
|
||
|
return stringBuilder.toString();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Redact personally identifiable information for production users. If we are running in verbose
|
||
|
* mode, return the original string, otherwise return a SHA-1 hash of the input string.
|
||
|
*/
|
||
|
public static String pii(Object pii) {
|
||
|
if (pii == null || LogUtil.isVerboseEnabled()) {
|
||
|
return String.valueOf(pii);
|
||
|
}
|
||
|
return "[" + secureHash(String.valueOf(pii).getBytes()) + "]";
|
||
|
}
|
||
|
|
||
|
private static String secureHash(byte[] input) {
|
||
|
MessageDigest messageDigest;
|
||
|
try {
|
||
|
messageDigest = MessageDigest.getInstance("SHA-1");
|
||
|
} catch (NoSuchAlgorithmException e) {
|
||
|
return null;
|
||
|
}
|
||
|
messageDigest.update(input);
|
||
|
byte[] result = messageDigest.digest();
|
||
|
return encodeHex(result);
|
||
|
}
|
||
|
|
||
|
private static String encodeHex(byte[] bytes) {
|
||
|
StringBuffer hex = new StringBuffer(bytes.length * 2);
|
||
|
|
||
|
for (int i = 0; i < bytes.length; i++) {
|
||
|
int byteIntValue = bytes[i] & 0xff;
|
||
|
if (byteIntValue < 0x10) {
|
||
|
hex.append("0");
|
||
|
}
|
||
|
hex.append(Integer.toString(byteIntValue, 16));
|
||
|
}
|
||
|
|
||
|
return hex.toString();
|
||
|
}
|
||
|
|
||
|
private static String getPrefix(Object obj) {
|
||
|
return (obj == null ? "" : (obj.getClass().getSimpleName()));
|
||
|
}
|
||
|
}
|