Initialize MD5 in logging in background

Use a background task to call MessageDigest.getInstance in order to
avoid a possible disk read on initialization.

Bug: 26069217
Change-Id: I0091ce012bcd811dfca0e85c21a12c54913ed919
This commit is contained in:
Hall Liu
2016-01-07 17:35:54 -08:00
parent 7004c4407f
commit e362e501ee
2 changed files with 28 additions and 8 deletions

View File

@@ -16,6 +16,8 @@
package android.telecom;
import android.os.AsyncTask;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.IllegalFormatException;
@@ -38,8 +40,26 @@ final public class Log {
public static final boolean WARN = isLoggable(android.util.Log.WARN);
public static final boolean ERROR = isLoggable(android.util.Log.ERROR);
private static MessageDigest sMessageDigest;
private Log() {}
public static void initMd5Sum() {
new AsyncTask<Void, Void, Void>() {
@Override
public Void doInBackground(Void... args) {
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
md = null;
}
sMessageDigest = md;
return null;
}
}.execute();
}
public static boolean isLoggable(int level) {
return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level);
}
@@ -137,15 +157,14 @@ final public class Log {
}
private static String secureHash(byte[] input) {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
return null;
if (sMessageDigest != null) {
sMessageDigest.reset();
sMessageDigest.update(input);
byte[] result = sMessageDigest.digest();
return encodeHex(result);
} else {
return "Uninitialized SHA1";
}
messageDigest.update(input);
byte[] result = messageDigest.digest();
return encodeHex(result);
}
private static String encodeHex(byte[] bytes) {

View File

@@ -498,6 +498,7 @@ public class TelecomManager {
mContext = context;
}
mTelecomServiceOverride = telecomServiceImpl;
android.telecom.Log.initMd5Sum();
}
/**