Merge "Disallow the app to enable extension modes when binding VideoCapture" into androidx-main
diff --git a/camera/camera-extensions/build.gradle b/camera/camera-extensions/build.gradle
index 5833337..d16ef32 100644
--- a/camera/camera-extensions/build.gradle
+++ b/camera/camera-extensions/build.gradle
@@ -56,6 +56,7 @@
     androidTestImplementation(libs.multidex)
     androidTestImplementation(project(":camera:camera-lifecycle"))
     androidTestImplementation(project(":camera:camera-testing"))
+    androidTestImplementation(project(":camera:camera-video"))
     androidTestImplementation(project(":internal-testutils-truth"))
     androidTestImplementation(project(":camera:camera-testlib-extensions"))
     // To use the testlib to have the implementation of the extensions-stub interface.
diff --git a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt
index 81efa20..e883ed5 100644
--- a/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt
+++ b/camera/camera-extensions/src/androidTest/java/androidx/camera/extensions/ExtensionsManagerTest.kt
@@ -21,6 +21,7 @@
 import androidx.camera.core.Camera
 import androidx.camera.core.CameraInfo
 import androidx.camera.core.CameraSelector
+import androidx.camera.core.VideoCapture
 import androidx.camera.core.impl.CameraInfoInternal
 import androidx.camera.extensions.internal.ExtensionVersion
 import androidx.camera.extensions.internal.Version
@@ -430,6 +431,23 @@
         }
     }
 
+    @Test
+    fun throwIllegalArgumentException_whenBindingVideoCapture(): Unit = runBlocking {
+        val extensionCameraSelector = checkExtensionAvailabilityAndInit()
+
+        withContext(Dispatchers.Main) {
+            val fakeLifecycleOwner = FakeLifecycleOwner()
+
+            assertThrows<IllegalArgumentException> {
+                cameraProvider.bindToLifecycle(
+                    fakeLifecycleOwner,
+                    extensionCameraSelector,
+                    VideoCapture.Builder().build()
+                )
+            }
+        }
+    }
+
     private fun checkExtensionAvailabilityAndInit(): CameraSelector {
         extensionsManager = ExtensionsManager.getInstanceAsync(
             context,
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/ExtensionsUseCaseConfigFactory.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/ExtensionsUseCaseConfigFactory.java
index b792fe7..fc383e5 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/ExtensionsUseCaseConfigFactory.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/ExtensionsUseCaseConfigFactory.java
@@ -62,6 +62,9 @@
                 mutableOptionsBundle =
                         MutableOptionsBundle.from(mPreviewConfigProvider.getConfig());
                 break;
+            case VIDEO_CAPTURE:
+                throw new IllegalArgumentException("CameraX Extensions doesn't support "
+                        + "VideoCapture!");
             default:
                 return null;
         }