Merge "Fix a Sms7BitEncodingTranslator threading issue, since translate() method can easily race when called by multiple threads." am: 02b664649a

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1360883

Change-Id: I74f69217af75d4e4456fb05c788d334c25e9b37b
This commit is contained in:
Shuo Qian
2020-07-10 22:38:53 +00:00
committed by Automerger Merge Worker

View File

@@ -65,13 +65,7 @@ public class Sms7BitEncodingTranslator {
return "";
}
if (!mIs7BitTranslationTableLoaded) {
mTranslationTableCommon = new SparseIntArray();
mTranslationTableGSM = new SparseIntArray();
mTranslationTableCDMA = new SparseIntArray();
load7BitTranslationTableFromXml();
mIs7BitTranslationTableLoaded = true;
}
ensure7BitTranslationTableLoaded();
if ((mTranslationTableCommon != null && mTranslationTableCommon.size() > 0) ||
(mTranslationTableGSM != null && mTranslationTableGSM.size() > 0) ||
@@ -115,6 +109,8 @@ public class Sms7BitEncodingTranslator {
*/
int translation = -1;
ensure7BitTranslationTableLoaded();
if (mTranslationTableCommon != null) {
translation = mTranslationTableCommon.get(c, -1);
}
@@ -155,6 +151,18 @@ public class Sms7BitEncodingTranslator {
}
}
private static void ensure7BitTranslationTableLoaded() {
synchronized (Sms7BitEncodingTranslator.class) {
if (!mIs7BitTranslationTableLoaded) {
mTranslationTableCommon = new SparseIntArray();
mTranslationTableGSM = new SparseIntArray();
mTranslationTableCDMA = new SparseIntArray();
load7BitTranslationTableFromXml();
mIs7BitTranslationTableLoaded = true;
}
}
}
/**
* Load the whole translation table file from the framework resource
* encoded in XML.