Merge "Import translations. DO NOT MERGE" into rvc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1dbc0a0..4acfde3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12117,11 +12117,11 @@
     <!-- Content description for the 5G limited VoLTE dialog. [CHAR LIMIT=NONE] -->
     <string name="volte_5G_limited_text">This also turns off your 5G connection.\nDuring a voice call, you can\u2019t use the internet and some apps may not work.</string>
     <!-- Footer to show current limitation of 5G on DSDS mode. [CHAR LIMIT=NONE] -->
-    <string name="no_5g_in_dsds_text" product="default">When using 2 SIMs, this phone will be limited to 4G. <annotation id="url">Learn more</annotation>.</string>
+    <string name="no_5g_in_dsds_text" product="default">When using 2 SIMs, this phone will be limited to 4G. <annotation id="url">Learn more</annotation></string>
     <!-- Footer to show current limitation of 5G on DSDS mode for tablets. [CHAR LIMIT=NONE] -->
-    <string name="no_5g_in_dsds_text" product="tablet">When using 2 SIMs, this tablet will be limited to 4G. <annotation id="url">Learn more</annotation>.</string>
+    <string name="no_5g_in_dsds_text" product="tablet">When using 2 SIMs, this tablet will be limited to 4G. <annotation id="url">Learn more</annotation></string>
     <!-- Footer to show current limitation of 5G on DSDS mode for general devices. [CHAR LIMIT=NONE] -->
-    <string name="no_5g_in_dsds_text" product="device">When using 2 SIMs, this device will be limited to 4G. <annotation id="url">Learn more</annotation>.</string>
+    <string name="no_5g_in_dsds_text" product="device">When using 2 SIMs, this device will be limited to 4G. <annotation id="url">Learn more</annotation></string>
     <!-- Help URI, 5G limitation in DSDS condition. [DO NOT TRANSLATE] -->
     <string name="help_uri_5g_dsds" translatable="false"></string>
 
diff --git a/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceController.java b/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceController.java
index 4077e91..3911fb8 100644
--- a/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceController.java
+++ b/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceController.java
@@ -69,7 +69,7 @@
         if (linkInfo.isActionable()) {
             return AnnotationSpan.linkify(mContext.getText(R.string.no_5g_in_dsds_text), linkInfo);
         } else {
-            return mContext.getText(R.string.no_5g_in_dsds_text);
+            return AnnotationSpan.textWithoutLink(mContext.getText(R.string.no_5g_in_dsds_text));
         }
     }
 
diff --git a/src/com/android/settings/utils/AnnotationSpan.java b/src/com/android/settings/utils/AnnotationSpan.java
index 1b8179d..98256a0 100644
--- a/src/com/android/settings/utils/AnnotationSpan.java
+++ b/src/com/android/settings/utils/AnnotationSpan.java
@@ -27,6 +27,9 @@
 import android.util.Log;
 import android.view.View;
 
+import java.util.Arrays;
+import java.util.Comparator;
+
 /**
  * This class is used to add {@link View.OnClickListener} for the text been wrapped by
  * annotation.
@@ -76,6 +79,23 @@
     }
 
     /**
+     * get the text part without having text for link part
+     */
+    public static CharSequence textWithoutLink(CharSequence encodedText) {
+        SpannableString msg = new SpannableString(encodedText);
+        Annotation[] spans = msg.getSpans(0, msg.length(), Annotation.class);
+        if (spans == null) {
+            return encodedText;
+        }
+        Arrays.sort(spans, Comparator.comparingInt(span -> -msg.getSpanStart(span)));
+        StringBuilder msgWithoutLink = new StringBuilder(msg.toString());
+        for (Annotation span : spans) {
+            msgWithoutLink.delete(msg.getSpanStart(span), msg.getSpanEnd(span));
+        }
+        return msgWithoutLink.toString();
+    }
+
+    /**
      * Data class to store the annotation and the click action
      */
     public static class LinkInfo {
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index a884576..5c48dfd 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -631,21 +631,23 @@
     }
 
     private void refreshMacAddress() {
-        String macAddress = mWifiEntry.getMacAddress();
-        if (macAddress == null) {
+        final String macAddress = mWifiEntry.getMacAddress();
+        if (TextUtils.isEmpty(macAddress)) {
             mMacAddressPref.setVisible(false);
             return;
         }
 
         mMacAddressPref.setVisible(true);
+
+        mMacAddressPref.setTitle((mWifiEntry.getPrivacy() == WifiEntry.PRIVACY_RANDOMIZED_MAC)
+                ? R.string.wifi_advanced_randomized_mac_address_title
+                : R.string.wifi_advanced_device_mac_address_title);
+
         if (macAddress.equals(WifiInfo.DEFAULT_MAC_ADDRESS)) {
             mMacAddressPref.setSummary(R.string.device_info_not_available);
         } else {
             mMacAddressPref.setSummary(macAddress);
         }
-
-        // MAC Address Pref Title
-        refreshMacTitle();
     }
 
     private void updatePreference(Preference pref, String detailText) {
@@ -930,24 +932,6 @@
         }
     }
 
-    private void refreshMacTitle() {
-        if (!mWifiEntry.isSaved()) {
-            return;
-        }
-
-        // For saved Passpoint network, framework doesn't have the field to keep the MAC choice
-        // persistently, so Passpoint network will always use the default value so far, which is
-        // randomized MAC address, so don't need to modify title.
-        if (mWifiEntry.isSubscription()) {
-            return;
-        }
-
-        mMacAddressPref.setTitle(
-                (mWifiEntry.getPrivacy() == WifiEntry.PRIVACY_RANDOMIZED_MAC)
-                        ? R.string.wifi_advanced_randomized_mac_address_title
-                        : R.string.wifi_advanced_device_mac_address_title);
-    }
-
     /**
      * Indicates the state of the WifiEntry has changed and clients may retrieve updates through
      * the WifiEntry getter methods.