Fix ImageCapture NPE crash in 1.3.0 alpha
Null check before clearing the states.
Bug: 259109557
Test: manual test and ./gradlew bOS
Change-Id: I5543c8e98c264079cbb46897fcb4c62865c5ddd0
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
index 8d9b4ed..df23742 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
@@ -1659,8 +1659,10 @@
// RejectedExecutionException if a ProcessingImageReader is used to processing the
// captured images.
ExecutorService executorService = mExecutor;
- imageReaderCloseFuture.addListener(executorService::shutdown,
- CameraXExecutors.directExecutor());
+ if (executorService != null) {
+ imageReaderCloseFuture.addListener(executorService::shutdown,
+ CameraXExecutors.directExecutor());
+ }
}
/**
@@ -1851,7 +1853,9 @@
* {@link ImagePipeline}/{@link TakePictureManager}.
*/
+ @Nullable
private ImagePipeline mImagePipeline;
+ @Nullable
private TakePictureManager mTakePictureManager;
/**
@@ -2055,9 +2059,11 @@
private void clearPipelineWithNode(boolean keepTakePictureManager) {
Log.d(TAG, "clearPipelineWithNode");
checkMainThread();
- mImagePipeline.close();
- mImagePipeline = null;
- if (!keepTakePictureManager) {
+ if (mImagePipeline != null) {
+ mImagePipeline.close();
+ mImagePipeline = null;
+ }
+ if (!keepTakePictureManager && mTakePictureManager != null) {
mTakePictureManager.abortRequests();
mTakePictureManager = null;
}
@@ -2104,7 +2110,7 @@
@VisibleForTesting
@NonNull
TakePictureManager getTakePictureManager() {
- return mTakePictureManager;
+ return requireNonNull(mTakePictureManager);
}
// ===== New architecture end =====
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt
index 7211a30..8bfe101 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/ImageCaptureTest.kt
@@ -233,6 +233,11 @@
}
@Test
+ fun detachWithoutAttach_doesNotCrash() {
+ ImageCapture.Builder().build().onDetached()
+ }
+
+ @Test
fun useImageReaderProvider_pipelineDisabled() {
assertThat(
bindImageCapture(