Snap for 9550355 from ba5e84ec264fc3403afedf352cd83cc9d16860bf to sdk-release

Change-Id: I94f31371284ec6d5a67f24f9bdbe00b91086cfc1
diff --git a/CompoundType.cpp b/CompoundType.cpp
index aa12c10..8b26df6 100644
--- a/CompoundType.cpp
+++ b/CompoundType.cpp
@@ -1751,7 +1751,7 @@
     }
 
     out.unindent();
-    out << "};\n\n";
+    out << "}\n\n";
 }
 
 void CompoundType::emitStructReaderWriter(
diff --git a/Interface.cpp b/Interface.cpp
index 9be88e9..e9950d2 100644
--- a/Interface.cpp
+++ b/Interface.cpp
@@ -307,9 +307,15 @@
         } } }, /* cppImpl */
         { { IMPL_INTERFACE, [this, digestType, chainType](auto &out) {
             std::vector<const Interface *> chain = typeChain();
-            out << "return new "
-                << chainType->getJavaType(false /* forInitializer */)
-                << "(java.util.Arrays.asList(\n";
+            out << "return new " << chainType->getJavaType(false /* forInitializer */);
+            if (chain.size() == 1) {
+                // https://errorprone.info/bugpattern/ArraysAsListPrimitiveArray
+                // To avoid an ArraysAsListPrimitiveArray errorprone error, use
+                // singletonList when there's only 1 element in the chain.
+                out << "(java.util.Collections.singletonList(\n";
+            } else {
+                out << "(java.util.Arrays.asList(\n";
+            }
             out.indent(2, [&] {
                 // No need for dimensions when elements are explicitly provided.
                 emitDigestChain(out, "new " + digestType->getJavaType(false /* forInitializer */),
diff --git a/build/hidl_interface.go b/build/hidl_interface.go
index e90b275..500a3bb 100644
--- a/build/hidl_interface.go
+++ b/build/hidl_interface.go
@@ -993,11 +993,15 @@
 	"android.hardware.camera.device@3.5":                true,
 	"android.hardware.camera.device@3.6":                true,
 	"android.hardware.camera.device@3.7":                true,
+	"android.hardware.camera.device@3.8":                true,
 	"android.hardware.camera.metadata@3.2":              true,
 	"android.hardware.camera.metadata@3.3":              true,
 	"android.hardware.camera.metadata@3.4":              true,
 	"android.hardware.camera.metadata@3.5":              true,
 	"android.hardware.camera.metadata@3.6":              true,
+        // TODO: Remove metadata@3.8 after AIDL migration b/196432585
+	"android.hardware.camera.metadata@3.7":              true,
+	"android.hardware.camera.metadata@3.8":              true,
 	"android.hardware.camera.provider@2.4":              true,
 	"android.hardware.camera.provider@2.5":              true,
 	"android.hardware.camera.provider@2.6":              true,
diff --git a/hidl2aidl/main.cpp b/hidl2aidl/main.cpp
index 5d48860..297b411 100644
--- a/hidl2aidl/main.cpp
+++ b/hidl2aidl/main.cpp
@@ -220,6 +220,8 @@
     out << "aidl_interface {\n";
     out << "    name: \"" << AidlHelper::getAidlPackage(fqName) << "\",\n";
     out << "    vendor_available: true,\n";
+    out << "    host_supported: true,\n";
+    out << "    frozen: false,\n";
     out << "    srcs: [\"" << AidlHelper::getAidlPackagePath(fqName) << "/*.aidl\"],\n";
     out << "    stability: \"vintf\",\n";
     out << "    backend: {\n";
@@ -231,12 +233,7 @@
     out << "            enabled: true,\n";
     out << "        },\n";
     out << "        java: {\n";
-    out << "            sdk_version: \"module_current\",\n";
-    out << "        },\n";
-    out << "        ndk: {\n";
-    out << "            vndk: {\n";
-    out << "                enabled: true,\n";
-    out << "            },\n";
+    out << "            sdk_version: \"system_current\",\n";
     out << "        },\n";
     out << "    },\n";
     out << "}\n\n";
@@ -265,7 +262,7 @@
     emitAidlSharedLibs(out, fqName, AidlBackend::JAVA);
     emitHidlSharedLibs(out, targets, AidlBackend::JAVA);
     out << "    ],\n";
-    out << "    sdk_version: \"module_current\",\n";
+    out << "    sdk_version: \"system_current\",\n";
     out << "}\n\n";
 }
 
diff --git a/hidl2aidl/test/Android.bp b/hidl2aidl/test/Android.bp
index d780c9a..408baef 100644
--- a/hidl2aidl/test/Android.bp
+++ b/hidl2aidl/test/Android.bp
@@ -128,7 +128,7 @@
     srcs: [":hidl2aidl_test_gen_aidl"],
     backend: {
         java: {
-            sdk_version: "module_current",
+            sdk_version: "system_current",
         },
     },
     flags: [
diff --git a/test/hidl_test/hidl_test.py b/test/hidl_test/hidl_test.py
index 1a58e5d..802ddeb 100644
--- a/test/hidl_test/hidl_test.py
+++ b/test/hidl_test/hidl_test.py
@@ -49,12 +49,12 @@
     servers = []
 
     if has_bitness(32):
-        clients += ["/data/nativetest/hidl_test_client/hidl_test_client"]
-        servers += ["/data/nativetest/hidl_test_servers/hidl_test_servers"]
+        clients += ["/data/nativetest/hidl_test_client/hidl_test_client32"]
+        servers += ["/data/nativetest/hidl_test_servers/hidl_test_servers32"]
 
     if has_bitness(64):
-        clients += ["/data/nativetest64/hidl_test_client/hidl_test_client"]
-        servers += ["/data/nativetest64/hidl_test_servers/hidl_test_servers"]
+        clients += ["/data/nativetest64/hidl_test_client/hidl_test_client64"]
+        servers += ["/data/nativetest64/hidl_test_servers/hidl_test_servers64"]
 
     assert len(clients) > 0
     assert len(servers) > 0
diff --git a/test/hidl_test/hidl_test.xml b/test/hidl_test/hidl_test.xml
index 586adc4..778b63f 100644
--- a/test/hidl_test/hidl_test.xml
+++ b/test/hidl_test/hidl_test.xml
@@ -23,11 +23,11 @@
       <!-- We would like to abort, but currently there is not a simple way to specify installation of both bitnesses of targets. -->
       <option name="abort-on-push-failure" value="false"/>
 
-      <option name="push" value="hidl_test_client32->/data/nativetest/hidl_test_client/hidl_test_client" />
-      <option name="push" value="hidl_test_client64->/data/nativetest64/hidl_test_client/hidl_test_client" />
+      <option name="push" value="hidl_test_client32->/data/nativetest/hidl_test_client/hidl_test_client32" />
+      <option name="push" value="hidl_test_client64->/data/nativetest64/hidl_test_client/hidl_test_client64" />
 
-      <option name="push" value="hidl_test_servers32->/data/nativetest/hidl_test_servers/hidl_test_servers" />
-      <option name="push" value="hidl_test_servers64->/data/nativetest64/hidl_test_servers/hidl_test_servers" />
+      <option name="push" value="hidl_test_servers32->/data/nativetest/hidl_test_servers/hidl_test_servers32" />
+      <option name="push" value="hidl_test_servers64->/data/nativetest64/hidl_test_servers/hidl_test_servers64" />
 
       <option name="cleanup" value="true" />
     </target_preparer>
diff --git a/test/hidl_test/hidl_test_client.cpp b/test/hidl_test/hidl_test_client.cpp
index eff40a5..d82dab6 100644
--- a/test/hidl_test/hidl_test_client.cpp
+++ b/test/hidl_test/hidl_test_client.cpp
@@ -960,41 +960,45 @@
     const uint64_t kBatchSize = 2;
     hidl_vec<hidl_memory> batchCopy;
 
-    EXPECT_OK(ashmemAllocator->batchAllocate(1024, kBatchSize,
-        [&](bool success, const hidl_vec<hidl_memory>& batch) {
-            ASSERT_TRUE(success);
-            EXPECT_EQ(kBatchSize, batch.size());
+    ASSERT_TRUE(ashmemAllocator
+                        ->batchAllocate(1024, kBatchSize,
+                                        [&](bool success, const hidl_vec<hidl_memory>& batch) {
+                                            ASSERT_TRUE(success);
+                                            EXPECT_EQ(kBatchSize, batch.size());
 
-            for (uint64_t i = 0; i < batch.size(); i++) {
-                sp<IMemory> memory = mapMemory(batch[i]);
+                                            for (uint64_t i = 0; i < batch.size(); i++) {
+                                                sp<IMemory> memory = mapMemory(batch[i]);
 
-                EXPECT_NE(nullptr, memory.get());
+                                                EXPECT_NE(nullptr, memory.get());
 
-                uint8_t* data = static_cast<uint8_t*>(static_cast<void*>(memory->getPointer()));
-                EXPECT_NE(nullptr, data);
+                                                uint8_t* data = static_cast<uint8_t*>(
+                                                        static_cast<void*>(memory->getPointer()));
+                                                EXPECT_NE(nullptr, data);
 
-                EXPECT_EQ(memory->getSize(), batch[i].size());
+                                                EXPECT_EQ(memory->getSize(), batch[i].size());
 
-                memory->update();
-                memset(data, kValue, memory->getSize());
-                memory->commit();
-            }
+                                                memory->update();
+                                                memset(data, kValue, memory->getSize());
+                                                memory->commit();
+                                            }
 
-            batchCopy = batch;
-        }));
+                                            batchCopy = batch;
+                                        })
+                        .isOk());
 
     for (uint64_t i = 0; i < batchCopy.size(); i++) {
         // Test the memory persists after the call
         sp<IMemory> memory = mapMemory(batchCopy[i]);
 
-        EXPECT_NE(memory, nullptr);
+        ASSERT_NE(memory, nullptr);
 
         uint8_t* data = static_cast<uint8_t*>(static_cast<void*>(memory->getPointer()));
-        EXPECT_NE(data, nullptr);
+        ASSERT_NE(data, nullptr);
 
         memory->read();
-        for (size_t i = 0; i < batchCopy[i].size(); i++) {
-            EXPECT_EQ(kValue, data[i]);
+
+        for (size_t k = 0; k < batchCopy[i].size(); k++) {
+            EXPECT_EQ(kValue, data[k]);
         }
         memory->commit();
     }
diff --git a/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java b/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java
index a0311fe..47adad8 100644
--- a/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java
+++ b/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java
@@ -930,8 +930,7 @@
             ExpectTrue(java.util.Objects.deepEquals(outArray, expectedOutArray));
 
             ArrayList<Integer> outVec = proxy.mapThisVector(paramVec);
-            java.util.Objects.equals(outVec, expectedOutVec);
-
+            ExpectTrue(java.util.Objects.equals(outVec, expectedOutVec));
         }
 
         Expect(proxy.doStuffAndReturnAString(), "Hello, world!");
@@ -1273,7 +1272,7 @@
         }
 
         public IBase.Foo[] someMethodWithFooArrays(IBase.Foo[] fooInput) {
-            Log.d(TAG, "Baz someMethodWithFooArrays " + fooInput.toString());
+            Log.d(TAG, "Baz someMethodWithFooArrays " + Arrays.toString(fooInput));
 
             IBase.Foo[] fooOutput = new IBase.Foo[2];
             fooOutput[0] = fooInput[1];
@@ -1333,7 +1332,7 @@
         }
 
         public String[][] transpose2(String[][] in) {
-            Log.d(TAG, "Baz transpose2 " + in.toString());
+            Log.d(TAG, "Baz transpose2 " + Arrays.deepToString(in));
 
             String[][] out = new String[3][5];
             for (int i = 0; i < 3; ++i) {
@@ -1352,8 +1351,7 @@
         }
 
         public boolean[] someBoolArrayMethod(boolean[] x) {
-            Log.d(TAG, "Baz someBoolArrayMethod("
-                    + x.toString() + ")");
+            Log.d(TAG, "Baz someBoolArrayMethod(" + Arrays.toString(x) + ")");
 
             boolean[] out = new boolean[4];
             out[0] = !x[0];
@@ -1390,7 +1388,7 @@
         }
 
         public int[] doSomethingElse(int[] param) {
-            Log.d(TAG, "Baz doSomethingElse " + param.toString());
+            Log.d(TAG, "Baz doSomethingElse " + Arrays.toString(param));
 
             int[] something = new int[32];
             for (int i = 0; i < 15; ++i) {
@@ -1422,8 +1420,7 @@
 
         public void takeAMask(byte bf, byte first, IBase.MyMask second, byte third,
                 takeAMaskCallback cb) {
-            cb.onValues(bf, (byte)(bf | first),
-                    (byte)(second.value & bf), (byte)((bf | bf) & third));
+            cb.onValues(bf, (byte) (bf | first), (byte) (second.value & bf), (byte) (bf & third));
         }
 
         public LotsOfPrimitiveArrays testArrays(LotsOfPrimitiveArrays in) {
@@ -1566,7 +1563,7 @@
 
         @Override
         public LargeSafeUnion setE(LargeSafeUnion safeUnion, byte[/* 13 */] e) {
-            Log.d(TAG, "SERVER: setE(" + e + ")");
+            Log.d(TAG, "SERVER: setE(" + Arrays.toString(e) + ")");
             safeUnion.e(e);
 
             return safeUnion;
@@ -1574,7 +1571,7 @@
 
         @Override
         public LargeSafeUnion setF(LargeSafeUnion safeUnion, long[/* 5 */] f) {
-            Log.d(TAG, "SERVER: setF(" + f + ")");
+            Log.d(TAG, "SERVER: setF(" + Arrays.toString(f) + ")");
             safeUnion.f(f);
 
             return safeUnion;
@@ -1661,7 +1658,7 @@
         @Override
         public InterfaceTypeSafeUnion setInterfaceB(
             InterfaceTypeSafeUnion safeUnion, byte[/* 7 */] b) {
-            Log.d(TAG, "SERVER: setInterfaceB(" + b + ")");
+            Log.d(TAG, "SERVER: setInterfaceB(" + Arrays.toString(b) + ")");
             safeUnion.b(b);
 
             return safeUnion;
@@ -1727,7 +1724,7 @@
 
         @Override
         public HandleTypeSafeUnion setHandleB(HandleTypeSafeUnion safeUnion, NativeHandle[] b) {
-            Log.d(TAG, "SERVER: setHandleB(" + b + ")");
+            Log.d(TAG, "SERVER: setHandleB(" + Arrays.toString(b) + ")");
             safeUnion.b(b);
 
             return safeUnion;
diff --git a/test/lazy_test/hidl_lazy_test.cpp b/test/lazy_test/hidl_lazy_test.cpp
index 6bbb161..4f27463 100644
--- a/test/lazy_test/hidl_lazy_test.cpp
+++ b/test/lazy_test/hidl_lazy_test.cpp
@@ -179,6 +179,10 @@
     FqInstance fqInstance;
     ASSERT_TRUE(fqInstance.setTo(fqInstanceName));
 
+    // b/251244025 - this service logic is coupled with this test, but other
+    // things may have started it
+    (void)android::base::SetProperty("ctl.stop", "hidl_lazy_cb_test_server");
+
     ASSERT_FALSE(isServiceRunning(fqInstance)) << "Lazy service already running.";
 
     sp<IBase> hal = getHal(fqInstance);
diff --git a/utils/Android.bp b/utils/Android.bp
index a0ba8b9..ef69803 100644
--- a/utils/Android.bp
+++ b/utils/Android.bp
@@ -25,6 +25,7 @@
     name: "libhidl-gen-utils",
     host_supported: true,
     product_available: true,
+    vendor_available: true,
     recovery_available: true,
     defaults: ["hidl-gen-defaults"],
     srcs: [