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);