Camera2: Fix false alarm of testCapabilities

It is ok for camera to list all RAW capability keys but still not
advertise RAW capability if RAW output is not supported.

Bug: 17235537
Change-Id: I14ab0b7f65dd98f4492c71721e92e7a2fb5f3d53
diff --git a/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java b/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java
index 2f2f513..8215e49 100644
--- a/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java
+++ b/tests/tests/hardware/src/android/hardware/camera2/cts/StaticMetadataTest.java
@@ -127,7 +127,16 @@
         }
     }
 
-    private void validateRequestKeysPresence(String capabilityName,
+    /**
+     * Check if request keys' presence match expectation.
+     *
+     * @param capabilityName The name string of capability being tested. Used for output messages.
+     * @param requestKeys The capture request keys to be checked
+     * @param expectedPresence Expected presence of {@code requestKeys}. {@code true} for expecting
+     *        all keys are available. Otherwise {@code false}
+     * @return {@code true} if request keys' presence match expectation. Otherwise {@code false}
+     */
+    private boolean validateRequestKeysPresence(String capabilityName,
             List<CaptureRequest.Key<?>> requestKeys, boolean expectedPresence) {
         boolean actualPresence = mStaticInfo.areRequestKeysAvailable(requestKeys);
         if (expectedPresence != actualPresence) {
@@ -140,11 +149,13 @@
                     }
                 }
             } else {
-                mCollector.addMessage(String.format(
+                Log.w(TAG, String.format(
                         "Camera %s doesn't list capability %s but contain all required keys",
                         mCameraId, capabilityName));
             }
+            return false;
         }
+        return true;
     }
 
     private void validateCapability(Integer capability, boolean isCapabilityAvailable) {
@@ -211,10 +222,11 @@
                 break;
             case REQUEST_AVAILABLE_CAPABILITIES_RAW:
                 capabilityName = "REQUEST_AVAILABLE_CAPABILITIES_RAW";
+                boolean rawOutputSupported = mStaticInfo.getRawOutputSizesChecked().length > 0;
                 if (isCapabilityAvailable) {
-                    mCollector.expectGreater(
+                    mCollector.expectTrue(
                             "REQUEST_AVAILABLE_CAPABILITIES_RAW should support RAW_SENSOR output",
-                            /*expected*/0, mStaticInfo.getRawOutputSizesChecked().length);
+                            rawOutputSupported);
                 }
                 requestKeys.add(CaptureRequest.HOT_PIXEL_MODE);
                 requestKeys.add(CaptureRequest.STATISTICS_HOT_PIXEL_MAP_MODE);
@@ -223,7 +235,27 @@
                 capabilityName = "Unknown";
                 Assert.fail(String.format("Unknown capability: %d", capability));
         }
-        validateRequestKeysPresence(capabilityName, requestKeys, isCapabilityAvailable);
+        boolean matchExpectation =
+                validateRequestKeysPresence(capabilityName, requestKeys, isCapabilityAvailable);
+
+        // In case of isCapabilityAvailable == true, error has been filed in
+        // validateRequestKeysPresence
+        if (!matchExpectation && !isCapabilityAvailable) {
+            if (capability == REQUEST_AVAILABLE_CAPABILITIES_RAW) {
+                // RAW capability needs to also check raw output capability
+                boolean rawOutputSupported = mStaticInfo.getRawOutputSizesChecked().length > 0;
+                if (rawOutputSupported) {
+                    mCollector.addMessage(String.format(
+                            "Camera %s doesn't list capability %s but contain all required keys" +
+                            " and RAW format output",
+                            mCameraId, capabilityName));
+                }
+            } else {
+                mCollector.addMessage(String.format(
+                        "Camera %s doesn't list capability %s but contain all required keys",
+                        mCameraId, capabilityName));
+            }
+        }
     }
 
     /**