aware: Fix respondToPairingSetup with valid peerHandle am: 3748786c6b

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Wifi/+/2823350

Change-Id: I74e44be4c02fc08fdef59b9c1e56961fad1f5844
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/OWNERS b/OWNERS
index ea90cbf..4cb5c25 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,3 +1,4 @@
+# Bug component: 33618
 include /WIFI_OWNERS
 
 include platform/packages/modules/common:/MODULES_OWNERS  # see go/mainline-owners-policy
diff --git a/framework/Android.bp b/framework/Android.bp
index 48845e2..ab0ecee 100644
--- a/framework/Android.bp
+++ b/framework/Android.bp
@@ -99,7 +99,6 @@
     libs: [
         "androidx.annotation_annotation",
         "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
-        "framework-connectivity.stubs.module_lib",
         "app-compat-annotations",
     ],
     aidl: {
@@ -120,7 +119,10 @@
     name: "framework-wifi-pre-jarjar",
     defaults: ["framework-wifi-defaults"],
     sdk_version: "module_current",
-    libs: ["framework-annotations-lib"],
+    libs: [
+        "framework-annotations-lib",
+        "framework-connectivity.stubs.module_lib",
+    ],
     installable: false,
     visibility: [
         "//frameworks/opt/net/wifi/service",
@@ -138,7 +140,19 @@
         "framework-wifi-defaults",
     ],
 
-    stub_only_libs: ["framework-connectivity.stubs.module_lib"],
+    impl_only_libs: [
+        "framework-connectivity.stubs.module_lib",
+    ],
+
+    public: {
+        libs: ["framework-connectivity.stubs"]
+    },
+    system: {
+        libs: ["framework-connectivity.stubs.system"]
+    },
+    module_lib: {
+        libs: ["framework-connectivity.stubs.module_lib"]
+    },
 
     jarjar_rules: ":wifi-jarjar-rules",
 
diff --git a/framework/api/current.txt b/framework/api/current.txt
index abed5b1..524c2f4 100644
--- a/framework/api/current.txt
+++ b/framework/api/current.txt
@@ -158,7 +158,7 @@
   @Deprecated public class WifiConfiguration implements android.os.Parcelable {
     ctor @Deprecated public WifiConfiguration();
     ctor @Deprecated public WifiConfiguration(@NonNull android.net.wifi.WifiConfiguration);
-    method public int describeContents();
+    method @Deprecated public int describeContents();
     method @Deprecated public android.net.ProxyInfo getHttpProxy();
     method @Deprecated @NonNull public String getKey();
     method @Deprecated public int getMacRandomizationSetting();
@@ -169,7 +169,7 @@
     method @Deprecated public void setIpConfiguration(@Nullable android.net.IpConfiguration);
     method @Deprecated public void setMacRandomizationSetting(int);
     method @Deprecated public void setSecurityParams(int);
-    method public void writeToParcel(android.os.Parcel, int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
     field @Deprecated public String BSSID;
     field @Deprecated public String FQDN;
     field @Deprecated public static final int RANDOMIZATION_AUTO = 3; // 0x3
@@ -373,6 +373,7 @@
     method @NonNull public java.util.List<android.net.wifi.MloLink> getAffiliatedMloLinks();
     method @Nullable public android.net.MacAddress getApMldMacAddress();
     method @IntRange(from=android.net.wifi.MloLink.INVALID_MLO_LINK_ID, to=0xf) public int getApMloLinkId();
+    method public long getApplicableRedactions();
     method @NonNull public java.util.List<android.net.wifi.MloLink> getAssociatedMloLinks();
     method public String getBSSID();
     method public int getCurrentSecurityType();
@@ -426,6 +427,7 @@
     method @NonNull public android.net.wifi.WifiInfo.Builder setNetworkId(int);
     method @NonNull public android.net.wifi.WifiInfo.Builder setRssi(int);
     method @NonNull public android.net.wifi.WifiInfo.Builder setSsid(@NonNull byte[]);
+    method @FlaggedApi(android.net.wifi.WifiInfo.Flags.ADD_SUBSCRIPTION_ID) @NonNull public android.net.wifi.WifiInfo.Builder setSubscriptionId(int);
   }
 
   public class WifiManager {
diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt
index 67d3b9a..3f45a2a 100644
--- a/framework/api/system-current.txt
+++ b/framework/api/system-current.txt
@@ -4,9 +4,11 @@
   public final class CoexUnsafeChannel implements android.os.Parcelable {
     ctor public CoexUnsafeChannel(int, int);
     ctor public CoexUnsafeChannel(int, int, int);
+    method public int describeContents();
     method public int getBand();
     method public int getChannel();
     method public int getPowerCapDbm();
+    method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.CoexUnsafeChannel> CREATOR;
     field public static final int POWER_CAP_NONE = 2147483647; // 0x7fffffff
   }
@@ -28,6 +30,7 @@
   }
 
   public final class QosPolicyParams implements android.os.Parcelable {
+    method public int describeContents();
     method @Nullable public java.net.InetAddress getDestinationAddress();
     method @IntRange(from=android.net.wifi.QosPolicyParams.DESTINATION_PORT_ANY, to=65535) public int getDestinationPort();
     method @Nullable public int[] getDestinationPortRange();
@@ -40,6 +43,7 @@
     method @Nullable public java.net.InetAddress getSourceAddress();
     method @IntRange(from=android.net.DscpPolicy.SOURCE_PORT_ANY, to=65535) public int getSourcePort();
     method public int getUserPriority();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.QosPolicyParams> CREATOR;
     field public static final int DESTINATION_PORT_ANY = -1; // 0xffffffff
     field public static final int DIRECTION_DOWNLINK = 1; // 0x1
@@ -155,11 +159,15 @@
   }
 
   @Deprecated public static class RttManager.ParcelableRttParams implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
     field @Deprecated @NonNull public android.net.wifi.RttManager.RttParams[] mParams;
   }
 
   @Deprecated public static class RttManager.ParcelableRttResults implements android.os.Parcelable {
     ctor @Deprecated public RttManager.ParcelableRttResults(android.net.wifi.RttManager.RttResult[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
     field @Deprecated public android.net.wifi.RttManager.RttResult[] mResults;
   }
 
@@ -184,6 +192,8 @@
 
   @Deprecated public static class RttManager.RttCapabilities implements android.os.Parcelable {
     ctor @Deprecated public RttManager.RttCapabilities();
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
     field @Deprecated public int bwSupported;
     field @Deprecated public boolean lciSupported;
     field @Deprecated public boolean lcrSupported;
@@ -1048,29 +1058,37 @@
 
   @Deprecated public static class WifiScanner.HotlistSettings implements android.os.Parcelable {
     ctor @Deprecated public WifiScanner.HotlistSettings();
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
     field @Deprecated public int apLostThreshold;
     field @Deprecated public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos;
   }
 
   public static class WifiScanner.ParcelableScanData implements android.os.Parcelable {
     ctor public WifiScanner.ParcelableScanData(android.net.wifi.WifiScanner.ScanData[]);
+    method public int describeContents();
     method public android.net.wifi.WifiScanner.ScanData[] getResults();
+    method public void writeToParcel(android.os.Parcel, int);
     field public android.net.wifi.WifiScanner.ScanData[] mResults;
   }
 
   public static class WifiScanner.ParcelableScanResults implements android.os.Parcelable {
     ctor public WifiScanner.ParcelableScanResults(android.net.wifi.ScanResult[]);
+    method public int describeContents();
     method public android.net.wifi.ScanResult[] getResults();
+    method public void writeToParcel(android.os.Parcel, int);
     field public android.net.wifi.ScanResult[] mResults;
   }
 
   public static class WifiScanner.ScanData implements android.os.Parcelable {
     ctor public WifiScanner.ScanData(int, int, android.net.wifi.ScanResult[]);
     ctor public WifiScanner.ScanData(android.net.wifi.WifiScanner.ScanData);
+    method public int describeContents();
     method public int getFlags();
     method public int getId();
     method public android.net.wifi.ScanResult[] getResults();
     method public int getScannedBands();
+    method public void writeToParcel(android.os.Parcel, int);
   }
 
   public static interface WifiScanner.ScanListener extends android.net.wifi.WifiScanner.ActionListener {
@@ -1081,12 +1099,14 @@
 
   public static class WifiScanner.ScanSettings implements android.os.Parcelable {
     ctor public WifiScanner.ScanSettings();
+    method public int describeContents();
     method public int getRnrSetting();
     method @NonNull public java.util.List<android.net.wifi.ScanResult.InformationElement> getVendorIes();
     method public boolean is6GhzPscOnlyEnabled();
     method public void set6GhzPscOnlyEnabled(boolean);
     method public void setRnrSetting(int);
     method public void setVendorIes(@NonNull java.util.List<android.net.wifi.ScanResult.InformationElement>);
+    method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiScanner.ScanSettings> CREATOR;
     field public int band;
     field public android.net.wifi.WifiScanner.ChannelSpec[] channels;
@@ -1114,6 +1134,8 @@
 
   @Deprecated public static class WifiScanner.WifiChangeSettings implements android.os.Parcelable {
     ctor @Deprecated public WifiScanner.WifiChangeSettings();
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
     field @Deprecated public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos;
     field @Deprecated public int lostApSampleSize;
     field @Deprecated public int minApsBreachingThreshold;
diff --git a/framework/api/system-removed.txt b/framework/api/system-removed.txt
index a2d0dff..0c469bc 100644
--- a/framework/api/system-removed.txt
+++ b/framework/api/system-removed.txt
@@ -4,6 +4,8 @@
   @Deprecated public class BatchedScanResult implements android.os.Parcelable {
     ctor public BatchedScanResult();
     ctor public BatchedScanResult(android.net.wifi.BatchedScanResult);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
     field public final java.util.List<android.net.wifi.ScanResult> scanResults;
     field public boolean truncated;
   }
diff --git a/framework/java/android/net/wifi/SoftApCapability.java b/framework/java/android/net/wifi/SoftApCapability.java
index 58a760c..9a5afaa 100644
--- a/framework/java/android/net/wifi/SoftApCapability.java
+++ b/framework/java/android/net/wifi/SoftApCapability.java
@@ -380,7 +380,7 @@
     }
 
     @Override
-    public boolean equals(@NonNull Object o) {
+    public boolean equals(@Nullable Object o) {
         if (this == o) return true;
         if (!(o instanceof SoftApCapability)) return false;
         SoftApCapability capability = (SoftApCapability) o;
diff --git a/framework/java/android/net/wifi/SoftApInfo.java b/framework/java/android/net/wifi/SoftApInfo.java
index faf064a..89d4782 100644
--- a/framework/java/android/net/wifi/SoftApInfo.java
+++ b/framework/java/android/net/wifi/SoftApInfo.java
@@ -378,7 +378,7 @@
     }
 
     @Override
-    public boolean equals(@NonNull Object o) {
+    public boolean equals(@Nullable Object o) {
         if (this == o) return true;
         if (!(o instanceof SoftApInfo)) return false;
         SoftApInfo softApInfo = (SoftApInfo) o;
diff --git a/framework/java/android/net/wifi/WifiClient.java b/framework/java/android/net/wifi/WifiClient.java
index f47c237..c69b039 100644
--- a/framework/java/android/net/wifi/WifiClient.java
+++ b/framework/java/android/net/wifi/WifiClient.java
@@ -17,6 +17,7 @@
 package android.net.wifi;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.net.MacAddress;
 import android.os.Parcel;
@@ -105,7 +106,7 @@
     }
 
     @Override
-    public boolean equals(@NonNull Object o) {
+    public boolean equals(@Nullable Object o) {
         if (this == o) return true;
         if (!(o instanceof WifiClient)) return false;
         WifiClient client = (WifiClient) o;
diff --git a/framework/java/android/net/wifi/WifiInfo.java b/framework/java/android/net/wifi/WifiInfo.java
index ef38163..41279ce 100644
--- a/framework/java/android/net/wifi/WifiInfo.java
+++ b/framework/java/android/net/wifi/WifiInfo.java
@@ -19,6 +19,7 @@
 import static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID;
 
 import android.Manifest;
+import android.annotation.FlaggedApi;
 import android.annotation.IntDef;
 import android.annotation.IntRange;
 import android.annotation.NonNull;
@@ -76,6 +77,18 @@
  */
 public class WifiInfo implements TransportInfo, Parcelable {
     private static final String TAG = "WifiInfo";
+
+    /**
+     * Stopgap for trunk stable flags, as they are not yet supported by Mainline for lack
+     * of support in udc-mainline-prod.
+     * TODO : remove this class when udc-mainline-prod is abandoned and android.net.flags.Flags is
+     * available here, and replace it with a generated Flags class created with flags.aconfig.
+     * @hide
+     */
+    private static class Flags {
+        public static final String ADD_SUBSCRIPTION_ID = "com.android.net.wifi.add_subscription_id";
+    }
+
     /**
      * This is the map described in the Javadoc comment above. The positions
      * of the elements of the array must correspond to the ordinal values
@@ -718,6 +731,17 @@
         }
 
         /**
+         * Set the subscription ID.
+         * @see WifiInfo#getSubscriptionId()
+         */
+        @FlaggedApi(Flags.ADD_SUBSCRIPTION_ID)
+        @NonNull
+        public Builder setSubscriptionId(int subId) {
+            mWifiInfo.setSubscriptionId(subId);
+            return this;
+        }
+
+        /**
          * Set the current security type
          * @see WifiInfo#getCurrentSecurityType()
          */
diff --git a/framework/tests/Android.bp b/framework/tests/Android.bp
index f3ed87a..640aa14 100644
--- a/framework/tests/Android.bp
+++ b/framework/tests/Android.bp
@@ -43,7 +43,7 @@
         "wifi-modules-utils",
         "net-tests-utils",
         "net-utils-framework-common",
-        "truth-prebuilt",
+        "truth",
     ],
 
     libs: [
diff --git a/service/Android.bp b/service/Android.bp
index ea2d80c..7bb7a3c 100644
--- a/service/Android.bp
+++ b/service/Android.bp
@@ -23,11 +23,6 @@
     errorprone: {
         javacflags: ["-Xep:CheckReturnValue:ERROR"],
     },
-    product_variables: {
-        pdk: {
-            enabled: false,
-        },
-    },
 }
 
 filegroup {
@@ -114,6 +109,7 @@
         "libprotobuf-java-lite",
         "libnanohttpd",
         "modules-utils-backgroundthread",
+        "modules-utils-fastxmlserializer",
         "modules-utils-locallog",
         "netd-client",
         "networkstack-client",
diff --git a/service/ServiceWifiResources/res/values-bs/strings.xml b/service/ServiceWifiResources/res/values-bs/strings.xml
index d07b698..73414bd 100644
--- a/service/ServiceWifiResources/res/values-bs/strings.xml
+++ b/service/ServiceWifiResources/res/values-bs/strings.xml
@@ -147,7 +147,7 @@
     <string name="wifi_ca_cert_failed_to_install_ca_cert" msgid="4864192219789736195">"Instalacija certifikata nije uspjela."</string>
     <string name="wifi_tofu_invalid_cert_chain_title" msgid="332710627417595752">"Nije se moguće povezati s mrežom <xliff:g id="VALUE">%1$s</xliff:g>"</string>
     <string name="wifi_tofu_invalid_cert_chain_message" msgid="7047987920029432392">"Lanac potvrda servera je nevažeći."</string>
-    <string name="wifi_tofu_invalid_cert_chain_ok_text" msgid="9098567577510279854">"UREDU"</string>
+    <string name="wifi_tofu_invalid_cert_chain_ok_text" msgid="9098567577510279854">"Uredu"</string>
     <string name="wifi_ca_cert_dialog_preT_title" msgid="6916320484037009061">"Nije moguće potvrditi ovu mrežu"</string>
     <string name="wifi_ca_cert_dialog_preT_continue_text" msgid="9118713368838029797">"Ostanite povezani"</string>
     <string name="wifi_ca_cert_dialog_preT_abort_text" msgid="1331309662999405224">"Prekini vezu odmah"</string>
diff --git a/service/ServiceWifiResources/res/values-da/strings.xml b/service/ServiceWifiResources/res/values-da/strings.xml
index d67759f..5d08fa5 100644
--- a/service/ServiceWifiResources/res/values-da/strings.xml
+++ b/service/ServiceWifiResources/res/values-da/strings.xml
@@ -100,11 +100,11 @@
   </string-array>
     <string name="wifi_eap_error_message_code_32766" msgid="2335996367705677670">"<xliff:g id="SSID">%1$s</xliff:g>: EAP-godkendelsesfejl 32766"</string>
   <string-array name="wifi_eap_error_message_code_32766_carrier_overrides">
-    <item msgid="5876210184761573755">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>: Verizon Wi-Fi Access er ikke tilgængeligt i dit område. Prøv igen senere eller fra en anden placering (fejl = 32766)."</item>
+    <item msgid="5876210184761573755">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>: Verizon Wi-Fi Access er ikke tilgængeligt i dit område. Prøv igen senere eller fra en anden lokation (fejl = 32766)."</item>
   </string-array>
     <string name="wifi_eap_error_message_code_32767" msgid="7094289719914089006">"<xliff:g id="SSID">%1$s</xliff:g>: EAP-godkendelsesfejl 32767"</string>
   <string-array name="wifi_eap_error_message_code_32767_carrier_overrides">
-    <item msgid="3756793972687282940">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>: Du kan ikke oprette forbindelse til Verizon Wi-Fi Access. Prøv igen senere eller fra et andet sted. (Fejl = 32767)"</item>
+    <item msgid="3756793972687282940">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>: Du kan ikke oprette forbindelse til Verizon Wi-Fi Access. Prøv igen senere eller fra en anden lokation. (Fejl = 32767)"</item>
   </string-array>
     <string name="wifi_eap_error_message_code_16384" msgid="575394783233092922">"<xliff:g id="SSID">%1$s</xliff:g>: EAP-godkendelsesfejl 16384"</string>
   <string-array name="wifi_eap_error_message_code_16384_carrier_overrides">
diff --git a/service/ServiceWifiResources/res/values-eu/strings.xml b/service/ServiceWifiResources/res/values-eu/strings.xml
index c10c96f..c1463a4 100644
--- a/service/ServiceWifiResources/res/values-eu/strings.xml
+++ b/service/ServiceWifiResources/res/values-eu/strings.xml
@@ -33,7 +33,7 @@
     <string name="wifi_suggestion_action_allow_app" msgid="7757859972144671588">"Eman baimena"</string>
     <string name="wifi_suggestion_action_disallow_app" msgid="4565857699629860726">"Ez, eskerrik asko"</string>
     <string name="wifi_suggestion_imsi_privacy_title" msgid="8969261812845304079">"<xliff:g id="CARRIERNAME">%s</xliff:g> operadorearen wifi-sarera konektatu nahi duzu?"</string>
-    <string name="wifi_suggestion_imsi_privacy_content" msgid="4266931269306079184">"Sare hauek SIM ID bat jasotzen dute, gailuaren kokapenaren jarraipena egin ahal izateko"</string>
+    <string name="wifi_suggestion_imsi_privacy_content" msgid="4266931269306079184">"Sare hauek SIM identifikatzaile bat jasotzen dute, gailuaren kokapenaren jarraipena egin ahal izateko"</string>
     <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="3888538126440442636">"Konektatu"</string>
     <string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="3225397664735676024">"Ez konektatu"</string>
     <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="4407415300707014525">"Konexioa berretsi nahi duzu?"</string>
diff --git a/service/ServiceWifiResources/res/values-ne/strings.xml b/service/ServiceWifiResources/res/values-ne/strings.xml
index 320af23..6d4f3b6 100644
--- a/service/ServiceWifiResources/res/values-ne/strings.xml
+++ b/service/ServiceWifiResources/res/values-ne/strings.xml
@@ -29,7 +29,7 @@
     <string name="notification_channel_network_available" msgid="8454366142428864948">"नेटवर्क उपलब्ध छ"</string>
     <string name="notification_channel_apm_alerts" msgid="6775293475896473489">"APM सम्बन्धी अलर्टहरू"</string>
     <string name="wifi_suggestion_title" msgid="2564179935989099139">"सिफारिस गरिएका Wi‑Fi नेटवर्कहरूलाई अनुमति दिनुहोस्?"</string>
-    <string name="wifi_suggestion_content" msgid="6985149577828091835">"<xliff:g id="NAME">%s</xliff:g> ले सिफारिस गरेका नेटवर्कहरू। यन्त्र स्वतः जडान हुन सक्छ।"</string>
+    <string name="wifi_suggestion_content" msgid="6985149577828091835">"<xliff:g id="NAME">%s</xliff:g> ले सिफारिस गरेका नेटवर्कहरू। यन्त्र अटो कनेक्ट हुन सक्छ।"</string>
     <string name="wifi_suggestion_action_allow_app" msgid="7757859972144671588">"अनुमति दिनुहोस्"</string>
     <string name="wifi_suggestion_action_disallow_app" msgid="4565857699629860726">"पर्दैन, धन्यवाद"</string>
     <string name="wifi_suggestion_imsi_privacy_title" msgid="8969261812845304079">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi मा कनेक्ट गर्ने हो?"</string>
diff --git a/service/ServiceWifiResources/res/values-pt-rPT/strings.xml b/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
index 5f25dc2..3804873 100644
--- a/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
@@ -32,11 +32,11 @@
     <string name="wifi_suggestion_content" msgid="6985149577828091835">"Redes sugeridas por <xliff:g id="NAME">%s</xliff:g>. O dispositivo pode estabelecer ligação automaticamente."</string>
     <string name="wifi_suggestion_action_allow_app" msgid="7757859972144671588">"Permitir"</string>
     <string name="wifi_suggestion_action_disallow_app" msgid="4565857699629860726">"Não, obrigado"</string>
-    <string name="wifi_suggestion_imsi_privacy_title" msgid="8969261812845304079">"Pretende estabelecer ligação à rede Wi-Fi do operador <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+    <string name="wifi_suggestion_imsi_privacy_title" msgid="8969261812845304079">"Quer estabelecer ligação à rede Wi-Fi do operador <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
     <string name="wifi_suggestion_imsi_privacy_content" msgid="4266931269306079184">"Estas redes recebem um ID do SIM que pode ser utilizado para monitorizar a localização dos dispositivos."</string>
     <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="3888538126440442636">"Ligar"</string>
     <string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="3225397664735676024">"Não ligar"</string>
-    <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="4407415300707014525">"Pretende confirmar a ligação?"</string>
+    <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="4407415300707014525">"Quer confirmar a ligação?"</string>
     <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="9211241189147807136">"Caso proceda à ligação, as redes Wi-Fi do operador <xliff:g id="CARRIERNAME">%s</xliff:g> podem partilhar ou aceder a um ID exclusivo associado ao seu SIM. Esta ação pode permitir que a localização do seu dispositivo seja monitorizada."</string>
     <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_confirmation" msgid="2168947026413431603">"Ligar"</string>
     <string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_confirmation" msgid="5156881939985876066">"Não ligar"</string>
@@ -48,7 +48,7 @@
     <string name="wifi_watchdog_network_disabled" msgid="5769226742956006362">"Não foi possível ligar a Wi-Fi"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="1725243835135539125">" tem uma ligação à internet fraca."</string>
     <string name="wifi_connect_alert_title" msgid="2368200646665663612">"Permitir ligação?"</string>
-    <string name="wifi_connect_alert_message" msgid="7226456300982080746">"A app %1$s pretende estabelecer ligação à rede Wi-Fi %2$s"</string>
+    <string name="wifi_connect_alert_message" msgid="7226456300982080746">"A app %1$s quer estabelecer ligação à rede Wi-Fi %2$s"</string>
     <string name="wifi_connect_default_application" msgid="8917703737222707062">"Uma app"</string>
     <string name="accept" msgid="8346431649376483879">"Aceitar"</string>
     <string name="decline" msgid="4172251727603762084">"Recusar"</string>
@@ -66,7 +66,7 @@
     <string name="dlg_ok" msgid="254496739491689405">"OK"</string>
     <string name="wifi_cannot_connect_with_randomized_mac_title" msgid="2344570489693915253">"Não é possível ligar a <xliff:g id="SSID">%1$s</xliff:g>."</string>
     <string name="wifi_cannot_connect_with_randomized_mac_message" msgid="4834133226521813352">"Toque para alterar as definições de privacidade e tente novamente."</string>
-    <string name="wifi_disable_mac_randomization_dialog_title" msgid="2054540994993681606">"Pretende alterar a definição de privacidade?"</string>
+    <string name="wifi_disable_mac_randomization_dialog_title" msgid="2054540994993681606">"Quer alterar a definição de privacidade?"</string>
     <string name="wifi_disable_mac_randomization_dialog_message" msgid="8874064864332248988">"Para associar, o <xliff:g id="SSID">%1$s</xliff:g> tem de utilizar o endereço MAC do seu dispositivo, um identificador único. Atualmente, a sua definição de privacidade para esta rede utiliza um identificador aleatorizado. \n\nEsta alteração pode permitir que a localização do seu dispositivo seja monitorizada por dispositivos próximos."</string>
     <string name="wifi_disable_mac_randomization_dialog_confirm_text" msgid="6954419863076751626">"Alterar definição"</string>
     <string name="wifi_disable_mac_randomization_dialog_success" msgid="5849155828154391387">"Definição atualizada. Experimente estabelecer ligação novamente."</string>
diff --git a/service/ServiceWifiResources/res/values-zh-rCN/strings.xml b/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
index bab6f15..737a627 100644
--- a/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
@@ -55,7 +55,7 @@
     <string name="ok" msgid="847575529546290102">"确定"</string>
     <string name="wifi_p2p_invitation_sent_title" msgid="6552639940428040869">"已发出邀请"</string>
     <string name="wifi_p2p_invitation_to_connect_title" msgid="8917157937652519251">"连接邀请"</string>
-    <string name="wifi_p2p_invitation_seconds_remaining" msgid="4214101104506918344">"{0,plural, =1{# 秒后接受。}other{# 秒后接受。}}"</string>
+    <string name="wifi_p2p_invitation_seconds_remaining" msgid="4214101104506918344">"{0,plural, =1{# 秒内接受。}other{# 秒内接受。}}"</string>
     <string name="wifi_p2p_from_message" msgid="5921308150192756898">"发件人:"</string>
     <string name="wifi_p2p_to_message" msgid="3809923305696994787">"收件人:"</string>
     <string name="wifi_p2p_enter_pin_message" msgid="5200220251738047620">"输入所需的PIN码:"</string>
@@ -84,7 +84,7 @@
   </string-array>
     <string name="wifi_eap_error_message_code_32762" msgid="2381670648753465737">"<xliff:g id="SSID">%1$s</xliff:g>:EAP 身份验证错误 32762"</string>
   <string-array name="wifi_eap_error_message_code_32762_carrier_overrides">
-    <item msgid="2911560823350042826">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>:您的 Verizon Wi-Fi Access 帐号出现了问题。请拨打 800-922-0204 与我们联系。(错误 32762)"</item>
+    <item msgid="2911560823350042826">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>:您的 Verizon Wi-Fi Access 账号出现了问题。请拨打 800-922-0204 与我们联系。(错误 32762)"</item>
   </string-array>
     <string name="wifi_eap_error_message_code_32763" msgid="4467733260757049969">"<xliff:g id="SSID">%1$s</xliff:g>:EAP 身份验证错误 32763"</string>
   <string-array name="wifi_eap_error_message_code_32763_carrier_overrides">
@@ -96,7 +96,7 @@
   </string-array>
     <string name="wifi_eap_error_message_code_32765" msgid="2167528358066037980">"<xliff:g id="SSID">%1$s</xliff:g>:EAP 身份验证错误 32765"</string>
   <string-array name="wifi_eap_error_message_code_32765_carrier_overrides">
-    <item msgid="7454136618636618962">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>:您的 Verizon Wi-Fi Access 帐号出现了问题。请拨打 800-922-0204 与我们联系。(错误 32765)"</item>
+    <item msgid="7454136618636618962">"<xliff:g id="CARRIER_ID_PREFIX">:::1839:::</xliff:g><xliff:g id="SSID">%1$s</xliff:g>:您的 Verizon Wi-Fi Access 账号出现了问题。请拨打 800-922-0204 与我们联系。(错误 32765)"</item>
   </string-array>
     <string name="wifi_eap_error_message_code_32766" msgid="2335996367705677670">"<xliff:g id="SSID">%1$s</xliff:g>:EAP 身份验证错误 32766"</string>
   <string-array name="wifi_eap_error_message_code_32766_carrier_overrides">
diff --git a/service/coex-table-parser/Android.bp b/service/coex-table-parser/Android.bp
index 4b9d24e..6a696f3 100644
--- a/service/coex-table-parser/Android.bp
+++ b/service/coex-table-parser/Android.bp
@@ -21,4 +21,5 @@
     name: "coex-table-parser",
     srcs: ["coex_table.xsd"],
     package_name: "com.android.server.wifi.coex",
+    root_elements: ["table"],
 }
diff --git a/service/coex-table-parser/api/current.txt b/service/coex-table-parser/api/current.txt
index 0b0d787..1aa4418 100644
--- a/service/coex-table-parser/api/current.txt
+++ b/service/coex-table-parser/api/current.txt
@@ -112,13 +112,6 @@
 
   public class XmlParser {
     ctor public XmlParser();
-    method public static com.android.server.wifi.coex.DefaultChannels readDefaultChannels(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static com.android.server.wifi.coex.Entry readEntry(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static com.android.server.wifi.coex.NeighborThresholds readNeighborThresholds(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static com.android.server.wifi.coex.Override readOverride(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static com.android.server.wifi.coex.Override2g readOverride2g(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static com.android.server.wifi.coex.Override5g readOverride5g(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static com.android.server.wifi.coex.Params readParams(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static com.android.server.wifi.coex.Table readTable(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
diff --git a/service/java/com/android/server/wifi/HostapdHalAidlImp.java b/service/java/com/android/server/wifi/HostapdHalAidlImp.java
index 76f48b5..f8c0791 100644
--- a/service/java/com/android/server/wifi/HostapdHalAidlImp.java
+++ b/service/java/com/android/server/wifi/HostapdHalAidlImp.java
@@ -91,6 +91,7 @@
     private Set<String> mActiveInstances = new HashSet<>();
     private HostapdDeathEventHandler mDeathEventHandler;
     private boolean mServiceDeclared = false;
+    private int mServiceVersion;
     private CountDownLatch mWaitForDeathLatch;
 
     /**
@@ -462,6 +463,14 @@
     }
 
     /**
+     * Check that the service is running at least the expected version. Use to avoid the case where
+     * the framework is using a newer interface version than the service.
+     */
+    private boolean isServiceVersionAtLeast(int expectedVersion) {
+        return expectedVersion <= mServiceVersion;
+    }
+
+    /**
      * Wrapper functions created to be mockable in unit tests
      */
     @VisibleForTesting
@@ -501,7 +510,8 @@
             Log.i(TAG, "Local Version: " + IHostapd.VERSION);
 
             try {
-                Log.i(TAG, "Remote Version: " + mIHostapd.getInterfaceVersion());
+                mServiceVersion = mIHostapd.getInterfaceVersion();
+                Log.i(TAG, "Remote Version: " + mServiceVersion);
                 IBinder serviceBinder = getServiceBinderMockable();
                 if (serviceBinder == null) return false;
                 mWaitForDeathLatch = null;
diff --git a/service/java/com/android/server/wifi/WifiConfigurationUtil.java b/service/java/com/android/server/wifi/WifiConfigurationUtil.java
index 98fb769..d5de419 100644
--- a/service/java/com/android/server/wifi/WifiConfigurationUtil.java
+++ b/service/java/com/android/server/wifi/WifiConfigurationUtil.java
@@ -475,7 +475,8 @@
         return true;
     }
 
-    private static boolean validatePassword(String password, boolean isAdd, boolean isSae) {
+    private static boolean validatePassword(String password, boolean isAdd, boolean isSae,
+            boolean isWapi) {
         if (isAdd) {
             if (password == null) {
                 Log.e(TAG, "validatePassword: null string");
@@ -517,7 +518,14 @@
             }
         } else {
             // HEX PSK string
-            if (password.length() != PSK_SAE_HEX_LEN) {
+            if (isWapi) {
+                // Protect system against malicious actors injecting arbitrarily large passwords.
+                if (password.length() > 100) {
+                    Log.e(TAG, "validatePassword failed: WAPI hex string too long: "
+                            + password.length());
+                    return false;
+                }
+            } else if (password.length() != PSK_SAE_HEX_LEN) {
                 Log.e(TAG, "validatePassword failed: hex string size mismatch: "
                         + password.length());
                 return false;
@@ -725,15 +733,15 @@
             return false;
         }
         if (config.isSecurityType(WifiConfiguration.SECURITY_TYPE_PSK)
-                && !validatePassword(config.preSharedKey, isAdd, false)) {
+                && !validatePassword(config.preSharedKey, isAdd, false, false)) {
             return false;
         }
         if (config.isSecurityType(WifiConfiguration.SECURITY_TYPE_SAE)
-                && !validatePassword(config.preSharedKey, isAdd, true)) {
+                && !validatePassword(config.preSharedKey, isAdd, true, false)) {
             return false;
         }
         if (config.isSecurityType(WifiConfiguration.SECURITY_TYPE_WAPI_PSK)
-                && !validatePassword(config.preSharedKey, isAdd, false)) {
+                && !validatePassword(config.preSharedKey, isAdd, false, true)) {
             return false;
         }
         if (config.isSecurityType(WifiConfiguration.SECURITY_TYPE_DPP)
@@ -897,11 +905,11 @@
             return false;
         }
         if (config.isSecurityType(WifiConfiguration.SECURITY_TYPE_PSK)
-                && !validatePassword(config.preSharedKey, true, false)) {
+                && !validatePassword(config.preSharedKey, true, false, false)) {
             return false;
         }
         if (config.isSecurityType(WifiConfiguration.SECURITY_TYPE_SAE)
-                && !validatePassword(config.preSharedKey, true, true)) {
+                && !validatePassword(config.preSharedKey, true, true, false)) {
             return false;
         }
         // TBD: Validate some enterprise params as well in the future here.
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 83d737d..227cabc 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -7837,4 +7837,28 @@
             }
         });
     }
+
+    /**
+     * Set the mock wifi service for testing
+     */
+    public void setMockWifiService(String serviceName) {
+        int uid = Binder.getCallingUid();
+        if (!mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) {
+            throw new SecurityException(TAG + " Uid " + uid
+                    + " Missing NETWORK_SETTINGS permission");
+        }
+        mWifiNative.setMockWifiService(serviceName);
+    }
+
+    /**
+     * Set the mock wifi methods for testing
+     */
+    public boolean setMockWifiMethods(String methods) {
+        int uid = Binder.getCallingUid();
+        if (!mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) {
+            throw new SecurityException(TAG + " Uid " + uid
+                    + " Missing NETWORK_SETTINGS permission");
+        }
+        return mWifiNative.setMockWifiMethods(methods);
+    }
 }
diff --git a/service/java/com/android/server/wifi/WifiShellCommand.java b/service/java/com/android/server/wifi/WifiShellCommand.java
index ad50e0a..9093f8e 100644
--- a/service/java/com/android/server/wifi/WifiShellCommand.java
+++ b/service/java/com/android/server/wifi/WifiShellCommand.java
@@ -172,6 +172,9 @@
             "get-ipreach-disconnect",
             "take-bugreport",
             "get-allowed-channel",
+            "set-mock-wifimodem-service",
+            "get-mock-wifimodem-service",
+            "set-mock-wifimodem-methods",
     };
 
     private static final Map<String, Pair<NetworkRequest, ConnectivityManager.NetworkCallback>>
@@ -1818,7 +1821,7 @@
                                 return -1;
                         }
                     }
-                    mWifiNative.setMockWifiService(serviceName);
+                    mWifiService.setMockWifiService(serviceName);
                     // The result will be checked, must print result "true"
                     pw.print("true");
                     return 0;
@@ -1827,7 +1830,7 @@
                     return 0;
                 case "set-mock-wifimodem-methods":
                     String methods = getNextArgRequired();
-                    if (mWifiNative.setMockWifiMethods(methods)) {
+                    if (mWifiService.setMockWifiMethods(methods)) {
                         pw.print("true");
                     } else {
                         pw.print("fail to set mock method: " + methods);
diff --git a/service/tests/mts/Android.bp b/service/tests/mts/Android.bp
index e016740..f7bd25b 100644
--- a/service/tests/mts/Android.bp
+++ b/service/tests/mts/Android.bp
@@ -32,7 +32,7 @@
         "android.test.base.stubs",
     ],
 
-    srcs: [ "src/**/*.java" ],
+    srcs: ["src/**/*.java"],
 
     static_libs: [
         // for ShellIdentityUtils, builds against test_current
@@ -41,7 +41,7 @@
         "ctstestserver",
         "junit",
         "junit-params",
-        "truth-prebuilt",
+        "truth",
         // for Wifi protos, builds against system_current
         "wifi-nano-protos",
         // for AndroidJUnit4
diff --git a/service/tests/wifitests/Android.bp b/service/tests/wifitests/Android.bp
index 2ed3885..f3b9483 100644
--- a/service/tests/wifitests/Android.bp
+++ b/service/tests/wifitests/Android.bp
@@ -21,7 +21,7 @@
 android_test {
     name: "FrameworksWifiTests",
 
-    srcs: [ "**/*.java" ],
+    srcs: ["**/*.java"],
 
     dxflags: ["--multi-dex"],
 
@@ -33,7 +33,7 @@
         "hamcrest-library",
         "mockito-target-extended-minus-junit4",
         "frameworks-base-testutils",
-        "truth-prebuilt",
+        "truth",
 
         // Statically link wifi-service-pre-jarjar since we want to test the working copy of
         // service-wifi, not the on-device copy.
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
index b019a7b..0c62816 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
@@ -471,7 +471,8 @@
         assertTrue(WifiConfigurationUtil.validate(config, SUPPORTED_FEATURES_ALL,
                 WifiConfigurationUtil.VALIDATE_FOR_ADD));
 
-        config.preSharedKey = "abcd123456788990013453445345465465476546";
+        config.preSharedKey = "01234567890123456789012345678901234567890123456789012345678901234567"
+                + "890123456789012345678901234567890";
         assertFalse(WifiConfigurationUtil.validate(config, SUPPORTED_FEATURES_ALL,
                 WifiConfigurationUtil.VALIDATE_FOR_ADD));
         config.preSharedKey = "";