Fixed potential string conversion issues
Replaced all toLowerCase() with toLowerCase(Locale.ROOT).
Replaced all toUpperCase() with toUpperCase(Locale.ROOT).
Fix: 250048156
Test: atest FrameworksTelephonyTests + Basic testing
Change-Id: I1dbfed792475377cd07bcf2b8265f2ae3a1117fc
diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java
index 2cbb7c5..96915d4 100644
--- a/src/com/android/phone/CallForwardEditPreference.java
+++ b/src/com/android/phone/CallForwardEditPreference.java
@@ -28,6 +28,7 @@
import com.android.internal.telephony.Phone;
import java.util.HashMap;
+import java.util.Locale;
public class CallForwardEditPreference extends EditPhoneNumberPreference {
private static final String LOG_TAG = "CallForwardEditPreference";
@@ -287,7 +288,7 @@
if (telephonyManager == null) {
return "";
}
- return telephonyManager.getNetworkCountryIso().toUpperCase();
+ return telephonyManager.getNetworkCountryIso().toUpperCase(Locale.ROOT);
}
// Message protocol:
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 11e5b69..463cdb1 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -1178,7 +1178,7 @@
return 0;
}
- boolean isEnabled = "true".equals(arg.toLowerCase());
+ boolean isEnabled = "true".equals(arg.toLowerCase(Locale.ROOT));
try {
mInterface.setDeviceToDeviceForceEnabled(isEnabled);
} catch (RemoteException e) {
diff --git a/src/com/android/phone/callcomposer/DigestAuthUtils.java b/src/com/android/phone/callcomposer/DigestAuthUtils.java
index 2f081f7..770aadf 100644
--- a/src/com/android/phone/callcomposer/DigestAuthUtils.java
+++ b/src/com/android/phone/callcomposer/DigestAuthUtils.java
@@ -30,6 +30,7 @@
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.ParseException;
+import java.util.Locale;
public class DigestAuthUtils {
private static final String TAG = DigestAuthUtils.class.getSimpleName();
@@ -54,12 +55,12 @@
public static String generateAuthorizationHeader(WWWAuthenticate parsedHeader,
GbaCredentials credentials, String method, String uri) {
if (!TextUtils.isEmpty(parsedHeader.getAlgorithm())
- && !MD5_ALGORITHM.equals(parsedHeader.getAlgorithm().toLowerCase())) {
+ && !MD5_ALGORITHM.equals(parsedHeader.getAlgorithm().toLowerCase(Locale.ROOT))) {
Log.e(TAG, "This client only supports MD5 auth");
return "";
}
if (!TextUtils.isEmpty(parsedHeader.getQop())
- && !AUTH_QOP.equals(parsedHeader.getQop().toLowerCase())) {
+ && !AUTH_QOP.equals(parsedHeader.getQop().toLowerCase(Locale.ROOT))) {
Log.e(TAG, "This client only supports the auth qop");
return "";
}
@@ -137,7 +138,7 @@
}
private static String base16(byte[] input) {
- return BaseEncoding.base16().encode(input).toLowerCase();
+ return BaseEncoding.base16().encode(input).toLowerCase(Locale.ROOT);
}
private static MessageDigest getMd5Digest() {
diff --git a/src/com/android/services/telephony/ConferenceParticipantConnection.java b/src/com/android/services/telephony/ConferenceParticipantConnection.java
index b7ecd48..92e95cc 100644
--- a/src/com/android/services/telephony/ConferenceParticipantConnection.java
+++ b/src/com/android/services/telephony/ConferenceParticipantConnection.java
@@ -27,6 +27,8 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.telephony.Rlog;
+import java.util.Locale;
+
/**
* Represents a participant in a conference call.
*/
@@ -189,7 +191,7 @@
// The SubscriptionInfo reports ISO country codes in lower case. Convert to upper case,
// since ultimately we use this ISO when formatting the CEP phone number, and the phone
// number formatting library expects uppercase ISO country codes.
- return subInfo.getCountryIso().toUpperCase();
+ return subInfo.getCountryIso().toUpperCase(Locale.ROOT);
}
/**
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index a9b4c71..115c32b 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -72,6 +72,7 @@
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
import java.util.Optional;
import java.util.function.Predicate;
@@ -924,7 +925,7 @@
// Next check whether we're in or near a country that supports it
String country =
mPhone.getServiceStateTracker().getLocaleTracker()
- .getLastKnownCountryIso().toLowerCase();
+ .getLastKnownCountryIso().toLowerCase(Locale.ROOT);
String[] supportedCountries = mContext.getResources().getStringArray(
R.array.config_simless_emergency_rtt_supported_countries);
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 684e03a..962053c 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -95,6 +95,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -1673,7 +1674,8 @@
if (filteredCnapNames != null) {
long cnapNameMatches = Arrays.asList(filteredCnapNames)
.stream()
- .filter(filteredCnapName -> filteredCnapName.equals(cnapName.toUpperCase()))
+ .filter(filteredCnapName -> filteredCnapName.equals(
+ cnapName.toUpperCase(Locale.ROOT)))
.count();
if (cnapNameMatches > 0) {
Log.i(this, "filterCnapName: Filtered CNAP Name: " + cnapName);
diff --git a/src/com/android/services/telephony/rcs/SipTransportController.java b/src/com/android/services/telephony/rcs/SipTransportController.java
index 0aa3aa0..1fc1349 100644
--- a/src/com/android/services/telephony/rcs/SipTransportController.java
+++ b/src/com/android/services/telephony/rcs/SipTransportController.java
@@ -56,6 +56,7 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
@@ -917,7 +918,7 @@
it.remove();
deniedTags.add(new FeatureTagState(tag,
SipDelegateManager.DENIED_REASON_IN_USE_BY_ANOTHER_DELEGATE));
- } else if (!mFeatureTagsAllowed.contains(tag.trim().toLowerCase())) {
+ } else if (!mFeatureTagsAllowed.contains(tag.trim().toLowerCase(Locale.ROOT))) {
logi(tag + " is not allowed per config.");
it.remove();
deniedTags.add(new FeatureTagState(tag,
@@ -1032,7 +1033,7 @@
CarrierConfigManager.Ims.KEY_RCS_FEATURE_TAG_ALLOWED_STRING_ARRAY);
if (tagConfigs != null && tagConfigs.length > 0) {
for (String tag : tagConfigs) {
- mFeatureTagsAllowed.add(tag.trim().toLowerCase());
+ mFeatureTagsAllowed.add(tag.trim().toLowerCase(Locale.ROOT));
}
}
}
diff --git a/src/com/android/services/telephony/rcs/validator/OutgoingTransportStateValidator.java b/src/com/android/services/telephony/rcs/validator/OutgoingTransportStateValidator.java
index 72d22f8..d532ea9 100644
--- a/src/com/android/services/telephony/rcs/validator/OutgoingTransportStateValidator.java
+++ b/src/com/android/services/telephony/rcs/validator/OutgoingTransportStateValidator.java
@@ -29,6 +29,7 @@
import java.util.Arrays;
import java.util.Collections;
+import java.util.Locale;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -166,7 +167,7 @@
}
// Only need to validate requests that start dialogs.
boolean startsDialog = Arrays.stream(SipSessionTracker.SIP_REQUEST_DIALOG_START_METHODS)
- .anyMatch(req -> req.equals(segments[0].trim().toLowerCase()));
+ .anyMatch(req -> req.equals(segments[0].trim().toLowerCase(Locale.ROOT)));
// If part of an existing dialog, then no need to validate.
boolean needsFeatureValidation = startsDialog && !getAllowedCallIds()
.contains(m.getCallIdParameter());
diff --git a/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSipRequestValidator.java b/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSipRequestValidator.java
index 2c2632f..afb86a0 100644
--- a/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSipRequestValidator.java
+++ b/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSipRequestValidator.java
@@ -22,6 +22,7 @@
import com.android.internal.telephony.SipMessageParsingUtils;
import java.util.Arrays;
+import java.util.Locale;
/**
* Validate that any outgoing SIP request message does not contain methods that are only generated
@@ -47,7 +48,7 @@
"malformed start line: " + message.getStartLine());
}
if (Arrays.stream(IMS_SERVICE_HANDLED_REQUEST_METHODS).anyMatch(
- s -> segments[0].toLowerCase().contains(s))) {
+ s -> segments[0].toLowerCase(Locale.ROOT).contains(s))) {
return new ValidationResult(
SipDelegateManager.MESSAGE_FAILURE_REASON_INVALID_START_LINE,
"restricted method: " + segments[0]);
diff --git a/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSubscribeValidator.java b/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSubscribeValidator.java
index 41074ed..de6bfe7 100644
--- a/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSubscribeValidator.java
+++ b/src/com/android/services/telephony/rcs/validator/RestrictedOutgoingSubscribeValidator.java
@@ -24,6 +24,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.Locale;
import java.util.stream.Collectors;
/**
@@ -60,7 +61,8 @@
return ValidationResult.SUCCESS;
}
boolean isRestricted = eventHeaders.stream().map(e -> e.second)
- .anyMatch(e -> Arrays.asList(RESTRICTED_EVENTS).contains(e.trim().toLowerCase()));
+ .anyMatch(e -> Arrays.asList(RESTRICTED_EVENTS).contains(e.trim().toLowerCase(
+ Locale.ROOT)));
return isRestricted ? new ValidationResult(
SipDelegateManager.MESSAGE_FAILURE_REASON_INVALID_HEADER_FIELDS,
diff --git a/testapps/TelephonyManagerTestApp/src/com/android/phone/testapps/telephonymanagertestapp/TelephonyManagerTestApp.java b/testapps/TelephonyManagerTestApp/src/com/android/phone/testapps/telephonymanagertestapp/TelephonyManagerTestApp.java
index 760c3bd..815c7e8 100644
--- a/testapps/TelephonyManagerTestApp/src/com/android/phone/testapps/telephonymanagertestapp/TelephonyManagerTestApp.java
+++ b/testapps/TelephonyManagerTestApp/src/com/android/phone/testapps/telephonymanagertestapp/TelephonyManagerTestApp.java
@@ -35,6 +35,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Locale;
/**
* Main activity.
@@ -158,7 +159,8 @@
mFilteredMethods.addAll(mMethods);
} else {
for (Method method : mMethods) {
- if (method.getName().toLowerCase().contains(text.toLowerCase())) {
+ if (method.getName().toLowerCase(Locale.ROOT)
+ .contains(text.toLowerCase(Locale.ROOT))) {
mFilteredMethods.add(method);
}
}
diff --git a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java
index 14d3b9c..4a47718 100644
--- a/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java
+++ b/testapps/TestRcsApp/TestApp/src/com/google/android/sample/rcsclient/util/NumberUtils.java
@@ -24,6 +24,8 @@
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.i18n.phonenumbers.Phonenumber;
+import java.util.Locale;
+
public class NumberUtils {
/**
@@ -33,7 +35,7 @@
*/
public static String formatNumber(Context context, String number) {
TelephonyManager manager = context.getSystemService(TelephonyManager.class);
- String simCountryIso = manager.getSimCountryIso().toUpperCase();
+ String simCountryIso = manager.getSimCountryIso().toUpperCase(Locale.ROOT);
PhoneNumberUtil util = PhoneNumberUtil.getInstance();
try {
Phonenumber.PhoneNumber phoneNumber = util.parse(number, simCountryIso);
diff --git a/tests/src/com/android/phone/ecc/EccDataTest.java b/tests/src/com/android/phone/ecc/EccDataTest.java
index 2cc622e..a52e2e7 100644
--- a/tests/src/com/android/phone/ecc/EccDataTest.java
+++ b/tests/src/com/android/phone/ecc/EccDataTest.java
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
+import java.util.Locale;
import java.util.zip.GZIPInputStream;
/**
@@ -53,7 +54,8 @@
for (ProtobufEccData.CountryInfo countryInfo : allEccMessages.countries) {
assertThat(countryInfo.isoCode).isNotEmpty();
- assertThat(countryInfo.isoCode).isEqualTo(countryInfo.isoCode.toUpperCase().trim());
+ assertThat(countryInfo.isoCode).isEqualTo(countryInfo.isoCode.toUpperCase(
+ Locale.ROOT).trim());
assertThat(loadedIsos.contains(countryInfo.isoCode)).isFalse();
loadedIsos.add(countryInfo.isoCode);