Remove java 8 features.
* Remove java 8 interface default method.
- put Configuration.Reader/Builder implementation in implementation class.
- Remove default methods in CamraControl / CameraInfo /
* add final to variable used in inner class
* Replace DefaultLifeclcyeObserver(java 8 only) with LifecyclerObserver with annotations.
Bug: 124267925
Test: manual
Change-Id: I0dbe2032e00fa82380bf7d0d254445aae266254d
diff --git a/camera/camera2/src/main/java/androidx/camera/camera2/Camera.java b/camera/camera2/src/main/java/androidx/camera/camera2/Camera.java
index 451028b..1f24bc0 100644
--- a/camera/camera2/src/main/java/androidx/camera/camera2/Camera.java
+++ b/camera/camera2/src/main/java/androidx/camera/camera2/Camera.java
@@ -217,7 +217,7 @@
* <p>The use case must also be online in order for it to issue capture requests.
*/
@Override
- public void onUseCaseActive(BaseUseCase useCase) {
+ public void onUseCaseActive(final BaseUseCase useCase) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -238,7 +238,7 @@
/** Removes the use case from a state of issuing capture requests. */
@Override
- public void onUseCaseInactive(BaseUseCase useCase) {
+ public void onUseCaseInactive(final BaseUseCase useCase) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -259,7 +259,7 @@
/** Updates the capture requests based on the latest settings. */
@Override
- public void onUseCaseUpdated(BaseUseCase useCase) {
+ public void onUseCaseUpdated(final BaseUseCase useCase) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -279,7 +279,7 @@
}
@Override
- public void onUseCaseReset(BaseUseCase useCase) {
+ public void onUseCaseReset(final BaseUseCase useCase) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -310,7 +310,7 @@
* capture requests from the use case.
*/
@Override
- public void addOnlineUseCase(Collection<BaseUseCase> useCases) {
+ public void addOnlineUseCase(final Collection<BaseUseCase> useCases) {
if (useCases.isEmpty()) {
return;
}
@@ -342,7 +342,7 @@
* handle capture requests from the use case.
*/
@Override
- public void removeOnlineUseCase(Collection<BaseUseCase> useCases) {
+ public void removeOnlineUseCase(final Collection<BaseUseCase> useCases) {
if (useCases.isEmpty()) {
return;
}
@@ -531,7 +531,7 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Override
- public void submitSingleRequest(CaptureRequestConfiguration captureRequestConfiguration) {
+ public void submitSingleRequest(final CaptureRequestConfiguration captureRequestConfiguration) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
diff --git a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraControl.java b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraControl.java
index 639999b..2001880 100644
--- a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraControl.java
+++ b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraControl.java
@@ -99,7 +99,7 @@
/** {@inheritDoc} */
@Override
- public void setCropRegion(Rect crop) {
+ public void setCropRegion(final Rect crop) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -117,10 +117,10 @@
/** {@inheritDoc} */
@Override
public void focus(
- Rect focus,
- Rect metering,
- @Nullable OnFocusCompletedListener listener,
- @Nullable Handler listenerHandler) {
+ final Rect focus,
+ final Rect metering,
+ @Nullable final OnFocusCompletedListener listener,
+ @Nullable final Handler listenerHandler) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -199,6 +199,11 @@
}
}
+ @Override
+ public void focus(Rect focus, Rect metering) {
+ focus(focus, metering, null, null);
+ }
+
private void runInFocusListenerHandler(Runnable runnable) {
if (mFocusListenerHandler != null) {
mFocusListenerHandler.post(runnable);
@@ -275,7 +280,7 @@
enableTorchInternal(torch);
}
- private void enableTorchInternal(boolean torch) {
+ private void enableTorchInternal(final boolean torch) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
@@ -365,7 +370,8 @@
* exposure scan.
*/
@Override
- public void cancelAfAeTrigger(boolean cancelAfTrigger, boolean cancelAePrecaptureTrigger) {
+ public void cancelAfAeTrigger(final boolean cancelAfTrigger,
+ final boolean cancelAePrecaptureTrigger) {
if (Looper.myLooper() != mHandler.getLooper()) {
mHandler.post(new Runnable() {
@Override
diff --git a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraInfo.java b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraInfo.java
index 69d69b8..06ba9e7 100644
--- a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraInfo.java
+++ b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2CameraInfo.java
@@ -20,6 +20,7 @@
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
+import android.view.Surface;
import androidx.annotation.Nullable;
import androidx.camera.core.CameraInfo;
@@ -90,4 +91,9 @@
+ readableName);
}
}
+
+ @Override
+ public int getSensorRotationDegrees() {
+ return getSensorRotationDegrees(Surface.ROTATION_0);
+ }
}
diff --git a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2Configuration.java b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2Configuration.java
index 38adfae9..c2270855 100644
--- a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2Configuration.java
+++ b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2Configuration.java
@@ -87,7 +87,7 @@
/** Returns all capture request options contained in this configuration. */
Set<Option<?>> getCaptureRequestOptions() {
- Set<Option<?>> optionSet = new HashSet<>();
+ final Set<Option<?>> optionSet = new HashSet<>();
findOptions(
Camera2Configuration.CAPTURE_REQUEST_ID_STEM,
new OptionMatcher() {
@@ -316,5 +316,75 @@
public Camera2Configuration build() {
return new Camera2Configuration(OptionsBundle.from(mMutableOptionsBundle));
}
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
}
diff --git a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2DeviceSurfaceManager.java b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2DeviceSurfaceManager.java
index 61add18..e4827e7 100644
--- a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2DeviceSurfaceManager.java
+++ b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2DeviceSurfaceManager.java
@@ -52,7 +52,12 @@
private boolean mIsInitialized = false;
Camera2DeviceSurfaceManager(Context context) {
- init(context, CamcorderProfile::hasProfile);
+ init(context, new CamcorderProfileHelper() {
+ @Override
+ public boolean hasProfile(int cameraId, int quality) {
+ return CamcorderProfile.hasProfile(cameraId, quality);
+ }
+ });
}
@VisibleForTesting
diff --git a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2OptionUnpacker.java b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2OptionUnpacker.java
index 4836a5b..33e77b7 100644
--- a/camera/camera2/src/main/java/androidx/camera/camera2/Camera2OptionUnpacker.java
+++ b/camera/camera2/src/main/java/androidx/camera/camera2/Camera2OptionUnpacker.java
@@ -39,7 +39,7 @@
static final Camera2OptionUnpacker INSTANCE = new Camera2OptionUnpacker();
@Override
- public void unpack(UseCaseConfiguration<?> config, SessionConfiguration.Builder builder) {
+ public void unpack(UseCaseConfiguration<?> config, final SessionConfiguration.Builder builder) {
SessionConfiguration defaultSessionConfig =
config.getDefaultSessionConfiguration(/*valueIfMissing=*/ null);
@@ -68,7 +68,7 @@
builder.setImplementationOptions(implOptions);
// Get Camera2 extended options
- Camera2Configuration camera2Config = new Camera2Configuration(config);
+ final Camera2Configuration camera2Config = new Camera2Configuration(config);
// Apply template type
builder.setTemplateType(camera2Config.getCaptureRequestTemplate(templateType));
diff --git a/camera/core/src/androidTest/java/androidx/camera/core/ForwardingImageProxyTest.java b/camera/core/src/androidTest/java/androidx/camera/core/ForwardingImageProxyTest.java
index d039d71..c0930b7 100644
--- a/camera/core/src/androidTest/java/androidx/camera/core/ForwardingImageProxyTest.java
+++ b/camera/core/src/androidTest/java/androidx/camera/core/ForwardingImageProxyTest.java
@@ -60,8 +60,8 @@
@Test
public void close_notifiesOnImageCloseListener_afterSetOnImageCloseListener()
throws InterruptedException {
- Semaphore closedImageSemaphore = new Semaphore(/*permits=*/ 0);
- AtomicReference<ImageProxy> closedImage = new AtomicReference<>();
+ final Semaphore closedImageSemaphore = new Semaphore(/*permits=*/ 0);
+ final AtomicReference<ImageProxy> closedImage = new AtomicReference<>();
mImageProxy.addOnImageCloseListener(
new ForwardingImageProxy.OnImageCloseListener() {
@Override
diff --git a/camera/core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java b/camera/core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java
index 18d6b14..2a304e0 100644
--- a/camera/core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java
+++ b/camera/core/src/main/java/androidx/camera/core/AndroidImageReaderProxy.java
@@ -96,7 +96,7 @@
@Override
public synchronized void setOnImageAvailableListener(
- @Nullable ImageReaderProxy.OnImageAvailableListener listener,
+ @Nullable final ImageReaderProxy.OnImageAvailableListener listener,
@Nullable Handler handler) {
ImageReader.OnImageAvailableListener transformedListener =
new ImageReader.OnImageAvailableListener() {
diff --git a/camera/core/src/main/java/androidx/camera/core/AppConfiguration.java b/camera/core/src/main/java/androidx/camera/core/AppConfiguration.java
index 7e7682e..1d40315 100644
--- a/camera/core/src/main/java/androidx/camera/core/AppConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/AppConfiguration.java
@@ -20,6 +20,9 @@
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
+import java.util.Set;
+import java.util.UUID;
+
/**
* Configuration for adding implementation and user-specific behavior to CameraX.
*
@@ -176,5 +179,132 @@
public AppConfiguration build() {
return new AppConfiguration(OptionsBundle.from(mMutableConfig));
}
+
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // Implementations of TargetConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetClass(Class<CameraX> targetClass) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetName(String targetName) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // Implementations of TargetConfiguration default methods
+
+ @Override
+ @Nullable
+ public Class<CameraX> getTargetClass(
+ @Nullable Class<CameraX> valueIfMissing) {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<CameraX> storedClass = (Class<CameraX>) retrieveOption(
+ OPTION_TARGET_CLASS,
+ valueIfMissing);
+ return storedClass;
+ }
+
+ @Override
+ public Class<CameraX> getTargetClass() {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<CameraX> storedClass = (Class<CameraX>) retrieveOption(
+ OPTION_TARGET_CLASS);
+ return storedClass;
+ }
+
+ @Override
+ @Nullable
+ public String getTargetName(@Nullable String valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
+ }
+
+ @Override
+ public String getTargetName() {
+ return retrieveOption(OPTION_TARGET_NAME);
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
}
diff --git a/camera/core/src/main/java/androidx/camera/core/BaseCamera.java b/camera/core/src/main/java/androidx/camera/core/BaseCamera.java
index ffd84cd..d16224c 100644
--- a/camera/core/src/main/java/androidx/camera/core/BaseCamera.java
+++ b/camera/core/src/main/java/androidx/camera/core/BaseCamera.java
@@ -65,12 +65,8 @@
void removeOnlineUseCase(Collection<BaseUseCase> baseUseCases);
/** Returns the global CameraControl attached to this camera. */
- default CameraControl getCameraControl() {
- return CameraControl.defaultEmptyInstance();
- }
+ CameraControl getCameraControl();
/** Returns an interface to retrieve characteristics of the camera. */
- default CameraInfo getCameraInfo() throws CameraInfoUnavailableException {
- throw new CameraInfoUnavailableException("Camera info not implemented.");
- }
+ CameraInfo getCameraInfo() throws CameraInfoUnavailableException;
}
diff --git a/camera/core/src/main/java/androidx/camera/core/BaseUseCase.java b/camera/core/src/main/java/androidx/camera/core/BaseUseCase.java
index f69ac3a..f1f288b 100644
--- a/camera/core/src/main/java/androidx/camera/core/BaseUseCase.java
+++ b/camera/core/src/main/java/androidx/camera/core/BaseUseCase.java
@@ -411,7 +411,7 @@
protected CameraControl getCameraControl(String cameraId) {
CameraControl cameraControl = mAttachedCameraControlMap.get(cameraId);
if (cameraControl == null) {
- return CameraControl.defaultEmptyInstance();
+ return CameraControl.DEFAULT_EMPTY_INSTANCE;
}
return cameraControl;
}
diff --git a/camera/core/src/main/java/androidx/camera/core/CameraControl.java b/camera/core/src/main/java/androidx/camera/core/CameraControl.java
index 5571e64..00314e1 100644
--- a/camera/core/src/main/java/androidx/camera/core/CameraControl.java
+++ b/camera/core/src/main/java/androidx/camera/core/CameraControl.java
@@ -38,69 +38,6 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
public interface CameraControl {
- /** Returns an instance of CameraControl that does nothing. */
- static CameraControl defaultEmptyInstance() {
- return new CameraControl() {
- @Override
- public void setCropRegion(Rect crop) {
- }
-
- @Override
- public void focus(
- Rect focus,
- Rect metering,
- @Nullable OnFocusCompletedListener listener,
- @Nullable Handler handler) {
- }
-
- @Override
- public FlashMode getFlashMode() {
- return null;
- }
-
- @Override
- public void setFlashMode(FlashMode flashMode) {
- }
-
- @Override
- public void enableTorch(boolean torch) {
- }
-
- @Override
- public boolean isTorchOn() {
- return false;
- }
-
- @Override
- public boolean isFocusLocked() {
- return false;
- }
-
- @Override
- public void triggerAf() {
- }
-
- @Override
- public void triggerAePrecapture() {
- }
-
- @Override
- public void cancelAfAeTrigger(
- boolean cancelAfTrigger, boolean cancelAePrecaptureTrigger) {
- }
-
- @Override
- public SessionConfiguration getControlSessionConfiguration() {
- return SessionConfiguration.defaultEmptySessionConfiguration();
- }
-
- @Override
- public Configuration getSingleRequestImplOptions() {
- return OptionsBundle.emptyBundle();
- }
- };
- }
-
/**
* Set the desired crop region of the sensor to read out for all capture requests.
*
@@ -138,9 +75,7 @@
* @param focus rectangle with dimensions in sensor coordinate frame for focus
* @param metering rectangle with dimensions in sensor coordinate frame for metering
*/
- default void focus(Rect focus, Rect metering) {
- focus(focus, metering, null, null);
- }
+ void focus(Rect focus, Rect metering);
/** Returns the current flash mode. */
FlashMode getFlashMode();
@@ -183,4 +118,65 @@
/** Attaches the common request implementation options to every SINGLE requests. */
Configuration getSingleRequestImplOptions();
+
+ CameraControl DEFAULT_EMPTY_INSTANCE = new CameraControl() {
+ @Override
+ public void setCropRegion(Rect crop) {
+ }
+
+ @Override
+ public void focus(Rect focus, Rect metering, @Nullable OnFocusCompletedListener listener,
+ @Nullable Handler handler) {
+ }
+
+ @Override
+ public void focus(Rect focus, Rect metering) {
+ }
+
+ @Override
+ public FlashMode getFlashMode() {
+ return null;
+ }
+
+ @Override
+ public void setFlashMode(FlashMode flashMode) {
+ }
+
+ @Override
+ public void enableTorch(boolean torch) {
+ }
+
+ @Override
+ public boolean isTorchOn() {
+ return false;
+ }
+
+ @Override
+ public boolean isFocusLocked() {
+ return false;
+ }
+
+ @Override
+ public void triggerAf() {
+ }
+
+ @Override
+ public void triggerAePrecapture() {
+ }
+
+ @Override
+ public void cancelAfAeTrigger(boolean cancelAfTrigger, boolean cancelAePrecaptureTrigger) {
+
+ }
+
+ @Override
+ public SessionConfiguration getControlSessionConfiguration() {
+ return SessionConfiguration.defaultEmptySessionConfiguration();
+ }
+
+ @Override
+ public Configuration getSingleRequestImplOptions() {
+ return OptionsBundle.emptyBundle();
+ }
+ };
}
diff --git a/camera/core/src/main/java/androidx/camera/core/CameraDeviceConfiguration.java b/camera/core/src/main/java/androidx/camera/core/CameraDeviceConfiguration.java
index 819e3be..a009528 100644
--- a/camera/core/src/main/java/androidx/camera/core/CameraDeviceConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/CameraDeviceConfiguration.java
@@ -45,9 +45,7 @@
* configuration.
*/
@Nullable
- default CameraX.LensFacing getLensFacing(@Nullable LensFacing valueIfMissing) {
- return retrieveOption(OPTION_LENS_FACING, valueIfMissing);
- }
+ CameraX.LensFacing getLensFacing(@Nullable LensFacing valueIfMissing);
/**
* Retrieves the lens facing direction for the primary camera to be configured.
@@ -55,9 +53,7 @@
* @return The stored value, if it exists in this configuration.
* @throws IllegalArgumentException if the option does not exist in this configuration.
*/
- default CameraX.LensFacing getLensFacing() {
- return retrieveOption(OPTION_LENS_FACING);
- }
+ CameraX.LensFacing getLensFacing();
// Option Declarations:
// *********************************************************************************************
@@ -80,9 +76,6 @@
* @param lensFacing The direction of the camera's lens.
* @return the current Builder.
*/
- default B setLensFacing(CameraX.LensFacing lensFacing) {
- getMutableConfiguration().insertOption(OPTION_LENS_FACING, lensFacing);
- return builder();
- }
+ B setLensFacing(CameraX.LensFacing lensFacing);
}
}
diff --git a/camera/core/src/main/java/androidx/camera/core/CameraInfo.java b/camera/core/src/main/java/androidx/camera/core/CameraInfo.java
index f7f6a4d..ab4cf7b 100644
--- a/camera/core/src/main/java/androidx/camera/core/CameraInfo.java
+++ b/camera/core/src/main/java/androidx/camera/core/CameraInfo.java
@@ -51,9 +51,7 @@
* @return The sensor orientation in degrees.
* @see Surface#ROTATION_0, the natural orientation of the device.
*/
- default int getSensorRotationDegrees() {
- return getSensorRotationDegrees(Surface.ROTATION_0);
- }
+ int getSensorRotationDegrees();
/**
* Returns the sensor rotation, in degrees, relative to the given rotation value.
diff --git a/camera/core/src/main/java/androidx/camera/core/CheckedSurfaceTexture.java b/camera/core/src/main/java/androidx/camera/core/CheckedSurfaceTexture.java
index 45697fa..4e8813b 100644
--- a/camera/core/src/main/java/androidx/camera/core/CheckedSurfaceTexture.java
+++ b/camera/core/src/main/java/androidx/camera/core/CheckedSurfaceTexture.java
@@ -117,7 +117,7 @@
*/
@Override
public ListenableFuture<Surface> getSurface() {
- SettableFuture<Surface> deferredSurface = SettableFuture.create();
+ final SettableFuture<Surface> deferredSurface = SettableFuture.create();
Runnable checkAndSetRunnable =
new Runnable() {
@Override
diff --git a/camera/core/src/main/java/androidx/camera/core/Configuration.java b/camera/core/src/main/java/androidx/camera/core/Configuration.java
index a17fe70..b75cb22 100644
--- a/camera/core/src/main/java/androidx/camera/core/Configuration.java
+++ b/camera/core/src/main/java/androidx/camera/core/Configuration.java
@@ -146,9 +146,7 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Override
- default boolean containsOption(Option<?> id) {
- return getConfiguration().containsOption(id);
- }
+ boolean containsOption(Option<?> id);
/**
* {@inheritDoc}
@@ -158,9 +156,7 @@
@RestrictTo(Scope.LIBRARY_GROUP)
@Override
@Nullable
- default <ValueT> ValueT retrieveOption(Option<ValueT> id) {
- return getConfiguration().retrieveOption(id);
- }
+ <ValueT> ValueT retrieveOption(Option<ValueT> id);
/**
* {@inheritDoc}
@@ -170,9 +166,7 @@
@RestrictTo(Scope.LIBRARY_GROUP)
@Override
@Nullable
- default <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
- return getConfiguration().retrieveOption(id, valueIfMissing);
- }
+ <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing);
/**
* {@inheritDoc}
@@ -181,9 +175,7 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Override
- default void findOptions(String idStem, OptionMatcher matcher) {
- getConfiguration().findOptions(idStem, matcher);
- }
+ void findOptions(String idStem, OptionMatcher matcher);
/**
* {@inheritDoc}
@@ -192,9 +184,8 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Override
- default Set<Option<?>> listOptions() {
- return getConfiguration().listOptions();
- }
+ Set<Option<?>> listOptions();
+
}
/**
@@ -233,10 +224,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default <ValueT> T insertOption(Option<ValueT> opt, ValueT value) {
- getMutableConfiguration().insertOption(opt, value);
- return builder();
- }
+ <ValueT> T insertOption(Option<ValueT> opt, ValueT value);
/**
* Removes an option from the configuration if it exists.
@@ -249,10 +237,7 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
- default <ValueT> T removeOption(Option<ValueT> opt) {
- getMutableConfiguration().removeOption(opt);
- return builder();
- }
+ <ValueT> T removeOption(Option<ValueT> opt);
/**
* Creates an immutable {@link Configuration} object from the current state of this builder.
diff --git a/camera/core/src/main/java/androidx/camera/core/DeferrableSurfaces.java b/camera/core/src/main/java/androidx/camera/core/DeferrableSurfaces.java
index ae0d86d..2c48b1d 100644
--- a/camera/core/src/main/java/androidx/camera/core/DeferrableSurfaces.java
+++ b/camera/core/src/main/java/androidx/camera/core/DeferrableSurfaces.java
@@ -67,7 +67,7 @@
surfaces.removeAll(Collections.singleton(null));
return Collections.unmodifiableList(surfaces);
} catch (InterruptedException | ExecutionException e) {
- return Collections.unmodifiableList(Collections.emptyList());
+ return Collections.unmodifiableList(Collections.<Surface>emptyList());
}
}
@@ -91,7 +91,7 @@
surfaces.removeAll(Collections.singleton(null));
return Collections.unmodifiableSet(surfaces);
} catch (InterruptedException | ExecutionException e) {
- return Collections.unmodifiableSet(Collections.emptySet());
+ return Collections.unmodifiableSet(Collections.<Surface>emptySet());
}
}
}
diff --git a/camera/core/src/main/java/androidx/camera/core/ErrorHandler.java b/camera/core/src/main/java/androidx/camera/core/ErrorHandler.java
index 5f25c6f..e4438fb 100644
--- a/camera/core/src/main/java/androidx/camera/core/ErrorHandler.java
+++ b/camera/core/src/main/java/androidx/camera/core/ErrorHandler.java
@@ -49,9 +49,9 @@
* @param error the type of error that occurred
* @param message detailed message of the error condition
*/
- void postError(ErrorCode error, String message) {
+ void postError(final ErrorCode error, final String message) {
synchronized (mErrorLock) {
- ErrorListener listenerReference = mListener;
+ final ErrorListener listenerReference = mListener;
mHandler.post(new Runnable() {
@Override
public void run() {
diff --git a/camera/core/src/main/java/androidx/camera/core/ImageAnalysisUseCaseConfiguration.java b/camera/core/src/main/java/androidx/camera/core/ImageAnalysisUseCaseConfiguration.java
index bb64c26..58dd3eb9 100644
--- a/camera/core/src/main/java/androidx/camera/core/ImageAnalysisUseCaseConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/ImageAnalysisUseCaseConfiguration.java
@@ -17,6 +17,8 @@
package androidx.camera.core;
import android.media.ImageReader;
+import android.os.Handler;
+import android.util.Rational;
import android.util.Size;
import androidx.annotation.Nullable;
@@ -24,6 +26,9 @@
import androidx.annotation.RestrictTo.Scope;
import androidx.camera.core.ImageAnalysisUseCase.ImageReaderMode;
+import java.util.Set;
+import java.util.UUID;
+
/** Configuration for an image analysis use case. */
public final class ImageAnalysisUseCaseConfiguration
implements UseCaseConfiguration<ImageAnalysisUseCase>,
@@ -262,5 +267,307 @@
public ImageAnalysisUseCaseConfiguration build() {
return new ImageAnalysisUseCaseConfiguration(OptionsBundle.from(mMutableConfig));
}
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // Implementations of TargetConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetClass(Class<ImageAnalysisUseCase> targetClass) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetName(String targetName) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
+ return builder();
+ }
+
+ // Implementations of CameraDeviceConfiguration.Builder default methods
+
+ @Override
+ public Builder setLensFacing(CameraX.LensFacing lensFacing) {
+ getMutableConfiguration().insertOption(OPTION_LENS_FACING, lensFacing);
+ return builder();
+ }
+
+ // Implementations of ImageOutputConfiguration.Builder default methods
+
+ @Override
+ public Builder setTargetAspectRatio(Rational aspectRatio) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetRotation(@RotationValue int rotation) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ROTATION, rotation);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setMaxResolution(Size resolution) {
+ getMutableConfiguration().insertOption(OPTION_MAX_RESOLUTION, resolution);
+ return builder();
+ }
+
+ // Implementations of ThreadConfiguration.Builder default methods
+
+ @Override
+ public Builder setCallbackHandler(Handler handler) {
+ getMutableConfiguration().insertOption(OPTION_CALLBACK_HANDLER, handler);
+ return builder();
+ }
+
+ // Implementations of UseCaseConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setDefaultSessionConfiguration(SessionConfiguration sessionConfig) {
+ getMutableConfiguration().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker) {
+ getMutableConfiguration().insertOption(OPTION_CONFIG_UNPACKER, optionUnpacker);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setSurfaceOccupancyPriority(int priority) {
+ getMutableConfiguration().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // Implementations of TargetConfiguration default methods
+
+ @Override
+ @Nullable
+ public Class<ImageAnalysisUseCase> getTargetClass(
+ @Nullable Class<ImageAnalysisUseCase> valueIfMissing) {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<ImageAnalysisUseCase> storedClass =
+ (Class<ImageAnalysisUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS,
+ valueIfMissing);
+ return storedClass;
+ }
+
+ @Override
+ public Class<ImageAnalysisUseCase> getTargetClass() {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<ImageAnalysisUseCase> storedClass =
+ (Class<ImageAnalysisUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS);
+ return storedClass;
+ }
+
+ @Override
+ @Nullable
+ public String getTargetName(@Nullable String valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
+ }
+
+ @Override
+ public String getTargetName() {
+ return retrieveOption(OPTION_TARGET_NAME);
+ }
+
+ // Implementations of CameraDeviceConfiguration default methods
+
+ @Override
+ @Nullable
+ public CameraX.LensFacing getLensFacing(@Nullable CameraX.LensFacing valueIfMissing) {
+ return retrieveOption(OPTION_LENS_FACING, valueIfMissing);
+ }
+
+ @Override
+ public CameraX.LensFacing getLensFacing() {
+ return retrieveOption(OPTION_LENS_FACING);
+ }
+
+ // Implementations of ImageOutputConfiguration default methods
+
+ @Override
+ @Nullable
+ public Rational getTargetAspectRatio(@Nullable Rational valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO, valueIfMissing);
+ }
+
+ @Override
+ public Rational getTargetAspectRatio() {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation(int valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ROTATION, valueIfMissing);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation() {
+ return retrieveOption(OPTION_TARGET_ROTATION);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution(Size valueIfMissing) {
+ return retrieveOption(OPTION_MAX_RESOLUTION, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution() {
+ return retrieveOption(OPTION_MAX_RESOLUTION);
+ }
+
+ // Implementations of ThreadConfiguration default methods
+
+ @Override
+ @Nullable
+ public Handler getCallbackHandler(@Nullable Handler valueIfMissing) {
+ return retrieveOption(OPTION_CALLBACK_HANDLER, valueIfMissing);
+ }
+
+ @Override
+ public Handler getCallbackHandler() {
+ return retrieveOption(OPTION_CALLBACK_HANDLER);
+ }
+
+ // Implementations of UseCaseConfiguration default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration getDefaultSessionConfiguration(
+ @Nullable SessionConfiguration valueIfMissing) {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration getDefaultSessionConfiguration() {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker(
+ @Nullable SessionConfiguration.OptionUnpacker valueIfMissing) {
+ return retrieveOption(OPTION_CONFIG_UNPACKER, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker() {
+ return retrieveOption(OPTION_CONFIG_UNPACKER);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority(int valueIfMissing) {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority() {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
}
diff --git a/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCase.java b/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCase.java
index cd86a4d..50c2e17 100644
--- a/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCase.java
+++ b/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCase.java
@@ -330,7 +330,7 @@
*/
// Convert the ImageSaver.OnImageSavedListener to ImageCaptureUseCase.OnImageSavedListener
- ImageSaver.OnImageSavedListener imageSavedListenerWrapper =
+ final ImageSaver.OnImageSavedListener imageSavedListenerWrapper =
new ImageSaver.OnImageSavedListener() {
@Override
public void onImageSaved(File file) {
@@ -576,7 +576,7 @@
*
* <p>For example, trigger 3A scan, open torch and check 3A converged if necessary.
*/
- private ListenableFuture<Void> preTakePicture(TakePictureState state) {
+ private ListenableFuture<Void> preTakePicture(final TakePictureState state) {
return FluentFuture.from(getPreCaptureStateIfNeeded())
.transformAsync(
new AsyncFunction<CameraCaptureResult, Boolean>() {
@@ -608,7 +608,7 @@
*
* <p>For example, cancel 3A scan, close torch if necessary.
*/
- private ListenableFuture<Void> postTakePicture(TakePictureState state) {
+ private ListenableFuture<Void> postTakePicture(final TakePictureState state) {
return Futures.submitAsync(
new AsyncCallable<Void>() {
@Override
@@ -768,7 +768,7 @@
applyPixelHdrPlusChangeForCaptureMode(mCaptureMode, builder);
- SettableFuture<Void> future = SettableFuture.create();
+ final SettableFuture<Void> future = SettableFuture.create();
builder.setCameraCaptureCallback(
new CameraCaptureCallback() {
@Override
@@ -846,18 +846,18 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- public interface OnImageCapturedListener {
+ public abstract static class OnImageCapturedListener {
/**
* Callback for when the image has been captured.
*
* <p>The listener is responsible for closing the supplied {@link Image}.
*/
- default void onCaptureSuccess(ImageProxy image, int rotationDegrees) {
+ public void onCaptureSuccess(ImageProxy image, int rotationDegrees) {
image.close();
}
/** Callback for when an error occurred during image capture. */
- default void onError(
+ public void onError(
UseCaseError useCaseError, String message, @Nullable Throwable cause) {
}
}
diff --git a/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCaseConfiguration.java b/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCaseConfiguration.java
index 5d957fc..db2de69 100644
--- a/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCaseConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/ImageCaptureUseCaseConfiguration.java
@@ -16,11 +16,18 @@
package androidx.camera.core;
+import android.os.Handler;
+import android.util.Rational;
+import android.util.Size;
+
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
import androidx.camera.core.ImageCaptureUseCase.CaptureMode;
+import java.util.Set;
+import java.util.UUID;
+
/** Configuration for an image capture use case. */
public final class ImageCaptureUseCaseConfiguration
implements UseCaseConfiguration<ImageCaptureUseCase>,
@@ -191,5 +198,331 @@
getMutableConfiguration().insertOption(OPTION_FLASH_MODE, flashMode);
return builder();
}
+
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // Implementations of TargetConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetClass(Class<ImageCaptureUseCase> targetClass) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetName(String targetName) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
+ return builder();
+ }
+
+ // Implementations of CameraDeviceConfiguration.Builder default methods
+
+ @Override
+ public Builder setLensFacing(CameraX.LensFacing lensFacing) {
+ getMutableConfiguration().insertOption(OPTION_LENS_FACING, lensFacing);
+ return builder();
+ }
+
+ // Implementations of ImageOutputConfiguration.Builder default methods
+
+ @Override
+ public Builder setTargetAspectRatio(Rational aspectRatio) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetRotation(@RotationValue int rotation) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ROTATION, rotation);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetResolution(Size resolution) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_RESOLUTION, resolution);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setMaxResolution(Size resolution) {
+ getMutableConfiguration().insertOption(OPTION_MAX_RESOLUTION, resolution);
+ return builder();
+ }
+
+ // Implementations of ThreadConfiguration.Builder default methods
+
+ @Override
+ public Builder setCallbackHandler(Handler handler) {
+ getMutableConfiguration().insertOption(OPTION_CALLBACK_HANDLER, handler);
+ return builder();
+ }
+
+ // Implementations of UseCaseConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setDefaultSessionConfiguration(SessionConfiguration sessionConfig) {
+ getMutableConfiguration().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker) {
+ getMutableConfiguration().insertOption(OPTION_CONFIG_UNPACKER, optionUnpacker);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setSurfaceOccupancyPriority(int priority) {
+ getMutableConfiguration().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // Implementations of TargetConfiguration default methods
+
+ @Override
+ @Nullable
+ public Class<ImageCaptureUseCase> getTargetClass(
+ @Nullable Class<ImageCaptureUseCase> valueIfMissing) {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<ImageCaptureUseCase> storedClass =
+ (Class<ImageCaptureUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS,
+ valueIfMissing);
+ return storedClass;
+ }
+
+ @Override
+ public Class<ImageCaptureUseCase> getTargetClass() {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<ImageCaptureUseCase> storedClass =
+ (Class<ImageCaptureUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS);
+ return storedClass;
+ }
+
+ @Override
+ @Nullable
+ public String getTargetName(@Nullable String valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
+ }
+
+ @Override
+ public String getTargetName() {
+ return retrieveOption(OPTION_TARGET_NAME);
+ }
+
+ // Implementations of CameraDeviceConfiguration default methods
+
+ @Override
+ @Nullable
+ public CameraX.LensFacing getLensFacing(@Nullable CameraX.LensFacing valueIfMissing) {
+ return retrieveOption(OPTION_LENS_FACING, valueIfMissing);
+ }
+
+ @Override
+ public CameraX.LensFacing getLensFacing() {
+ return retrieveOption(OPTION_LENS_FACING);
+ }
+
+ // Implementations of ImageOutputConfiguration default methods
+
+ @Override
+ @Nullable
+ public Rational getTargetAspectRatio(@Nullable Rational valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO, valueIfMissing);
+ }
+
+ @Override
+ public Rational getTargetAspectRatio() {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation(int valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ROTATION, valueIfMissing);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation() {
+ return retrieveOption(OPTION_TARGET_ROTATION);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getTargetResolution(Size valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_RESOLUTION, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getTargetResolution() {
+ return retrieveOption(OPTION_TARGET_RESOLUTION);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution(Size valueIfMissing) {
+ return retrieveOption(OPTION_MAX_RESOLUTION, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution() {
+ return retrieveOption(OPTION_MAX_RESOLUTION);
+ }
+
+ // Implementations of ThreadConfiguration default methods
+
+ @Override
+ @Nullable
+ public Handler getCallbackHandler(@Nullable Handler valueIfMissing) {
+ return retrieveOption(OPTION_CALLBACK_HANDLER, valueIfMissing);
+ }
+
+ @Override
+ public Handler getCallbackHandler() {
+ return retrieveOption(OPTION_CALLBACK_HANDLER);
+ }
+
+ // Implementations of UseCaseConfiguration default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration getDefaultSessionConfiguration(
+ @Nullable SessionConfiguration valueIfMissing) {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration getDefaultSessionConfiguration() {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker(
+ @Nullable SessionConfiguration.OptionUnpacker valueIfMissing) {
+ return retrieveOption(OPTION_CONFIG_UNPACKER, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker() {
+ return retrieveOption(OPTION_CONFIG_UNPACKER);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority(int valueIfMissing) {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority() {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
+
}
diff --git a/camera/core/src/main/java/androidx/camera/core/ImageOutputConfiguration.java b/camera/core/src/main/java/androidx/camera/core/ImageOutputConfiguration.java
index 3f48c16..f4edcf4 100644
--- a/camera/core/src/main/java/androidx/camera/core/ImageOutputConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/ImageOutputConfiguration.java
@@ -82,9 +82,7 @@
* configuration.
*/
@Nullable
- default Rational getTargetAspectRatio(@Nullable Rational valueIfMissing) {
- return retrieveOption(OPTION_TARGET_ASPECT_RATIO, valueIfMissing);
- }
+ Rational getTargetAspectRatio(@Nullable Rational valueIfMissing);
/**
* Retrieves the aspect ratio of the target intending to use images from this configuration.
@@ -96,9 +94,7 @@
* @return The stored value, if it exists in this configuration.
* @throws IllegalArgumentException if the option does not exist in this configuration.
*/
- default Rational getTargetAspectRatio() {
- return retrieveOption(OPTION_TARGET_ASPECT_RATIO);
- }
+ Rational getTargetAspectRatio();
/**
* Retrieves the rotation of the target intending to use images from this configuration.
@@ -112,9 +108,7 @@
* configuration.
*/
@RotationValue
- default int getTargetRotation(int valueIfMissing) {
- return retrieveOption(OPTION_TARGET_ROTATION, valueIfMissing);
- }
+ int getTargetRotation(int valueIfMissing);
/**
* Retrieves the rotation of the target intending to use images from this configuration.
@@ -127,9 +121,7 @@
* @throws IllegalArgumentException if the option does not exist in this configuration.
*/
@RotationValue
- default int getTargetRotation() {
- return retrieveOption(OPTION_TARGET_ROTATION);
- }
+ int getTargetRotation();
/**
* Retrieves the resolution of the target intending to use from this configuration.
@@ -140,9 +132,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default Size getTargetResolution(Size valueIfMissing) {
- return retrieveOption(OPTION_TARGET_RESOLUTION, valueIfMissing);
- }
+ Size getTargetResolution(Size valueIfMissing);
/**
* Retrieves the resolution of the target intending to use from this configuration.
@@ -152,9 +142,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default Size getTargetResolution() {
- return retrieveOption(OPTION_TARGET_RESOLUTION);
- }
+ Size getTargetResolution();
// Option Declarations:
// *********************************************************************************************
@@ -169,9 +157,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default Size getMaxResolution(Size valueIfMissing) {
- return retrieveOption(OPTION_MAX_RESOLUTION, valueIfMissing);
- }
+ Size getMaxResolution(Size valueIfMissing);
/**
* Retrieves the max resolution limitation of the target intending to use from this
@@ -182,9 +168,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default Size getMaxResolution() {
- return retrieveOption(OPTION_MAX_RESOLUTION);
- }
+ Size getMaxResolution();
/**
* Builder for a {@link ImageOutputConfiguration}.
@@ -206,10 +190,7 @@
* height.
* @return The current Builder.
*/
- default T setTargetAspectRatio(Rational aspectRatio) {
- getMutableConfiguration().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
- return builder();
- }
+ T setTargetAspectRatio(Rational aspectRatio);
/**
* Sets the rotation of the intended target for images from this configuration.
@@ -221,10 +202,7 @@
* @param rotation The rotation of the intended target.
* @return The current Builder.
*/
- default T setTargetRotation(@RotationValue int rotation) {
- getMutableConfiguration().insertOption(OPTION_TARGET_ROTATION, rotation);
- return builder();
- }
+ T setTargetRotation(@RotationValue int rotation);
/**
* Sets the resolution of the intended target from this configuration.
@@ -234,10 +212,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default T setTargetResolution(Size resolution) {
- getMutableConfiguration().insertOption(OPTION_TARGET_RESOLUTION, resolution);
- return builder();
- }
+ T setTargetResolution(Size resolution);
/**
* Sets the max resolution limitation of the intended target from this configuration.
@@ -248,10 +223,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default T setMaxResolution(Size resolution) {
- getMutableConfiguration().insertOption(OPTION_MAX_RESOLUTION, resolution);
- return builder();
- }
+ T setMaxResolution(Size resolution);
}
/**
diff --git a/camera/core/src/main/java/androidx/camera/core/ImageProxyDownsampler.java b/camera/core/src/main/java/androidx/camera/core/ImageProxyDownsampler.java
index dfaaa1a..0bbbf5b 100644
--- a/camera/core/src/main/java/androidx/camera/core/ImageProxyDownsampler.java
+++ b/camera/core/src/main/java/androidx/camera/core/ImageProxyDownsampler.java
@@ -187,7 +187,7 @@
}
private static ImageProxy.PlaneProxy createPlaneProxy(
- int rowStride, int pixelStride, byte[] data) {
+ final int rowStride, final int pixelStride, final byte[] data) {
return new ImageProxy.PlaneProxy() {
final ByteBuffer mBuffer = ByteBuffer.wrap(data);
diff --git a/camera/core/src/main/java/androidx/camera/core/ImageSaver.java b/camera/core/src/main/java/androidx/camera/core/ImageSaver.java
index d47e0cf..778afad 100644
--- a/camera/core/src/main/java/androidx/camera/core/ImageSaver.java
+++ b/camera/core/src/main/java/androidx/camera/core/ImageSaver.java
@@ -115,7 +115,8 @@
});
}
- private void postError(SaveError saveError, String message, @Nullable Throwable cause) {
+ private void postError(final SaveError saveError, final String message,
+ @Nullable final Throwable cause) {
mHandler.post(new Runnable() {
@Override
public void run() {
diff --git a/camera/core/src/main/java/androidx/camera/core/OnFocusCompletedListener.java b/camera/core/src/main/java/androidx/camera/core/OnFocusCompletedListener.java
index d15b18b..b068b29 100644
--- a/camera/core/src/main/java/androidx/camera/core/OnFocusCompletedListener.java
+++ b/camera/core/src/main/java/androidx/camera/core/OnFocusCompletedListener.java
@@ -21,14 +21,11 @@
/** Listener called when focus scan has completed. */
public interface OnFocusCompletedListener {
/** Callback when focus has been locked. */
- default void onFocusLocked(Rect afRect) {
- }
+ void onFocusLocked(Rect afRect);
/** Callback when unable to acquire focus. */
- default void onFocusUnableToLock(Rect afRect) {
- }
+ void onFocusUnableToLock(Rect afRect);
/** Callback when timeout is reached and af state haven't settled. */
- default void onFocusTimedOut(Rect afRect) {
- }
+ void onFocusTimedOut(Rect afRect);
}
diff --git a/camera/core/src/main/java/androidx/camera/core/SessionConfiguration.java b/camera/core/src/main/java/androidx/camera/core/SessionConfiguration.java
index 2684add..7e758c3 100644
--- a/camera/core/src/main/java/androidx/camera/core/SessionConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/SessionConfiguration.java
@@ -80,7 +80,7 @@
/** Returns an instance of a session configuration with minimal configurations. */
public static SessionConfiguration defaultEmptySessionConfiguration() {
return new SessionConfiguration(
- new ArrayList<>(),
+ new ArrayList<DeferrableSurface>(),
CameraDeviceStateCallbacks.createNoOpCallback(),
CameraCaptureSessionStateCallbacks.createNoOpCallback(),
new CaptureRequestConfiguration.Builder().build());
diff --git a/camera/core/src/main/java/androidx/camera/core/TargetConfiguration.java b/camera/core/src/main/java/androidx/camera/core/TargetConfiguration.java
index 55aa885..eed17f6 100644
--- a/camera/core/src/main/java/androidx/camera/core/TargetConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/TargetConfiguration.java
@@ -20,8 +20,6 @@
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
-import java.util.UUID;
-
/**
* Configuration containing options used to identify the target class and object being configured.
*
@@ -54,12 +52,7 @@
* configuration.
*/
@Nullable
- default Class<T> getTargetClass(@Nullable Class<T> valueIfMissing) {
- @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
- Class<T> storedClass = (Class<T>) retrieveOption(OPTION_TARGET_CLASS,
- valueIfMissing);
- return storedClass;
- }
+ Class<T> getTargetClass(@Nullable Class<T> valueIfMissing);
/**
* Retrieves the class of the object being configured.
@@ -67,11 +60,7 @@
* @return The stored value, if it exists in this configuration.
* @throws IllegalArgumentException if the option does not exist in this configuration.
*/
- default Class<T> getTargetClass() {
- @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
- Class<T> storedClass = (Class<T>) retrieveOption(OPTION_TARGET_CLASS);
- return storedClass;
- }
+ Class<T> getTargetClass();
/**
* Retrieves the name of the target object being configured.
@@ -84,9 +73,7 @@
* configuration.
*/
@Nullable
- default String getTargetName(@Nullable String valueIfMissing) {
- return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
- }
+ String getTargetName(@Nullable String valueIfMissing);
// Option Declarations:
// *********************************************************************************************
@@ -100,9 +87,7 @@
* @return The stored value, if it exists in this configuration.
* @throws IllegalArgumentException if the option does not exist in this configuration.
*/
- default String getTargetName() {
- return retrieveOption(OPTION_TARGET_NAME);
- }
+ String getTargetName();
/**
* Builder for a {@link TargetConfiguration}.
@@ -129,17 +114,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default B setTargetClass(Class<T> targetClass) {
- getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
-
- // If no name is set yet, then generate a unique name
- if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
- String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
- setTargetName(targetName);
- }
-
- return builder();
- }
+ B setTargetClass(Class<T> targetClass);
/**
* Sets the name of the target object being configured.
@@ -151,9 +126,6 @@
* configured.
* @return the current Builder.
*/
- default B setTargetName(String targetName) {
- getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
- return builder();
- }
+ B setTargetName(String targetName);
}
}
diff --git a/camera/core/src/main/java/androidx/camera/core/ThreadConfiguration.java b/camera/core/src/main/java/androidx/camera/core/ThreadConfiguration.java
index 14026fe..d9ba5a2 100644
--- a/camera/core/src/main/java/androidx/camera/core/ThreadConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/ThreadConfiguration.java
@@ -42,9 +42,7 @@
* configuration.
*/
@Nullable
- default Handler getCallbackHandler(@Nullable Handler valueIfMissing) {
- return retrieveOption(OPTION_CALLBACK_HANDLER, valueIfMissing);
- }
+ Handler getCallbackHandler(@Nullable Handler valueIfMissing);
/**
* Returns the default handler that will be used for callbacks.
@@ -52,9 +50,7 @@
* @return The stored value, if it exists in this configuration.
* @throws IllegalArgumentException if the option does not exist in this configuration.
*/
- default Handler getCallbackHandler() {
- return retrieveOption(OPTION_CALLBACK_HANDLER);
- }
+ Handler getCallbackHandler();
// Option Declarations:
// *********************************************************************************************
@@ -83,9 +79,6 @@
* @param handler The handler which will be used to post callbacks.
* @return the current Builder.
*/
- default B setCallbackHandler(Handler handler) {
- getMutableConfiguration().insertOption(OPTION_CALLBACK_HANDLER, handler);
- return builder();
- }
+ B setCallbackHandler(Handler handler);
}
}
diff --git a/camera/core/src/main/java/androidx/camera/core/UseCaseConfiguration.java b/camera/core/src/main/java/androidx/camera/core/UseCaseConfiguration.java
index b31de98..996f3aa8 100644
--- a/camera/core/src/main/java/androidx/camera/core/UseCaseConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/UseCaseConfiguration.java
@@ -69,10 +69,8 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
- default SessionConfiguration getDefaultSessionConfiguration(
- @Nullable SessionConfiguration valueIfMissing) {
- return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG, valueIfMissing);
- }
+ SessionConfiguration getDefaultSessionConfiguration(
+ @Nullable SessionConfiguration valueIfMissing);
/**
* Retrieves the default session configuration for this use case.
@@ -85,9 +83,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default SessionConfiguration getDefaultSessionConfiguration() {
- return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG);
- }
+ SessionConfiguration getDefaultSessionConfiguration();
/**
* Retrieves the {@link SessionConfiguration.OptionUnpacker} for this use case.
@@ -104,10 +100,8 @@
*/
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
- default SessionConfiguration.OptionUnpacker getOptionUnpacker(
- @Nullable SessionConfiguration.OptionUnpacker valueIfMissing) {
- return retrieveOption(OPTION_CONFIG_UNPACKER, valueIfMissing);
- }
+ SessionConfiguration.OptionUnpacker getOptionUnpacker(
+ @Nullable SessionConfiguration.OptionUnpacker valueIfMissing);
/**
* Retrieves the {@link SessionConfiguration.OptionUnpacker} for this use case.
@@ -122,9 +116,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default SessionConfiguration.OptionUnpacker getOptionUnpacker() {
- return retrieveOption(OPTION_CONFIG_UNPACKER);
- }
+ SessionConfiguration.OptionUnpacker getOptionUnpacker();
// Option Declarations:
// *********************************************************************************************
@@ -139,9 +131,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default int getSurfaceOccupancyPriority(int valueIfMissing) {
- return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, valueIfMissing);
- }
+ int getSurfaceOccupancyPriority(int valueIfMissing);
/**
* Retrieves the surface occupancy priority of the target intending to use from this
@@ -152,9 +142,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default int getSurfaceOccupancyPriority() {
- return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
- }
+ int getSurfaceOccupancyPriority();
/**
* Builder for a {@link UseCaseConfiguration}.
@@ -176,10 +164,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default B setDefaultSessionConfiguration(SessionConfiguration sessionConfig) {
- getMutableConfiguration().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
- return builder();
- }
+ B setDefaultSessionConfiguration(SessionConfiguration sessionConfig);
/**
* Sets the Option Unpacker for translating this configuration into a {@link
@@ -193,10 +178,7 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default B setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker) {
- getMutableConfiguration().insertOption(OPTION_CONFIG_UNPACKER, optionUnpacker);
- return builder();
- }
+ B setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker);
/**
* Sets the surface occupancy priority of the intended target from this configuration.
@@ -212,9 +194,6 @@
* @hide
*/
@RestrictTo(Scope.LIBRARY_GROUP)
- default B setSurfaceOccupancyPriority(int priority) {
- getMutableConfiguration().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
- return builder();
- }
+ B setSurfaceOccupancyPriority(int priority);
}
}
diff --git a/camera/core/src/main/java/androidx/camera/core/UseCaseGroupLifecycleController.java b/camera/core/src/main/java/androidx/camera/core/UseCaseGroupLifecycleController.java
index b977518..4c9fcbe 100644
--- a/camera/core/src/main/java/androidx/camera/core/UseCaseGroupLifecycleController.java
+++ b/camera/core/src/main/java/androidx/camera/core/UseCaseGroupLifecycleController.java
@@ -17,13 +17,14 @@
package androidx.camera.core;
import androidx.annotation.GuardedBy;
-import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Lifecycle.State;
+import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.OnLifecycleEvent;
/** A {@link UseCaseGroup} whose starting and stopping is controlled by a {@link Lifecycle}. */
-final class UseCaseGroupLifecycleController implements DefaultLifecycleObserver {
+final class UseCaseGroupLifecycleController implements LifecycleObserver {
private final Object mUseCaseGroupLock = new Object();
@GuardedBy("mUseCaseGroupLock")
@@ -44,21 +45,21 @@
lifecycle.addObserver(this);
}
- @Override
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart(LifecycleOwner lifecycleOwner) {
synchronized (mUseCaseGroupLock) {
mUseCaseGroup.start();
}
}
- @Override
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop(LifecycleOwner lifecycleOwner) {
synchronized (mUseCaseGroupLock) {
mUseCaseGroup.stop();
}
}
- @Override
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(LifecycleOwner lifecycleOwner) {
synchronized (mUseCaseGroupLock) {
mUseCaseGroup.clear();
diff --git a/camera/core/src/main/java/androidx/camera/core/UseCaseGroupRepository.java b/camera/core/src/main/java/androidx/camera/core/UseCaseGroupRepository.java
index 2291a75..f18df0b 100644
--- a/camera/core/src/main/java/androidx/camera/core/UseCaseGroupRepository.java
+++ b/camera/core/src/main/java/androidx/camera/core/UseCaseGroupRepository.java
@@ -18,9 +18,11 @@
import androidx.annotation.GuardedBy;
import androidx.annotation.VisibleForTesting;
-import androidx.lifecycle.DefaultLifecycleObserver;
+import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Lifecycle.State;
+import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.OnLifecycleEvent;
import java.util.Collection;
import java.util.Collections;
@@ -93,9 +95,9 @@
*
* @param lifecycleOwner to associate with the group
* @return a new {@link UseCaseGroupLifecycleController}
- * @throws IllegalArgumentException if the {@link android.arch.lifecycle.Lifecycle} of
+ * @throws IllegalArgumentException if the {@link androidx.lifecycle.Lifecycle} of
* lifecycleOwner is already
- * {@link android.arch.lifecycle.Lifecycle.State.DESTROYED}.
+ * {@link androidx.lifecycle.Lifecycle.State.DESTROYED}.
*/
private UseCaseGroupLifecycleController createUseCaseGroup(LifecycleOwner lifecycleOwner) {
if (lifecycleOwner.getLifecycle().getCurrentState() == State.DESTROYED) {
@@ -114,15 +116,15 @@
}
/**
- * Creates a {@link DefaultLifecycleObserver} which removes any {@link
+ * Creates a {@link LifecycleObserver} which removes any {@link
* UseCaseGroupLifecycleController} associated with a {@link LifecycleOwner} from this
* repository when that lifecycle is destroyed.
*
- * @return a new {@link DefaultLifecycleObserver}
+ * @return a new {@link LifecycleObserver}
*/
- private DefaultLifecycleObserver createRemoveOnDestroyObserver() {
- return new DefaultLifecycleObserver() {
- @Override
+ private LifecycleObserver createRemoveOnDestroyObserver() {
+ return new LifecycleObserver() {
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(LifecycleOwner lifecycleOwner) {
synchronized (mUseCasesLock) {
mLifecycleToUseCaseGroupControllerMap.remove(lifecycleOwner);
diff --git a/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCase.java b/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCase.java
index 32565a9..35c17cf 100644
--- a/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCase.java
+++ b/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCase.java
@@ -254,7 +254,7 @@
* @param metadata Metadata to save with the recorded video
*/
public void startRecording(
- File saveLocation, OnVideoSavedListener listener, Metadata metadata) {
+ final File saveLocation, final OnVideoSavedListener listener, Metadata metadata) {
Log.i(TAG, "startRecording");
if (!mEndOfAudioVideoSignal.get()) {
diff --git a/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCaseConfiguration.java b/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCaseConfiguration.java
index 6bed1a98..20b8ab3d 100644
--- a/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCaseConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/VideoCaptureUseCaseConfiguration.java
@@ -16,9 +16,17 @@
package androidx.camera.core;
+import android.os.Handler;
+import android.util.Rational;
+import android.util.Size;
+
+import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
+import java.util.Set;
+import java.util.UUID;
+
/** Configuration for a video capture use case. */
public final class VideoCaptureUseCaseConfiguration
implements UseCaseConfiguration<VideoCaptureUseCase>,
@@ -409,5 +417,330 @@
getMutableConfiguration().insertOption(OPTION_AUDIO_MIN_BUFFER_SIZE, minBufferSize);
return builder();
}
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // Implementations of TargetConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetClass(Class<VideoCaptureUseCase> targetClass) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetName(String targetName) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
+ return builder();
+ }
+
+ // Implementations of CameraDeviceConfiguration.Builder default methods
+
+ @Override
+ public Builder setLensFacing(CameraX.LensFacing lensFacing) {
+ getMutableConfiguration().insertOption(OPTION_LENS_FACING, lensFacing);
+ return builder();
+ }
+
+ // Implementations of ImageOutputConfiguration.Builder default methods
+
+ @Override
+ public Builder setTargetAspectRatio(Rational aspectRatio) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetRotation(@RotationValue int rotation) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ROTATION, rotation);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetResolution(Size resolution) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_RESOLUTION, resolution);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setMaxResolution(Size resolution) {
+ getMutableConfiguration().insertOption(OPTION_MAX_RESOLUTION, resolution);
+ return builder();
+ }
+
+ // Implementations of ThreadConfiguration.Builder default methods
+
+ @Override
+ public Builder setCallbackHandler(Handler handler) {
+ getMutableConfiguration().insertOption(OPTION_CALLBACK_HANDLER, handler);
+ return builder();
+ }
+
+ // Implementations of UseCaseConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setDefaultSessionConfiguration(SessionConfiguration sessionConfig) {
+ getMutableConfiguration().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker) {
+ getMutableConfiguration().insertOption(OPTION_CONFIG_UNPACKER, optionUnpacker);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setSurfaceOccupancyPriority(int priority) {
+ getMutableConfiguration().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // Implementations of TargetConfiguration default methods
+
+ @Override
+ @Nullable
+ public Class<VideoCaptureUseCase> getTargetClass(
+ @Nullable Class<VideoCaptureUseCase> valueIfMissing) {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<VideoCaptureUseCase> storedClass =
+ (Class<VideoCaptureUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS,
+ valueIfMissing);
+ return storedClass;
+ }
+
+ @Override
+ public Class<VideoCaptureUseCase> getTargetClass() {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<VideoCaptureUseCase> storedClass =
+ (Class<VideoCaptureUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS);
+ return storedClass;
+ }
+
+ @Override
+ @Nullable
+ public String getTargetName(@Nullable String valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
+ }
+
+ @Override
+ public String getTargetName() {
+ return retrieveOption(OPTION_TARGET_NAME);
+ }
+
+ // Implementations of CameraDeviceConfiguration default methods
+
+ @Override
+ @Nullable
+ public CameraX.LensFacing getLensFacing(@Nullable CameraX.LensFacing valueIfMissing) {
+ return retrieveOption(OPTION_LENS_FACING, valueIfMissing);
+ }
+
+ @Override
+ public CameraX.LensFacing getLensFacing() {
+ return retrieveOption(OPTION_LENS_FACING);
+ }
+
+ // Implementations of ImageOutputConfiguration default methods
+
+ @Override
+ @Nullable
+ public Rational getTargetAspectRatio(@Nullable Rational valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO, valueIfMissing);
+ }
+
+ @Override
+ public Rational getTargetAspectRatio() {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation(int valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ROTATION, valueIfMissing);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation() {
+ return retrieveOption(OPTION_TARGET_ROTATION);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getTargetResolution(Size valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_RESOLUTION, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getTargetResolution() {
+ return retrieveOption(OPTION_TARGET_RESOLUTION);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution(Size valueIfMissing) {
+ return retrieveOption(OPTION_MAX_RESOLUTION, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution() {
+ return retrieveOption(OPTION_MAX_RESOLUTION);
+ }
+
+ // Implementations of ThreadConfiguration default methods
+
+ @Override
+ @Nullable
+ public Handler getCallbackHandler(@Nullable Handler valueIfMissing) {
+ return retrieveOption(OPTION_CALLBACK_HANDLER, valueIfMissing);
+ }
+
+ @Override
+ public Handler getCallbackHandler() {
+ return retrieveOption(OPTION_CALLBACK_HANDLER);
+ }
+
+ // Implementations of UseCaseConfiguration default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration getDefaultSessionConfiguration(
+ @Nullable SessionConfiguration valueIfMissing) {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration getDefaultSessionConfiguration() {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker(
+ @Nullable SessionConfiguration.OptionUnpacker valueIfMissing) {
+ return retrieveOption(OPTION_CONFIG_UNPACKER, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker() {
+ return retrieveOption(OPTION_CONFIG_UNPACKER);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority(int valueIfMissing) {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority() {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
+
}
diff --git a/camera/core/src/main/java/androidx/camera/core/ViewFinderUseCaseConfiguration.java b/camera/core/src/main/java/androidx/camera/core/ViewFinderUseCaseConfiguration.java
index 116fe38..a42065a 100644
--- a/camera/core/src/main/java/androidx/camera/core/ViewFinderUseCaseConfiguration.java
+++ b/camera/core/src/main/java/androidx/camera/core/ViewFinderUseCaseConfiguration.java
@@ -16,11 +16,17 @@
package androidx.camera.core;
+import android.os.Handler;
+import android.util.Rational;
import android.util.Size;
+import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
+import java.util.Set;
+import java.util.UUID;
+
/** Configuration for an image capture use case. */
public final class ViewFinderUseCaseConfiguration
implements UseCaseConfiguration<ViewFinderUseCase>,
@@ -157,5 +163,306 @@
public ViewFinderUseCaseConfiguration build() {
return new ViewFinderUseCaseConfiguration(OptionsBundle.from(mMutableConfig));
}
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // Implementations of TargetConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setTargetClass(Class<ViewFinderUseCase> targetClass) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetName(String targetName) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
+ return builder();
+ }
+
+ // Implementations of CameraDeviceConfiguration.Builder default methods
+
+ @Override
+ public Builder setLensFacing(CameraX.LensFacing lensFacing) {
+ getMutableConfiguration().insertOption(OPTION_LENS_FACING, lensFacing);
+ return builder();
+ }
+
+ // Implementations of ImageOutputConfiguration.Builder default methods
+
+ @Override
+ public Builder setTargetAspectRatio(Rational aspectRatio) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ASPECT_RATIO, aspectRatio);
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetRotation(@RotationValue int rotation) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_ROTATION, rotation);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setMaxResolution(Size resolution) {
+ getMutableConfiguration().insertOption(OPTION_MAX_RESOLUTION, resolution);
+ return builder();
+ }
+
+ // Implementations of ThreadConfiguration.Builder default methods
+
+ @Override
+ public Builder setCallbackHandler(Handler handler) {
+ getMutableConfiguration().insertOption(OPTION_CALLBACK_HANDLER, handler);
+ return builder();
+ }
+
+ // Implementations of UseCaseConfiguration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setDefaultSessionConfiguration(SessionConfiguration sessionConfig) {
+ getMutableConfiguration().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker) {
+ getMutableConfiguration().insertOption(OPTION_CONFIG_UNPACKER, optionUnpacker);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Builder setSurfaceOccupancyPriority(int priority) {
+ getMutableConfiguration().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // Implementations of TargetConfiguration default methods
+
+ @Override
+ @Nullable
+ public Class<ViewFinderUseCase> getTargetClass(
+ @Nullable Class<ViewFinderUseCase> valueIfMissing) {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<ViewFinderUseCase> storedClass = (Class<ViewFinderUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS,
+ valueIfMissing);
+ return storedClass;
+ }
+
+ @Override
+ public Class<ViewFinderUseCase> getTargetClass() {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<ViewFinderUseCase> storedClass = (Class<ViewFinderUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS);
+ return storedClass;
+ }
+
+ @Override
+ @Nullable
+ public String getTargetName(@Nullable String valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
+ }
+
+ @Override
+ public String getTargetName() {
+ return retrieveOption(OPTION_TARGET_NAME);
+ }
+
+ // Implementations of CameraDeviceConfiguration default methods
+
+ @Override
+ @Nullable
+ public CameraX.LensFacing getLensFacing(@Nullable CameraX.LensFacing valueIfMissing) {
+ return retrieveOption(OPTION_LENS_FACING, valueIfMissing);
+ }
+
+ @Override
+ public CameraX.LensFacing getLensFacing() {
+ return retrieveOption(OPTION_LENS_FACING);
+ }
+
+ // Implementations of ImageOutputConfiguration default methods
+
+ @Override
+ @Nullable
+ public Rational getTargetAspectRatio(@Nullable Rational valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO, valueIfMissing);
+ }
+
+ @Override
+ public Rational getTargetAspectRatio() {
+ return retrieveOption(OPTION_TARGET_ASPECT_RATIO);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation(int valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_ROTATION, valueIfMissing);
+ }
+
+ @Override
+ @RotationValue
+ public int getTargetRotation() {
+ return retrieveOption(OPTION_TARGET_ROTATION);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution(Size valueIfMissing) {
+ return retrieveOption(OPTION_MAX_RESOLUTION, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Size getMaxResolution() {
+ return retrieveOption(OPTION_MAX_RESOLUTION);
+ }
+
+ // Implementations of ThreadConfiguration default methods
+
+ @Override
+ @Nullable
+ public Handler getCallbackHandler(@Nullable Handler valueIfMissing) {
+ return retrieveOption(OPTION_CALLBACK_HANDLER, valueIfMissing);
+ }
+
+ @Override
+ public Handler getCallbackHandler() {
+ return retrieveOption(OPTION_CALLBACK_HANDLER);
+ }
+
+ // Implementations of UseCaseConfiguration default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration getDefaultSessionConfiguration(
+ @Nullable SessionConfiguration valueIfMissing) {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration getDefaultSessionConfiguration() {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker(
+ @Nullable SessionConfiguration.OptionUnpacker valueIfMissing) {
+ return retrieveOption(OPTION_CONFIG_UNPACKER, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker() {
+ return retrieveOption(OPTION_CONFIG_UNPACKER);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority(int valueIfMissing) {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ public int getSurfaceOccupancyPriority() {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
}
diff --git a/camera/testing/src/main/java/androidx/camera/testing/CameraUtil.java b/camera/testing/src/main/java/androidx/camera/testing/CameraUtil.java
index 566e3d2..b4e2c0f 100644
--- a/camera/testing/src/main/java/androidx/camera/testing/CameraUtil.java
+++ b/camera/testing/src/main/java/androidx/camera/testing/CameraUtil.java
@@ -57,7 +57,7 @@
public static CameraDevice getCameraDevice()
throws CameraAccessException, InterruptedException {
// Setup threading required for callback on openCamera()
- HandlerThread handlerThread = new HandlerThread("handler thread");
+ final HandlerThread handlerThread = new HandlerThread("handler thread");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
@@ -73,11 +73,11 @@
// Use an AtomicReference to store the CameraDevice because it is initialized in a lambda.
// This way the AtomicReference itself is effectively final.
- AtomicReference<CameraDevice> cameraDeviceHolder = new AtomicReference<>();
+ final AtomicReference<CameraDevice> cameraDeviceHolder = new AtomicReference<>();
// Open the camera using the CameraManager which returns a valid and open CameraDevice only
// when onOpened() is called.
- CountDownLatch latch = new CountDownLatch(1);
+ final CountDownLatch latch = new CountDownLatch(1);
cameraManager.openCamera(
cameraName,
new StateCallback() {
diff --git a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java
index a3e5e6a..149ada6 100644
--- a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java
+++ b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java
@@ -26,7 +26,7 @@
/** A fake camera which will not produce any data. */
public class FakeCamera implements BaseCamera {
- private final CameraControl mCameraControl = CameraControl.defaultEmptyInstance();
+ private final CameraControl mCameraControl = CameraControl.DEFAULT_EMPTY_INSTANCE;
private final CameraInfo mCameraInfo;
diff --git a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfo.java b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfo.java
index d9b15d9..8e92b54 100644
--- a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfo.java
+++ b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfo.java
@@ -16,6 +16,8 @@
package androidx.camera.testing.fakes;
+import android.view.Surface;
+
import androidx.annotation.Nullable;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.CameraX.LensFacing;
@@ -50,4 +52,9 @@
public int getSensorRotationDegrees(@RotationValue int relativeRotation) {
return mSensorRotation;
}
+
+ @Override
+ public int getSensorRotationDegrees() {
+ return getSensorRotationDegrees(Surface.ROTATION_0);
+ }
}
diff --git a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeConfiguration.java b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeConfiguration.java
index 416becc..7818126 100644
--- a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeConfiguration.java
+++ b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeConfiguration.java
@@ -16,6 +16,7 @@
package androidx.camera.testing.fakes;
+import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
import androidx.camera.core.Configuration;
@@ -23,6 +24,8 @@
import androidx.camera.core.MutableOptionsBundle;
import androidx.camera.core.OptionsBundle;
+import java.util.Set;
+
/**
* Wrapper for an empty Configuration
*
@@ -65,5 +68,75 @@
public FakeConfiguration build() {
return new FakeConfiguration(OptionsBundle.from(mOptionsBundle));
}
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ /** @hide */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
}
diff --git a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfiguration.java b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfiguration.java
index d2f4af7..9b969d2 100644
--- a/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfiguration.java
+++ b/camera/testing/src/main/java/androidx/camera/testing/fakes/FakeUseCaseConfiguration.java
@@ -16,13 +16,19 @@
package androidx.camera.testing.fakes;
+import androidx.annotation.Nullable;
import androidx.camera.core.CameraDeviceConfiguration;
+import androidx.camera.core.CameraX;
import androidx.camera.core.Configuration;
import androidx.camera.core.MutableConfiguration;
import androidx.camera.core.MutableOptionsBundle;
import androidx.camera.core.OptionsBundle;
+import androidx.camera.core.SessionConfiguration;
import androidx.camera.core.UseCaseConfiguration;
+import java.util.Set;
+import java.util.UUID;
+
/** A fake configuration for {@link FakeUseCase}. */
public class FakeUseCaseConfiguration
implements UseCaseConfiguration<FakeUseCase>, CameraDeviceConfiguration {
@@ -64,5 +70,191 @@
public FakeUseCaseConfiguration build() {
return new FakeUseCaseConfiguration(OptionsBundle.from(mOptionsBundle));
}
+
+ // Start of the default implementation of Configuration.Builder
+ // *****************************************************************************************
+
+ // Implementations of Configuration.Builder default methods
+
+ @Override
+ public <ValueT> Builder insertOption(Option<ValueT> opt, ValueT value) {
+ getMutableConfiguration().insertOption(opt, value);
+ return builder();
+ }
+
+ @Override
+ @Nullable
+ public <ValueT> Builder removeOption(Option<ValueT> opt) {
+ getMutableConfiguration().removeOption(opt);
+ return builder();
+ }
+
+ // Implementations of TargetConfiguration.Builder default methods
+
+ @Override
+ public Builder setTargetClass(Class<FakeUseCase> targetClass) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_CLASS, targetClass);
+
+ // If no name is set yet, then generate a unique name
+ if (null == getMutableConfiguration().retrieveOption(OPTION_TARGET_NAME, null)) {
+ String targetName = targetClass.getCanonicalName() + "-" + UUID.randomUUID();
+ setTargetName(targetName);
+ }
+
+ return builder();
+ }
+
+ @Override
+ public Builder setTargetName(String targetName) {
+ getMutableConfiguration().insertOption(OPTION_TARGET_NAME, targetName);
+ return builder();
+ }
+
+ // Implementations of CameraDeviceConfiguration.Builder default methods
+
+ @Override
+ public Builder setLensFacing(CameraX.LensFacing lensFacing) {
+ getMutableConfiguration().insertOption(OPTION_LENS_FACING, lensFacing);
+ return builder();
+ }
+
+ // Implementations of UseCaseConfiguration.Builder default methods
+
+ @Override
+ public Builder setDefaultSessionConfiguration(SessionConfiguration sessionConfig) {
+ getMutableConfiguration().insertOption(OPTION_DEFAULT_SESSION_CONFIG, sessionConfig);
+ return builder();
+ }
+
+ @Override
+ public Builder setOptionUnpacker(SessionConfiguration.OptionUnpacker optionUnpacker) {
+ getMutableConfiguration().insertOption(OPTION_CONFIG_UNPACKER, optionUnpacker);
+ return builder();
+ }
+
+ @Override
+ public Builder setSurfaceOccupancyPriority(int priority) {
+ getMutableConfiguration().insertOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, priority);
+ return builder();
+ }
+
+ // End of the default implementation of Configuration.Builder
+ // *****************************************************************************************
}
+
+ // Start of the default implementation of Configuration
+ // *********************************************************************************************
+
+ // Implementations of Configuration.Reader default methods
+
+ @Override
+ public boolean containsOption(Option<?> id) {
+ return getConfiguration().containsOption(id);
+ }
+
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id) {
+ return getConfiguration().retrieveOption(id);
+ }
+
+ @Override
+ @Nullable
+ public <ValueT> ValueT retrieveOption(Option<ValueT> id, @Nullable ValueT valueIfMissing) {
+ return getConfiguration().retrieveOption(id, valueIfMissing);
+ }
+
+ @Override
+ public void findOptions(String idStem, OptionMatcher matcher) {
+ getConfiguration().findOptions(idStem, matcher);
+ }
+
+ @Override
+ public Set<Option<?>> listOptions() {
+ return getConfiguration().listOptions();
+ }
+
+ // Implementations of TargetConfiguration default methods
+
+ @Override
+ @Nullable
+ public Class<FakeUseCase> getTargetClass(
+ @Nullable Class<FakeUseCase> valueIfMissing) {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<FakeUseCase> storedClass = (Class<FakeUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS,
+ valueIfMissing);
+ return storedClass;
+ }
+
+ @Override
+ public Class<FakeUseCase> getTargetClass() {
+ @SuppressWarnings("unchecked") // Value should only be added via Builder#setTargetClass()
+ Class<FakeUseCase> storedClass = (Class<FakeUseCase>) retrieveOption(
+ OPTION_TARGET_CLASS);
+ return storedClass;
+ }
+
+ @Override
+ @Nullable
+ public String getTargetName(@Nullable String valueIfMissing) {
+ return retrieveOption(OPTION_TARGET_NAME, valueIfMissing);
+ }
+
+ @Override
+ public String getTargetName() {
+ return retrieveOption(OPTION_TARGET_NAME);
+ }
+
+ // Implementations of CameraDeviceConfiguration default methods
+
+ @Override
+ @Nullable
+ public CameraX.LensFacing getLensFacing(@Nullable CameraX.LensFacing valueIfMissing) {
+ return retrieveOption(OPTION_LENS_FACING, valueIfMissing);
+ }
+
+ @Override
+ public CameraX.LensFacing getLensFacing() {
+ return retrieveOption(OPTION_LENS_FACING);
+ }
+
+ // Implementations of UseCaseConfiguration default methods
+
+ @Override
+ @Nullable
+ public SessionConfiguration getDefaultSessionConfiguration(
+ @Nullable SessionConfiguration valueIfMissing) {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG, valueIfMissing);
+ }
+
+ @Override
+ public SessionConfiguration getDefaultSessionConfiguration() {
+ return retrieveOption(OPTION_DEFAULT_SESSION_CONFIG);
+ }
+
+ @Override
+ @Nullable
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker(
+ @Nullable SessionConfiguration.OptionUnpacker valueIfMissing) {
+ return retrieveOption(OPTION_CONFIG_UNPACKER, valueIfMissing);
+ }
+
+ @Override
+ public SessionConfiguration.OptionUnpacker getOptionUnpacker() {
+ return retrieveOption(OPTION_CONFIG_UNPACKER);
+ }
+
+ @Override
+ public int getSurfaceOccupancyPriority(int valueIfMissing) {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY, valueIfMissing);
+ }
+
+ @Override
+ public int getSurfaceOccupancyPriority() {
+ return retrieveOption(OPTION_SURFACE_OCCUPANCY_PRIORITY);
+ }
+
+ // End of the default implementation of Configuration
+ // *********************************************************************************************
}
diff --git a/camera/view/src/main/java/androidx/camera/view/CameraXModule.java b/camera/view/src/main/java/androidx/camera/view/CameraXModule.java
index 20b0d48..b225d9e 100644
--- a/camera/view/src/main/java/androidx/camera/view/CameraXModule.java
+++ b/camera/view/src/main/java/androidx/camera/view/CameraXModule.java
@@ -50,10 +50,10 @@
import androidx.camera.core.ViewFinderUseCaseConfiguration;
import androidx.camera.view.CameraView.CaptureMode;
import androidx.camera.view.CameraView.Quality;
-import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.OnLifecycleEvent;
import java.io.File;
import java.util.Arrays;
@@ -91,8 +91,8 @@
@Nullable
LifecycleOwner mCurrentLifecycle;
private final LifecycleObserver mCurrentLifecycleObserver =
- new DefaultLifecycleObserver() {
- @Override
+ new LifecycleObserver() {
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(LifecycleOwner owner) {
if (owner == mCurrentLifecycle) {
clearCurrentLifecycle();
@@ -179,7 +179,7 @@
throw new IllegalArgumentException("Cannot bind to lifecycle in a destroyed state.");
}
- int cameraOrientation;
+ final int cameraOrientation;
try {
String cameraId;
Set<LensFacing> available = getAvailableCameraLensFacing();
@@ -250,18 +250,22 @@
mViewFinderUseCase = new ViewFinderUseCase(mViewFinderConfigBuilder.build());
mViewFinderUseCase.setOnViewFinderOutputUpdateListener(
- output -> {
- boolean needReverse = cameraOrientation != 0 && cameraOrientation != 180;
- int textureWidth =
- needReverse
- ? output.getTextureSize().getHeight()
- : output.getTextureSize().getWidth();
- int textureHeight =
- needReverse
- ? output.getTextureSize().getWidth()
- : output.getTextureSize().getHeight();
- onViewfinderSourceDimensUpdated(textureWidth, textureHeight);
- setSurfaceTexture(output.getSurfaceTexture());
+ new ViewFinderUseCase.OnViewFinderOutputUpdateListener() {
+ @Override
+ public void onUpdated(ViewFinderUseCase.ViewFinderOutput output) {
+ boolean needReverse = cameraOrientation != 0 && cameraOrientation != 180;
+ int textureWidth =
+ needReverse
+ ? output.getTextureSize().getHeight()
+ : output.getTextureSize().getWidth();
+ int textureHeight =
+ needReverse
+ ? output.getTextureSize().getWidth()
+ : output.getTextureSize().getHeight();
+ CameraXModule.this.onViewfinderSourceDimensUpdated(textureWidth,
+ textureHeight);
+ CameraXModule.this.setSurfaceTexture(output.getSurfaceTexture());
+ }
});
if (getCaptureMode() == CaptureMode.IMAGE) {
@@ -323,7 +327,7 @@
mImageCaptureUseCase.takePicture(saveLocation, listener, metadata);
}
- public void startRecording(File file, OnVideoSavedListener listener) {
+ public void startRecording(File file, final OnVideoSavedListener listener) {
if (mVideoCaptureUseCase == null) {
return;
}