Merge "HDMI: Update OWNERS" into main
diff --git a/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING b/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING
index e649485..e82df12 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING
+++ b/apex/jobscheduler/service/java/com/android/server/job/TEST_MAPPING
@@ -41,10 +41,10 @@
             ]
         },
         {
-            "name": "CtsHostsideNetworkTests",
+            "name": "CtsHostsideNetworkPolicyTests",
             "options": [
-                {"include-filter": "com.android.cts.net.HostsideRestrictBackgroundNetworkTests#testMeteredNetworkAccess_expeditedJob"},
-                {"include-filter": "com.android.cts.net.HostsideRestrictBackgroundNetworkTests#testNonMeteredNetworkAccess_expeditedJob"}
+                {"include-filter": "com.android.cts.netpolicy.HostsideRestrictBackgroundNetworkTests#testMeteredNetworkAccess_expeditedJob"},
+                {"include-filter": "com.android.cts.netpolicy.HostsideRestrictBackgroundNetworkTests#testNonMeteredNetworkAccess_expeditedJob"}
             ]
         },
         {
diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index b9de93c..7653bdb 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -56,11 +56,18 @@
     public static class BytesResult {
         public final String value;
         public final String units;
+        /**
+         * Content description of the {@link #units}.
+         * See {@link View#setContentDescription(CharSequence)}
+         */
+        public final String unitsContentDescription;
         public final long roundedBytes;
 
-        public BytesResult(String value, String units, long roundedBytes) {
+        public BytesResult(String value, String units, String unitsContentDescription,
+                long roundedBytes) {
             this.value = value;
             this.units = units;
+            this.unitsContentDescription = unitsContentDescription;
             this.roundedBytes = roundedBytes;
         }
     }
@@ -271,20 +278,20 @@
         final Locale locale = res.getConfiguration().getLocales().get(0);
         final NumberFormat numberFormatter = getNumberFormatter(locale, rounded.fractionDigits);
         final String formattedNumber = numberFormatter.format(rounded.value);
-        final String units;
+        // Since ICU does not give us access to the pattern, we need to extract the unit string
+        // from ICU, which we do by taking out the formatted number out of the formatted string
+        // and trimming the result of spaces and controls.
+        final String formattedMeasure = formatMeasureShort(
+                locale, numberFormatter, rounded.value, rounded.units);
+        final String numberRemoved = deleteFirstFromString(formattedMeasure, formattedNumber);
+        String units = SPACES_AND_CONTROLS.trim(numberRemoved).toString();
+        String unitsContentDescription = units;
         if (rounded.units == MeasureUnit.BYTE) {
             // ICU spells out "byte" instead of "B".
             units = getByteSuffixOverride(res);
-        } else {
-            // Since ICU does not give us access to the pattern, we need to extract the unit string
-            // from ICU, which we do by taking out the formatted number out of the formatted string
-            // and trimming the result of spaces and controls.
-            final String formattedMeasure = formatMeasureShort(
-                    locale, numberFormatter, rounded.value, rounded.units);
-            final String numberRemoved = deleteFirstFromString(formattedMeasure, formattedNumber);
-            units = SPACES_AND_CONTROLS.trim(numberRemoved).toString();
         }
-        return new BytesResult(formattedNumber, units, rounded.roundedBytes);
+        return new BytesResult(formattedNumber, units, unitsContentDescription,
+                rounded.roundedBytes);
     }
 
     /**
diff --git a/services/core/java/com/android/server/net/TEST_MAPPING b/services/core/java/com/android/server/net/TEST_MAPPING
index 4fc1a17..ad6b0ca 100644
--- a/services/core/java/com/android/server/net/TEST_MAPPING
+++ b/services/core/java/com/android/server/net/TEST_MAPPING
@@ -1,7 +1,7 @@
 {
   "presubmit-large": [
     {
-      "name": "CtsHostsideNetworkTests",
+      "name": "CtsHostsideNetworkPolicyTests",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/services/core/jni/OWNERS b/services/core/jni/OWNERS
index 586f35b..8de43c4 100644
--- a/services/core/jni/OWNERS
+++ b/services/core/jni/OWNERS
@@ -15,6 +15,7 @@
 per-file com_android_server_SystemClock* = file:/services/core/java/com/android/server/timedetector/OWNERS
 per-file com_android_server_Usb* = file:/services/usb/OWNERS
 per-file com_android_server_Vibrator* = file:/services/core/java/com/android/server/vibrator/OWNERS
+per-file com_android_server_adb_* = file:/services/core/java/com/android/server/adb/OWNERS
 per-file com_android_server_hdmi_* = file:/core/java/android/hardware/hdmi/OWNERS
 per-file com_android_server_lights_* = file:/services/core/java/com/android/server/lights/OWNERS
 per-file com_android_server_location_* = file:/location/java/android/location/OWNERS
diff --git a/services/core/jni/com_android_server_adb_AdbDebuggingManager.cpp b/services/core/jni/com_android_server_adb_AdbDebuggingManager.cpp
index 9c834aa..c7b6852 100644
--- a/services/core/jni/com_android_server_adb_AdbDebuggingManager.cpp
+++ b/services/core/jni/com_android_server_adb_AdbDebuggingManager.cpp
@@ -18,58 +18,22 @@
 
 #define LOG_NDEBUG 0
 
-#include <algorithm>
 #include <condition_variable>
 #include <mutex>
 #include <optional>
-#include <random>
-#include <string>
-#include <vector>
 
 #include <adb/pairing/pairing_server.h>
 #include <android-base/properties.h>
-#include <utils/Log.h>
-
+#include <jni.h>
 #include <nativehelper/JNIHelp.h>
-#include "jni.h"
+#include <nativehelper/utils.h>
+#include <utils/Log.h>
 
 namespace android {
 
 // ----------------------------------------------------------------------------
 namespace {
 
-template <class T, class N>
-class JSmartWrapper {
-public:
-    JSmartWrapper(JNIEnv* env, T* jData) : mEnv(env), mJData(jData) {}
-
-    virtual ~JSmartWrapper() = default;
-
-    const N* data() const { return mRawData; }
-
-    jsize size() const { return mSize; }
-
-protected:
-    N* mRawData = nullptr;
-    JNIEnv* mEnv = nullptr;
-    T* mJData = nullptr;
-    jsize mSize = 0;
-}; // JSmartWrapper
-
-class JStringUTFWrapper : public JSmartWrapper<jstring, const char> {
-public:
-    explicit JStringUTFWrapper(JNIEnv* env, jstring* str) : JSmartWrapper(env, str) {
-        mRawData = env->GetStringUTFChars(*str, NULL);
-        mSize = env->GetStringUTFLength(*str);
-    }
-
-    virtual ~JStringUTFWrapper() {
-        if (data()) {
-            mEnv->ReleaseStringUTFChars(*mJData, mRawData);
-        }
-    }
-}; // JStringUTFWrapper
-
 struct ServerDeleter {
     void operator()(PairingServerCtx* p) { pairing_server_destroy(p); }
 };
@@ -97,19 +61,19 @@
 std::unique_ptr<PairingResultWaiter> sWaiter;
 } // namespace
 
-static jint native_pairing_start(JNIEnv* env, jobject thiz, jstring guid, jstring password) {
+static jint native_pairing_start(JNIEnv* env, jobject thiz, jstring javaGuid, jstring javaPassword) {
     // Server-side only sends its GUID on success.
-    PeerInfo system_info = {};
-    system_info.type = ADB_DEVICE_GUID;
-    JStringUTFWrapper guidWrapper(env, &guid);
-    memcpy(system_info.data, guidWrapper.data(), guidWrapper.size());
+    PeerInfo system_info = { .type = ADB_DEVICE_GUID };
 
-    JStringUTFWrapper passwordWrapper(env, &password);
+    ScopedUtfChars guid = GET_UTF_OR_RETURN(env, javaGuid);
+    memcpy(system_info.data, guid.c_str(), guid.size());
+
+    ScopedUtfChars password = GET_UTF_OR_RETURN(env, javaPassword);
 
     // Create the pairing server
     sServer = PairingServerPtr(
-            pairing_server_new_no_cert(reinterpret_cast<const uint8_t*>(passwordWrapper.data()),
-                                       passwordWrapper.size(), &system_info, 0));
+            pairing_server_new_no_cert(reinterpret_cast<const uint8_t*>(password.c_str()),
+                                       password.size(), &system_info, 0));
 
     sWaiter.reset(new PairingResultWaiter);
     uint16_t port = pairing_server_start(sServer.get(), sWaiter->ResultCallback, sWaiter.get());
@@ -137,11 +101,16 @@
         return JNI_FALSE;
     }
 
-    std::string peer_public_key = reinterpret_cast<char*>(sWaiter->peer_info_.data);
-    // Write to PairingThread's member variables
+    // Create a Java string for the public key.
+    char* peer_public_key = reinterpret_cast<char*>(sWaiter->peer_info_.data);
+    jstring jpublickey = env->NewStringUTF(peer_public_key);
+    if (jpublickey == nullptr) {
+      return JNI_FALSE;
+    }
+
+    // Write to PairingThread.mPublicKey.
     jclass clazz = env->GetObjectClass(thiz);
     jfieldID mPublicKey = env->GetFieldID(clazz, "mPublicKey", "Ljava/lang/String;");
-    jstring jpublickey = env->NewStringUTF(peer_public_key.c_str());
     env->SetObjectField(thiz, mPublicKey, jpublickey);
     return JNI_TRUE;
 }
@@ -157,12 +126,9 @@
 };
 
 int register_android_server_AdbDebuggingManager(JNIEnv* env) {
-    int res = jniRegisterNativeMethods(env,
-                                       "com/android/server/adb/AdbDebuggingManager$PairingThread",
-                                       gPairingThreadMethods, NELEM(gPairingThreadMethods));
-    (void)res; // Faked use when LOG_NDEBUG.
-    LOG_FATAL_IF(res < 0, "Unable to register native methods.");
-    return 0;
+    return jniRegisterNativeMethods(env,
+                                    "com/android/server/adb/AdbDebuggingManager$PairingThread",
+                                    gPairingThreadMethods, NELEM(gPairingThreadMethods));
 }
 
 } /* namespace android */
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 293f379..dd49260 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -5672,18 +5672,15 @@
 
     private boolean resetPasswordInternal(String password, long tokenHandle, byte[] token,
             int flags, CallerIdentity caller) {
-        final boolean isPin = PasswordMetrics.isNumericOnly(password);
-        try (LockscreenCredential newCredential =
-                isPin ? LockscreenCredential.createPin(password) :
-                       LockscreenCredential.createPasswordOrNone(password)) {
-            return resetPasswordInternal(newCredential, tokenHandle, token, flags, caller);
-        }
-    }
-
-    private boolean resetPasswordInternal(LockscreenCredential newCredential,
-            long tokenHandle, byte[] token, int flags, CallerIdentity caller) {
         final int callingUid = caller.getUid();
         final int userHandle = UserHandle.getUserId(callingUid);
+        final boolean isPin = PasswordMetrics.isNumericOnly(password);
+        final LockscreenCredential newCredential;
+        if (isPin) {
+            newCredential = LockscreenCredential.createPin(password);
+        } else {
+            newCredential = LockscreenCredential.createPasswordOrNone(password);
+        }
         synchronized (getLockObject()) {
             final PasswordMetrics minMetrics = getPasswordMinimumMetricsUnchecked(userHandle);
             final int complexity = getAggregatedPasswordComplexityLocked(userHandle);
diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index c333eb7..c6317e4 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -264,7 +264,7 @@
 test_module_config {
     name: "FrameworksServicesTests_contentprotection",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.contentprotection"],
     exclude_annotations: FLAKY_AND_IGNORED,
 }
@@ -272,7 +272,7 @@
 test_module_config {
     name: "FrameworksServicesTests_om",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.om."],
     exclude_annotations: FLAKY_AND_IGNORED,
 }
@@ -281,7 +281,7 @@
 test_module_config {
     name: "FrameworksServicesTests_contexthub_presubmit",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.location.contexthub."],
     // TODO(ron): are these right, does it run anything?
     include_annotations: ["android.platform.test.annotations.Presubmit"],
@@ -291,7 +291,7 @@
 test_module_config {
     name: "FrameworksServicesTests_contexthub_postsubmit",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.location.contexthub."],
     // TODO(ron): are these right, does it run anything?
     include_annotations: ["android.platform.test.annotations.Postsubmit"],
@@ -302,7 +302,7 @@
 test_module_config {
     name: "FrameworksServicesTests_contentcapture",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.contentcapture"],
     exclude_annotations: FLAKY_AND_IGNORED,
 }
@@ -310,7 +310,7 @@
 test_module_config {
     name: "FrameworksServicesTests_recoverysystem",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.recoverysystem."],
     exclude_annotations: ["androidx.test.filters.FlakyTest"],
 }
@@ -319,7 +319,7 @@
 test_module_config {
     name: "FrameworksServicesTests_pm_presubmit",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_annotations: ["android.platform.test.annotations.Presubmit"],
     include_filters: ["com.android.server.pm."],
     exclude_annotations: FLAKY_AND_IGNORED,
@@ -328,7 +328,7 @@
 test_module_config {
     name: "FrameworksServicesTests_pm_postsubmit",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_annotations: ["android.platform.test.annotations.Postsubmit"],
     include_filters: ["com.android.server.pm."],
     exclude_annotations: FLAKY_AND_IGNORED,
@@ -338,6 +338,6 @@
 test_module_config {
     name: "FrameworksServicesTests_os",
     base: "FrameworksServicesTests",
-    test_suites: ["general-tests"],
+    test_suites: ["device-tests"],
     include_filters: ["com.android.server.os."],
 }