Revert "Enable extensions to switch between different camera2 implementations"

This reverts commit 64180328f3825fdb6928772efa2ac95ace060fe3.

Reason for revert: Dependency added on unreleased library `camera-camera2-pipe-integration` which will block release.

Change-Id: I005a10586f229949b2e8bd2df85996bec9a630b1
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt
index aafb109..cf910d3 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/interop/Camera2CameraInfo.kt
@@ -24,6 +24,7 @@
 import androidx.camera.camera2.pipe.integration.impl.CameraProperties
 import androidx.camera.core.CameraInfo
 import androidx.camera.core.impl.CameraInfoInternal
+import androidx.core.util.Preconditions
 
 /**
  * An interface for retrieving Camera2-related camera information.
@@ -31,7 +32,7 @@
 @ExperimentalCamera2Interop
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 class Camera2CameraInfo private constructor(
-    internal val cameraProperties: CameraProperties,
+    private val cameraProperties: CameraProperties,
 ) {
 
     /**
@@ -72,31 +73,6 @@
 
     fun getCameraId(): String = cameraProperties.cameraId.value
 
-    /**
-     * Returns a map consisting of the camera ids and the
-     * [android.hardware.camera2.CameraCharacteristics]s.
-     *
-     * For every camera, the map contains at least the CameraCharacteristics for the camera id.
-     * If the camera is logical camera, it will also contain associated physical camera ids and
-     * their CameraCharacteristics.
-     */
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    fun getCameraCharacteristicsMap(): Map<String, CameraCharacteristics> {
-        return buildMap {
-            put(
-                cameraProperties.cameraId.value,
-                cameraProperties.metadata.unwrapAs(CameraCharacteristics::class)!!
-            )
-            for (cameraId in cameraProperties.metadata.physicalCameraIds) {
-                put(
-                    cameraId.value,
-                    cameraProperties.metadata.awaitPhysicalMetadata(cameraId)
-                        .unwrapAs(CameraCharacteristics::class)!!
-                )
-            }
-        }
-    }
-
     companion object {
 
         /**
@@ -111,10 +87,11 @@
         @JvmStatic
         fun from(@Suppress("UNUSED_PARAMETER") cameraInfo: CameraInfo): Camera2CameraInfo {
             var cameraInfoImpl = (cameraInfo as CameraInfoInternal).implementation
-            require(cameraInfoImpl is CameraInfoAdapter) {
+            Preconditions.checkArgument(
+                cameraInfoImpl is CameraInfoAdapter,
                 "CameraInfo doesn't contain Camera2 implementation."
-            }
-            return cameraInfoImpl.camera2CameraInfo
+            )
+            return (cameraInfoImpl as CameraInfoAdapter).camera2CameraInfo
         }
 
         /**
@@ -123,29 +100,5 @@
         @RestrictTo(RestrictTo.Scope.LIBRARY)
         @JvmStatic
         fun create(cameraProperties: CameraProperties) = Camera2CameraInfo(cameraProperties)
-
-        /**
-         * Returns the [android.hardware.camera2.CameraCharacteristics] for this camera.
-         *
-         * The CameraCharacteristics will be the ones that would be obtained by
-         * [android.hardware.camera2.CameraManager.getCameraCharacteristics]. The
-         * CameraCharacteristics that are retrieved are not static and can change depending on the
-         * current internal configuration of the camera.
-         *
-         * @param cameraInfo The [CameraInfo] to extract the CameraCharacteristics from.
-         * @throws IllegalStateException if the camera info does not contain the camera 2
-         *                               characteristics(e.g., if CameraX was not initialized with a
-         *                               [androidx.camera.camera2.Camera2Config]).
-         */
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-        @JvmStatic
-        fun extractCameraCharacteristics(cameraInfo: CameraInfo): CameraCharacteristics {
-            var cameraInfoImpl = (cameraInfo as CameraInfoInternal).implementation
-            require(cameraInfoImpl is CameraInfoAdapter) {
-                "CameraInfo doesn't contain Camera2 implementation."
-            }
-            return cameraInfoImpl.camera2CameraInfo
-                .cameraProperties.metadata.unwrapAs(CameraCharacteristics::class)!!
-        }
     }
 }
diff --git a/camera/camera-extensions/build.gradle b/camera/camera-extensions/build.gradle
index 3ae5439..fbe84e3 100644
--- a/camera/camera-extensions/build.gradle
+++ b/camera/camera-extensions/build.gradle
@@ -30,7 +30,6 @@
     implementation("androidx.core:core:1.0.0")
     implementation("androidx.concurrent:concurrent-futures:1.0.0")
     implementation(libs.autoValueAnnotations)
-    implementation(project(':camera:camera-camera2-pipe-integration'))
     annotationProcessor(libs.autoValue)
 
     compileOnly(project(":camera:camera-extensions-stub"))
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java
index a859edb..0da3b2b 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionCameraFilter.java
@@ -19,12 +19,16 @@
 import android.hardware.camera2.CameraCharacteristics;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
+import androidx.camera.camera2.interop.Camera2CameraInfo;
+import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
 import androidx.camera.core.CameraFilter;
 import androidx.camera.core.CameraInfo;
+import androidx.camera.core.impl.CameraInfoInternal;
 import androidx.camera.core.impl.Identifier;
-import androidx.camera.extensions.internal.Camera2CameraInfoWrapper;
 import androidx.camera.extensions.internal.VendorExtender;
+import androidx.core.util.Preconditions;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -50,15 +54,18 @@
         return mId;
     }
 
+    @OptIn(markerClass = ExperimentalCamera2Interop.class)
     @NonNull
     @Override
     public List<CameraInfo> filter(@NonNull List<CameraInfo> cameraInfos) {
         List<CameraInfo> result = new ArrayList<>();
         for (CameraInfo cameraInfo : cameraInfos) {
-            String cameraId = Camera2CameraInfoWrapper.from(cameraInfo).getCameraId();
+            Preconditions.checkArgument(cameraInfo instanceof CameraInfoInternal,
+                    "The camera info doesn't contain internal implementation.");
+            String cameraId = Camera2CameraInfo.from(cameraInfo).getCameraId();
 
             Map<String, CameraCharacteristics> cameraCharacteristicsMap =
-                    Camera2CameraInfoWrapper.from(cameraInfo).getCameraCharacteristicsMap();
+                    Camera2CameraInfo.from(cameraInfo).getCameraCharacteristicsMap();
 
             if (mVendorExtender
                     .isExtensionAvailable(cameraId, cameraCharacteristicsMap)) {
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java
index 6d5494f..5722a6b 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/AdvancedVendorExtender.java
@@ -26,8 +26,11 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.VisibleForTesting;
+import androidx.camera.camera2.interop.Camera2CameraInfo;
+import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
 import androidx.camera.core.CameraInfo;
 import androidx.camera.core.Logger;
 import androidx.camera.core.impl.SessionProcessor;
@@ -90,12 +93,13 @@
         mAdvancedExtenderImpl = advancedExtenderImpl;
     }
 
+    @OptIn(markerClass = ExperimentalCamera2Interop.class)
     @Override
     public void init(@NonNull CameraInfo cameraInfo) {
-        mCameraId = Camera2CameraInfoWrapper.from(cameraInfo).getCameraId();
+        mCameraId = Camera2CameraInfo.from(cameraInfo).getCameraId();
 
         Map<String, CameraCharacteristics> cameraCharacteristicsMap =
-                Camera2CameraInfoWrapper.from(cameraInfo).getCameraCharacteristicsMap();
+                Camera2CameraInfo.from(cameraInfo).getCameraCharacteristicsMap();
 
         mAdvancedExtenderImpl.init(mCameraId, cameraCharacteristicsMap);
     }
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java
index fa8e2fb..508f54d8 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/BasicVendorExtender.java
@@ -29,8 +29,11 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.VisibleForTesting;
+import androidx.camera.camera2.interop.Camera2CameraInfo;
+import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
 import androidx.camera.core.CameraInfo;
 import androidx.camera.core.Logger;
 import androidx.camera.core.impl.ImageFormatConstants;
@@ -89,7 +92,6 @@
             CaptureRequest.FLASH_MODE,
             CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION
     ));
-
     static {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
             sBaseSupportedKeys.add(CaptureRequest.CONTROL_ZOOM_RATIO);
@@ -154,6 +156,7 @@
                 && mImageCaptureExtenderImpl.isExtensionAvailable(cameraId, cameraCharacteristics);
     }
 
+    @OptIn(markerClass = ExperimentalCamera2Interop.class)
     @Override
     public void init(@NonNull CameraInfo cameraInfo) {
         mCameraInfo = cameraInfo;
@@ -162,9 +165,9 @@
             return;
         }
 
-        mCameraId = Camera2CameraInfoWrapper.from(cameraInfo).getCameraId();
+        mCameraId = Camera2CameraInfo.from(cameraInfo).getCameraId();
         mCameraCharacteristics =
-                Camera2CameraInfoWrapper.extractCameraCharacteristics(cameraInfo);
+                Camera2CameraInfo.extractCameraCharacteristics(cameraInfo);
         mPreviewExtenderImpl.init(mCameraId, mCameraCharacteristics);
         mImageCaptureExtenderImpl.init(mCameraId, mCameraCharacteristics);
 
@@ -187,8 +190,9 @@
         return null;
     }
 
+    @OptIn(markerClass = ExperimentalCamera2Interop.class)
     private Size[] getOutputSizes(int imageFormat) {
-        StreamConfigurationMap map = Camera2CameraInfoWrapper.from(mCameraInfo)
+        StreamConfigurationMap map = Camera2CameraInfo.from(mCameraInfo)
                 .getCameraCharacteristic(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
 
         return map.getOutputSizes(imageFormat);
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/Camera2CameraInfoWrapper.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/Camera2CameraInfoWrapper.java
deleted file mode 100644
index 48d3935..0000000
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/internal/Camera2CameraInfoWrapper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.camera.extensions.internal;
-
-import android.hardware.camera2.CameraCharacteristics;
-import android.os.Build;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.OptIn;
-import androidx.annotation.RequiresApi;
-import androidx.camera.camera2.internal.Camera2CameraInfoImpl;
-import androidx.camera.camera2.pipe.integration.adapter.CameraInfoAdapter;
-import androidx.camera.core.CameraInfo;
-import androidx.camera.core.impl.CameraInfoInternal;
-
-import java.util.Map;
-
-
-@OptIn(markerClass = {androidx.camera.camera2.interop.ExperimentalCamera2Interop.class,
-        androidx.camera.camera2.pipe.integration.interop.ExperimentalCamera2Interop.class})
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public final class Camera2CameraInfoWrapper {
-    private androidx.camera.camera2.interop.Camera2CameraInfo mCamera2CameraInfo;
-    private androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo
-            mCameraPipeCameraInfo;
-
-    Camera2CameraInfoWrapper(@NonNull Camera2CameraInfoImpl camera2CameraInfo) {
-        mCamera2CameraInfo =
-                androidx.camera.camera2.interop.Camera2CameraInfo.from(camera2CameraInfo);
-    }
-
-    Camera2CameraInfoWrapper(@NonNull CameraInfoAdapter cameraInfoAdapter) {
-        mCameraPipeCameraInfo =
-                androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo.from(
-                        cameraInfoAdapter);
-    }
-
-    @NonNull
-    public static Camera2CameraInfoWrapper from(@NonNull CameraInfo cameraInfo) {
-        CameraInfoInternal cameraInfoInternal =
-                ((CameraInfoInternal) cameraInfo).getImplementation();
-        if (cameraInfoInternal instanceof Camera2CameraInfoImpl) {
-            return new Camera2CameraInfoWrapper((Camera2CameraInfoImpl) cameraInfoInternal);
-        } else if (cameraInfoInternal instanceof CameraInfoAdapter) {
-            return new Camera2CameraInfoWrapper((CameraInfoAdapter) cameraInfoInternal);
-        } else {
-            throw new IllegalArgumentException("Not a Camera2 implementation!");
-        }
-    }
-
-    @NonNull
-    public String getCameraId() {
-        if (mCamera2CameraInfo != null) {
-            return mCamera2CameraInfo.getCameraId();
-        } else {
-            return mCameraPipeCameraInfo.getCameraId();
-        }
-    }
-
-    @NonNull
-    public <T> T getCameraCharacteristic(@NonNull CameraCharacteristics.Key<T> key) {
-        if (mCamera2CameraInfo != null) {
-            return mCamera2CameraInfo.getCameraCharacteristic(key);
-        } else {
-            return mCameraPipeCameraInfo.getCameraCharacteristic(key);
-        }
-    }
-
-    @NonNull
-    public static CameraCharacteristics extractCameraCharacteristics(
-            @NonNull CameraInfo cameraInfo) {
-        CameraInfoInternal cameraInfoInternal =
-                ((CameraInfoInternal) cameraInfo).getImplementation();
-        if (cameraInfoInternal instanceof Camera2CameraInfoImpl) {
-            return androidx.camera.camera2.interop.Camera2CameraInfo.extractCameraCharacteristics(
-                    cameraInfo);
-        } else if (cameraInfoInternal instanceof CameraInfoAdapter) {
-            return androidx.camera.camera2.pipe.integration.interop.Camera2CameraInfo
-                    .extractCameraCharacteristics(cameraInfo);
-        } else {
-            throw new IllegalArgumentException("Not a Camera2 implementation!");
-        }
-    }
-
-    @NonNull
-    public Map<String, CameraCharacteristics> getCameraCharacteristicsMap() {
-        if (mCamera2CameraInfo != null) {
-            return mCamera2CameraInfo.getCameraCharacteristicsMap();
-        } else {
-            return mCameraPipeCameraInfo.getCameraCharacteristicsMap();
-        }
-    }
-}
diff --git a/camera/integration-tests/extensionstestapp/build.gradle b/camera/integration-tests/extensionstestapp/build.gradle
index e99a244..065d53d 100644
--- a/camera/integration-tests/extensionstestapp/build.gradle
+++ b/camera/integration-tests/extensionstestapp/build.gradle
@@ -63,7 +63,6 @@
     // Guava
     implementation(libs.guavaAndroid)
     implementation("androidx.viewpager2:viewpager2:1.0.0")
-    implementation(project(':camera:camera-camera2-pipe-integration'))
 
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.testCore)
@@ -77,7 +76,6 @@
         exclude(group:"androidx.test")
     }
     androidTestImplementation(project(":internal-testutils-runtime"))
-    androidTestImplementation(project(":concurrent:concurrent-futures"))
     androidTestCompileOnly(project(":camera:camera-extensions-stub"))
 
     // Testing resource dependency for manifest
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
index 05119ed..d0f23fc 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
@@ -60,7 +60,6 @@
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.camera.camera2.interop.Camera2Interop;
 import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
-import androidx.camera.camera2.pipe.integration.CameraPipeConfig;
 import androidx.camera.core.Camera;
 import androidx.camera.core.CameraControl;
 import androidx.camera.core.CameraInfo;
@@ -80,7 +79,6 @@
 import androidx.camera.integration.extensions.utils.ExtensionModeUtil;
 import androidx.camera.integration.extensions.utils.FpsRecorder;
 import androidx.camera.integration.extensions.validation.CameraValidationResultActivity;
-import androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration;
 import androidx.camera.lifecycle.ProcessCameraProvider;
 import androidx.camera.view.PreviewView;
 import androidx.concurrent.futures.CallbackToFutureAdapter;
@@ -111,8 +109,6 @@
 
     private static final String TAG = "CameraExtensionActivity";
     private static final int PERMISSIONS_REQUEST_CODE = 42;
-    public static final String INTENT_EXTRA_CAMERA_IMPLEMENTATION = "camera_implementation";
-    public static final String CAMERA_PIPE_IMPLEMENTATION_OPTION = "camera_pipe";
 
     private CameraSelector mCurrentCameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
 
@@ -435,10 +431,7 @@
         mFrameInfo = findViewById(R.id.frameInfo);
         mPreviewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE);
         setupPinchToZoomAndTapToFocus(mPreviewView);
-        String cameraImplementation =
-                getIntent().getStringExtra(INTENT_EXTRA_CAMERA_IMPLEMENTATION);
         Futures.addCallback(setupPermissions(), new FutureCallback<Boolean>() {
-            @OptIn(markerClass = ExperimentalCameraProviderConfiguration.class)
             @Override
             public void onSuccess(@Nullable Boolean result) {
                 mPermissionsGranted = Preconditions.checkNotNull(result);
@@ -451,10 +444,6 @@
                     return;
                 }
 
-                if (cameraImplementation != null &&
-                        cameraImplementation.equals(CAMERA_PIPE_IMPLEMENTATION_OPTION)) {
-                    ProcessCameraProvider.configureInstance(CameraPipeConfig.defaultConfig());
-                }
                 ListenableFuture<ProcessCameraProvider> cameraProviderFuture =
                         ProcessCameraProvider.getInstance(CameraExtensionsActivity.this);