Merge "Revert "Create a FakeSurfaceEffect for testing."" into androidx-main
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt
index 616fb90..85572f1 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt
@@ -19,7 +19,6 @@
import android.os.Build
import androidx.camera.core.SurfaceEffect.PREVIEW
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
-import androidx.camera.testing.fakes.FakeSurfaceEffect
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
@@ -42,7 +41,11 @@
@Test(expected = IllegalArgumentException::class)
fun addMoreThanOnePreviewEffect_throwsException() {
- val surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
+ val surfaceEffect = object : SurfaceEffect {
+ override fun onInputSurface(request: SurfaceRequest) {}
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
+ }
EffectBundle.Builder(mainThreadExecutor())
.addEffect(PREVIEW, surfaceEffect)
.addEffect(PREVIEW, surfaceEffect)
@@ -51,7 +54,11 @@
@Test
fun addPreviewEffect_hasPreviewEffect() {
// Arrange.
- val surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
+ val surfaceEffect = object : SurfaceEffect {
+ override fun onInputSurface(request: SurfaceRequest) {}
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
+ }
// Act.
val effectBundle = EffectBundle.Builder(mainThreadExecutor())
.addEffect(PREVIEW, surfaceEffect)
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
index 0cae6de..1be7cf1 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
@@ -42,7 +42,6 @@
import androidx.camera.testing.fakes.FakeCamera
import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
import androidx.camera.testing.fakes.FakeCameraFactory
-import androidx.camera.testing.fakes.FakeSurfaceEffectInternal
import androidx.camera.testing.fakes.FakeUseCase
import androidx.test.core.app.ApplicationProvider
import com.google.common.truth.Truth.assertThat
@@ -72,6 +71,8 @@
private lateinit var appSurface: Surface
private lateinit var appSurfaceTexture: SurfaceTexture
+ private lateinit var effectSurface: Surface
+ private lateinit var effectSurfaceTexture: SurfaceTexture
private lateinit var camera: FakeCamera
private lateinit var cameraXConfig: CameraXConfig
private lateinit var context: Context
@@ -81,6 +82,8 @@
fun setUp() {
appSurfaceTexture = SurfaceTexture(0)
appSurface = Surface(appSurfaceTexture)
+ effectSurfaceTexture = SurfaceTexture(0)
+ effectSurface = Surface(effectSurfaceTexture)
camera = FakeCamera()
val cameraFactoryProvider =
@@ -103,6 +106,8 @@
fun tearDown() {
appSurfaceTexture.release()
appSurface.release()
+ effectSurfaceTexture.release()
+ effectSurface.release()
with(cameraUseCaseAdapter) {
this?.removeUseCases(useCases)
}
@@ -217,10 +222,27 @@
@Test
fun bindAndUnbindPreview_surfacesPropagated() {
// Arrange.
- val effect = FakeSurfaceEffectInternal(mainThreadExecutor())
+ var surfaceOutputReceived: SurfaceOutput? = null
+ var effectSurfaceReadyToRelease = false
+ var isEffectReleased = false
+ val surfaceEffect = object : SurfaceEffectInternal {
+ override fun onInputSurface(request: SurfaceRequest) {
+ request.provideSurface(effectSurface, mainThreadExecutor()) {
+ effectSurfaceReadyToRelease = true
+ }
+ }
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
+ surfaceOutputReceived = surfaceOutput
+ }
+
+ override fun release() {
+ isEffectReleased = true
+ }
+ }
// Act: create pipeline in Preview and provide Surface.
- val preview = createPreviewPipelineAndAttachEffect(effect)
+ val preview = createPreviewPipelineAndAttachEffect(surfaceEffect)
val surfaceRequest = preview.mCurrentSurfaceRequest!!
var appSurfaceReadyToRelease = false
surfaceRequest.provideSurface(appSurface, mainThreadExecutor()) {
@@ -229,26 +251,30 @@
shadowOf(getMainLooper()).idle()
// Assert: surfaceOutput received.
- assertThat(effect.surfaceOutput).isNotNull()
- assertThat(effect.isReleased).isFalse()
- assertThat(effect.isOutputSurfaceRequestedToClose).isFalse()
- assertThat(effect.isInputSurfaceReleased).isFalse()
+ assertThat(surfaceOutputReceived).isNotNull()
+ var requestedToReleaseOutputSurface = false
+ surfaceOutputReceived!!.getSurface(mainThreadExecutor()) {
+ requestedToReleaseOutputSurface = true
+ }
+ assertThat(isEffectReleased).isFalse()
+ assertThat(requestedToReleaseOutputSurface).isFalse()
+ assertThat(effectSurfaceReadyToRelease).isFalse()
assertThat(appSurfaceReadyToRelease).isFalse()
// effect surface is provided to camera.
- assertThat(preview.sessionConfig.surfaces[0].surface.get()).isEqualTo(effect.inputSurface)
+ assertThat(preview.sessionConfig.surfaces[0].surface.get()).isEqualTo(effectSurface)
// Act: unbind Preview.
preview.onDetached()
shadowOf(getMainLooper()).idle()
// Assert: effect and effect surface is released.
- assertThat(effect.isReleased).isTrue()
- assertThat(effect.isOutputSurfaceRequestedToClose).isTrue()
- assertThat(effect.isInputSurfaceReleased).isTrue()
+ assertThat(isEffectReleased).isTrue()
+ assertThat(requestedToReleaseOutputSurface).isTrue()
+ assertThat(effectSurfaceReadyToRelease).isTrue()
assertThat(appSurfaceReadyToRelease).isFalse()
// Act: close SurfaceOutput
- effect.surfaceOutput!!.close()
+ surfaceOutputReceived!!.close()
shadowOf(getMainLooper()).idle()
assertThat(appSurfaceReadyToRelease).isTrue()
}
@@ -256,8 +282,18 @@
@Test
fun invokedErrorListener_recreatePipeline() {
// Arrange: create pipeline and get a reference of the SessionConfig.
- val effect = FakeSurfaceEffectInternal(mainThreadExecutor())
- val preview = createPreviewPipelineAndAttachEffect(effect)
+ val surfaceEffect = object : SurfaceEffectInternal {
+ override fun onInputSurface(request: SurfaceRequest) {}
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
+ surfaceOutput.getSurface(mainThreadExecutor()) {
+ surfaceOutput.close()
+ }
+ }
+
+ override fun release() {}
+ }
+ val preview = createPreviewPipelineAndAttachEffect(surfaceEffect)
val originalSessionConfig = preview.sessionConfig
// Act: invoke the error listener.
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
index 951f021..42f71acb 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
@@ -19,10 +19,11 @@
import android.os.Build
import androidx.camera.core.EffectBundle
import androidx.camera.core.Preview
+import androidx.camera.core.SurfaceEffect
import androidx.camera.core.SurfaceEffect.PREVIEW
-import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
+import androidx.camera.core.SurfaceOutput
+import androidx.camera.core.SurfaceRequest
import androidx.camera.core.processing.SurfaceEffectWithExecutor
-import androidx.camera.testing.fakes.FakeSurfaceEffect
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
@@ -42,20 +43,22 @@
@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
class CameraUseCaseAdapterTest {
- private lateinit var surfaceEffect: FakeSurfaceEffect
+ private lateinit var surfaceEffect: SurfaceEffect
private lateinit var mEffectBundle: EffectBundle
private lateinit var executor: ExecutorService
@Before
fun setUp() {
- surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
+ surfaceEffect = object : SurfaceEffect {
+ override fun onInputSurface(request: SurfaceRequest) {}
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
+ }
executor = Executors.newSingleThreadExecutor()
mEffectBundle = EffectBundle.Builder(executor).addEffect(PREVIEW, surfaceEffect).build()
}
@After
fun tearDown() {
- surfaceEffect.cleanUp()
executor.shutdown()
}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt
index 7df85dd..ca79bdea 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt
@@ -24,10 +24,11 @@
import android.util.Size
import android.view.Surface
import androidx.camera.core.SurfaceEffect.PREVIEW
+import androidx.camera.core.SurfaceOutput
+import androidx.camera.core.SurfaceRequest
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.core.impl.utils.futures.Futures
import androidx.camera.testing.fakes.FakeCamera
-import androidx.camera.testing.fakes.FakeSurfaceEffectInternal
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
@@ -54,9 +55,15 @@
private val CROP_RECT = Rect(0, 0, 600, 400)
}
- private lateinit var surfaceEffectInternal: FakeSurfaceEffectInternal
+ private lateinit var surfaceEffect: SurfaceEffectInternal
+ private var isReleased = false
+ private var surfaceOutputCloseRequested = false
+ private var surfaceOutputReceived: SurfaceOutput? = null
+ private var surfaceReceivedByEffect: Surface? = null
private lateinit var appSurface: Surface
private lateinit var appSurfaceTexture: SurfaceTexture
+ private lateinit var effectSurface: Surface
+ private lateinit var effectSurfaceTexture: SurfaceTexture
private lateinit var node: SurfaceEffectNode
private lateinit var inputEdge: SurfaceEdge
@@ -64,8 +71,30 @@
fun setup() {
appSurfaceTexture = SurfaceTexture(0)
appSurface = Surface(appSurfaceTexture)
- surfaceEffectInternal = FakeSurfaceEffectInternal(mainThreadExecutor())
- node = SurfaceEffectNode(FakeCamera(), surfaceEffectInternal)
+ effectSurfaceTexture = SurfaceTexture(0)
+ effectSurface = Surface(effectSurfaceTexture)
+
+ surfaceEffect = object : SurfaceEffectInternal {
+ override fun onInputSurface(request: SurfaceRequest) {
+ request.provideSurface(effectSurface, mainThreadExecutor()) {
+ effectSurfaceTexture.release()
+ effectSurface.release()
+ }
+ }
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
+ surfaceOutputReceived = surfaceOutput
+ surfaceReceivedByEffect = surfaceOutput.getSurface(mainThreadExecutor()) {
+ surfaceOutput.close()
+ surfaceOutputCloseRequested = true
+ }
+ }
+
+ override fun release() {
+ isReleased = true
+ }
+ }
+ node = SurfaceEffectNode(FakeCamera(), surfaceEffect)
inputEdge = createInputEdge()
}
@@ -73,7 +102,8 @@
fun tearDown() {
appSurfaceTexture.release()
appSurface.release()
- surfaceEffectInternal.release()
+ effectSurfaceTexture.release()
+ effectSurface.release()
node.release()
inputEdge.surfaces[0].close()
shadowOf(getMainLooper()).idle()
@@ -110,8 +140,8 @@
shadowOf(getMainLooper()).idle()
// Assert: effect receives app Surface. CameraX receives effect Surface.
- assertThat(surfaceEffectInternal.outputSurface).isEqualTo(appSurface)
- assertThat(inputSurface.surface.get()).isEqualTo(surfaceEffectInternal.inputSurface)
+ assertThat(surfaceReceivedByEffect).isEqualTo(appSurface)
+ assertThat(inputSurface.surface.get()).isEqualTo(effectSurface)
}
@Test
@@ -126,8 +156,8 @@
shadowOf(getMainLooper()).idle()
// Assert: effect is released and has requested effect to close the SurfaceOutput
- assertThat(surfaceEffectInternal.isReleased).isTrue()
- assertThat(surfaceEffectInternal.isOutputSurfaceRequestedToClose).isTrue()
+ assertThat(isReleased).isTrue()
+ assertThat(surfaceOutputCloseRequested).isTrue()
}
private fun createInputEdge(): SurfaceEdge {
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt
index 6a33afe..86b492e 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt
@@ -27,7 +27,6 @@
import androidx.camera.core.impl.utils.executor.CameraXExecutors
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.testing.fakes.FakeCamera
-import androidx.camera.testing.fakes.FakeSurfaceEffectInternal
import com.google.common.truth.Truth.assertThat
import java.lang.Thread.currentThread
import java.util.concurrent.Executor
@@ -70,10 +69,13 @@
@Test(expected = IllegalStateException::class)
fun initWithSurfaceEffectInternal_throwsException() {
- SurfaceEffectWithExecutor(
- FakeSurfaceEffectInternal(mainThreadExecutor()),
- mainThreadExecutor()
- )
+ SurfaceEffectWithExecutor(object : SurfaceEffectInternal {
+ override fun onInputSurface(request: SurfaceRequest) {}
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
+
+ override fun release() {}
+ }, mainThreadExecutor())
}
@Test
diff --git a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
index 35e8e77..bf87a7f 100644
--- a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
+++ b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
@@ -26,7 +26,10 @@
import androidx.camera.core.CameraXConfig
import androidx.camera.core.EffectBundle
import androidx.camera.core.Preview
+import androidx.camera.core.SurfaceEffect
import androidx.camera.core.SurfaceEffect.PREVIEW
+import androidx.camera.core.SurfaceOutput
+import androidx.camera.core.SurfaceRequest
import androidx.camera.core.UseCaseGroup
import androidx.camera.core.impl.CameraFactory
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
@@ -37,7 +40,6 @@
import androidx.camera.testing.fakes.FakeCameraFactory
import androidx.camera.testing.fakes.FakeCameraInfoInternal
import androidx.camera.testing.fakes.FakeLifecycleOwner
-import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.camera.testing.fakes.FakeUseCaseConfigFactory
import androidx.concurrent.futures.await
import androidx.test.core.app.ApplicationProvider
@@ -79,7 +81,12 @@
fun bindUseCaseGroupWithEffect_effectIsSetOnUseCase() {
// Arrange.
ProcessCameraProvider.configureInstance(FakeAppConfig.create())
- val surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
+ val surfaceEffect = object : SurfaceEffect {
+ override fun onInputSurface(request: SurfaceRequest) {}
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
+ surfaceOutput.close()
+ }
+ }
val effectBundle =
EffectBundle.Builder(mainThreadExecutor()).addEffect(PREVIEW, surfaceEffect).build()
val preview = Preview.Builder().setSessionOptionUnpacker { _, _ -> }.build()
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java
deleted file mode 100644
index 1287dee..0000000
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2022 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.testing.fakes;
-
-import android.graphics.SurfaceTexture;
-import android.os.Build;
-import android.view.Surface;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.SurfaceEffect;
-import androidx.camera.core.SurfaceOutput;
-import androidx.camera.core.SurfaceRequest;
-import androidx.camera.core.impl.DeferrableSurface;
-
-import java.util.concurrent.Executor;
-
-/**
- * Fake {@link SurfaceEffect} used in tests.
- */
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public class FakeSurfaceEffect implements SurfaceEffect {
-
- final SurfaceTexture mSurfaceTexture;
- final Surface mInputSurface;
- private final Executor mExecutor;
-
-
- @Nullable
- private SurfaceRequest mSurfaceRequest;
- @Nullable
- private SurfaceOutput mSurfaceOutput;
- boolean mIsInputSurfaceReleased;
- boolean mIsOutputSurfaceRequestedToClose;
-
- Surface mOutputSurface;
-
- public FakeSurfaceEffect(@NonNull Executor executor) {
- mSurfaceTexture = new SurfaceTexture(0);
- mInputSurface = new Surface(mSurfaceTexture);
- mExecutor = executor;
- mIsInputSurfaceReleased = false;
- mIsOutputSurfaceRequestedToClose = false;
- }
-
- @Override
- public void onInputSurface(@NonNull SurfaceRequest request) {
- mSurfaceRequest = request;
- request.provideSurface(mInputSurface, mExecutor, result -> {
- mSurfaceTexture.release();
- mInputSurface.release();
- mIsInputSurfaceReleased = true;
- });
- }
-
- @Override
- public void onOutputSurface(@NonNull SurfaceOutput surfaceOutput) {
- mSurfaceOutput = surfaceOutput;
- mOutputSurface = surfaceOutput.getSurface(mExecutor,
- () -> mIsOutputSurfaceRequestedToClose = true);
- }
-
- @Nullable
- public SurfaceRequest getSurfaceRequest() {
- return mSurfaceRequest;
- }
-
- @Nullable
- public SurfaceOutput getSurfaceOutput() {
- return mSurfaceOutput;
- }
-
- @NonNull
- public Surface getInputSurface() {
- return mInputSurface;
- }
-
- @NonNull
- public Surface getOutputSurface() {
- return mOutputSurface;
- }
-
- public boolean isInputSurfaceReleased() {
- return mIsInputSurfaceReleased;
- }
-
- public boolean isOutputSurfaceRequestedToClose() {
- return mIsOutputSurfaceRequestedToClose;
- }
-
- /**
- * Clear up the instance to avoid the "{@link DeferrableSurface} garbage collected" error.
- */
- public void cleanUp() {
- if (mSurfaceRequest != null) {
- mSurfaceRequest.willNotProvideSurface();
- }
- if (mSurfaceOutput != null) {
- mSurfaceOutput.close();
- }
- mSurfaceTexture.release();
- mInputSurface.release();
- }
-
- @Override
- protected void finalize() {
- cleanUp();
- }
-}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffectInternal.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffectInternal.java
deleted file mode 100644
index 47bd6f7..0000000
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffectInternal.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2022 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.testing.fakes;
-
-import android.os.Build;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.camera.core.processing.SurfaceEffectInternal;
-
-import java.util.concurrent.Executor;
-
-/**
- * Fake {@link SurfaceEffectInternal} used in tests.
- */
-@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public class FakeSurfaceEffectInternal extends FakeSurfaceEffect implements SurfaceEffectInternal {
-
- private boolean mIsReleased;
-
- public FakeSurfaceEffectInternal(@NonNull Executor executor) {
- super(executor);
- mIsReleased = false;
- }
-
- public boolean isReleased() {
- return mIsReleased;
- }
-
- @Override
- public void release() {
- mIsReleased = true;
- }
-}
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
index 2e5c7b8..c478811 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
@@ -25,7 +25,10 @@
import androidx.camera.core.CameraSelector.LENS_FACING_FRONT
import androidx.camera.core.EffectBundle
import androidx.camera.core.ImageCapture
+import androidx.camera.core.SurfaceEffect
import androidx.camera.core.SurfaceEffect.PREVIEW
+import androidx.camera.core.SurfaceOutput
+import androidx.camera.core.SurfaceRequest
import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.testing.CameraUtil
@@ -33,7 +36,6 @@
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.testing.fakes.FakeActivity
import androidx.camera.testing.fakes.FakeLifecycleOwner
-import androidx.camera.testing.fakes.FakeSurfaceEffect
import androidx.test.annotation.UiThreadTest
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
@@ -103,10 +105,15 @@
// Act: set an EffectBundle
instrumentation.runOnMainSync {
+ val surfaceEffect = object : SurfaceEffect {
+ override fun onInputSurface(request: SurfaceRequest) {}
+
+ override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
+ surfaceOutput.close()
+ }
+ }
controller.setEffectBundle(
- EffectBundle.Builder(mainThreadExecutor())
- .addEffect(PREVIEW, FakeSurfaceEffect(mainThreadExecutor()))
- .build()
+ EffectBundle.Builder(mainThreadExecutor()).addEffect(PREVIEW, surfaceEffect).build()
)
}