Remove incorrect menu support from metadata factory

The partial_metadata_factory method to create V4L2 controls
incorrectly used V4L2_CTRL_TYPE_MENU - it assumed that all
values between min and max were supported. Actually, each value
must be queried using QUERY_MENU to confirm support.

BUG: b/30921166
TEST: unit tests pass, android.hardware.camera2.cts.CaptureRequestTest#testSceneModes now passes.
Change-Id: I763eb767e21c082a629d0ba91fdaaa0d6ce162f5
diff --git a/modules/camera/3_4/metadata/partial_metadata_factory.h b/modules/camera/3_4/metadata/partial_metadata_factory.h
index 6b6dbd8..63bf2f5 100644
--- a/modules/camera/3_4/metadata/partial_metadata_factory.h
+++ b/modules/camera/3_4/metadata/partial_metadata_factory.h
@@ -216,8 +216,7 @@
   std::shared_ptr<ConverterInterface<T, int32_t>> result_converter(converter);
   std::unique_ptr<ControlOptionsInterface<T>> result_options;
   switch (control_query.type) {
-    case V4L2_CTRL_TYPE_BOOLEAN:  // Fall-through.
-    case V4L2_CTRL_TYPE_MENU:
+    case V4L2_CTRL_TYPE_BOOLEAN:
       if (type != ControlType::kMenu) {
         HAL_LOGE(
             "V4L2 control %d is of type %d, which isn't compatible with "
diff --git a/modules/camera/3_4/metadata/partial_metadata_factory_test.cpp b/modules/camera/3_4/metadata/partial_metadata_factory_test.cpp
index 4c4a1b1..9ca3a38 100644
--- a/modules/camera/3_4/metadata/partial_metadata_factory_test.cpp
+++ b/modules/camera/3_4/metadata/partial_metadata_factory_test.cpp
@@ -77,6 +77,9 @@
       ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
 };
 
+class DISABLED_PartialMetadataFactoryTest : public PartialMetadataFactoryTest {
+};
+
 TEST_F(PartialMetadataFactoryTest, FixedState) {
   uint8_t value = 13;
   std::unique_ptr<State<uint8_t>> state = FixedState(delegate_tag_, value);
@@ -246,7 +249,8 @@
   ASSERT_EQ(control_, nullptr);
 }
 
-TEST_F(PartialMetadataFactoryTest, V4L2FactoryMenu) {
+TEST_F(DISABLED_PartialMetadataFactoryTest, V4L2FactoryMenu) {
+  // TODO(b/30921166): Correct Menu support so this can be re-enabled.
   int control_id = 55;
   v4l2_query_ext_ctrl query_result;
   query_result.type = V4L2_CTRL_TYPE_MENU;
@@ -281,7 +285,8 @@
   ExpectControlOptions(expected_options);
 }
 
-TEST_F(PartialMetadataFactoryTest, V4L2FactoryMenuConversionFail) {
+TEST_F(DISABLED_PartialMetadataFactoryTest, V4L2FactoryMenuConversionFail) {
+  // TODO(b/30921166): Correct Menu support so this can be re-enabled.
   int control_id = 55;
   v4l2_query_ext_ctrl query_result;
   query_result.type = V4L2_CTRL_TYPE_MENU;
@@ -304,7 +309,8 @@
   ASSERT_EQ(control_, nullptr);
 }
 
-TEST_F(PartialMetadataFactoryTest, V4L2FactoryMenuNoConversions) {
+TEST_F(DISABLED_PartialMetadataFactoryTest, V4L2FactoryMenuNoConversions) {
+  // TODO(b/30921166): Correct Menu support so this can be re-enabled.
   int control_id = 55;
   v4l2_query_ext_ctrl query_result;
   query_result.type = V4L2_CTRL_TYPE_MENU;
diff --git a/modules/camera/3_4/v4l2_metadata_factory.cpp b/modules/camera/3_4/v4l2_metadata_factory.cpp
index 0216d7c..55cc755 100644
--- a/modules/camera/3_4/v4l2_metadata_factory.cpp
+++ b/modules/camera/3_4/v4l2_metadata_factory.cpp
@@ -273,10 +273,11 @@
            {V4L2_COLORFX_AQUA, ANDROID_CONTROL_EFFECT_MODE_AQUA}})),
       ANDROID_CONTROL_EFFECT_MODE_OFF));
   // TODO(b/31021654): This should behave as a top level switch, not no effect.
-  components.insert(
-      NoEffectMenuControl<uint8_t>(ANDROID_CONTROL_MODE,
-                                   ANDROID_CONTROL_AVAILABLE_MODES,
-                                   {ANDROID_CONTROL_MODE_AUTO}));
+  // Should enforce being set to USE_SCENE_MODE when a scene mode is requested.
+  components.insert(NoEffectMenuControl<uint8_t>(
+      ANDROID_CONTROL_MODE,
+      ANDROID_CONTROL_AVAILABLE_MODES,
+      {ANDROID_CONTROL_MODE_AUTO, ANDROID_CONTROL_MODE_USE_SCENE_MODE}));
 
   // Not sure if V4L2 does or doesn't do this, but HAL documentation says
   // all devices must support FAST, and FAST can be equivalent to OFF, so