Loading core/api/test-current.txt +7 −0 Original line number Diff line number Diff line Loading @@ -1527,6 +1527,13 @@ package android.graphics.fonts { package android.hardware { @Deprecated public class Camera { method @Deprecated public static void getCameraInfo(int, @NonNull android.content.Context, boolean, android.hardware.Camera.CameraInfo); method @Deprecated public static int getNumberOfCameras(@NonNull android.content.Context); method @Deprecated public static android.hardware.Camera open(int, @NonNull android.content.Context, boolean); method @Deprecated public final void setPreviewSurface(android.view.Surface) throws java.io.IOException; } public final class SensorPrivacyManager { method @FlaggedApi("com.android.internal.camera.flags.camera_privacy_allowlist") @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setCameraPrivacyAllowlist(@NonNull java.util.List<java.lang.String>); method @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setSensorPrivacy(int, int, boolean); Loading core/java/android/hardware/Camera.java +82 −20 Original line number Diff line number Diff line Loading @@ -16,14 +16,21 @@ package android.hardware; import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT; import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CAMERA; import static android.content.Context.DEVICE_ID_DEFAULT; import static android.system.OsConstants.EACCES; import static android.system.OsConstants.ENODEV; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.ActivityThread; import android.app.AppOpsManager; import android.companion.virtual.VirtualDeviceManager; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.ImageFormat; Loading Loading @@ -56,6 +63,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Objects; /** * The Camera class is used to set image capture settings, start/stop preview, Loading Loading @@ -271,7 +279,24 @@ public class Camera { * @return total number of accessible camera devices, or 0 if there are no * cameras or an error was encountered enumerating them. */ public native static int getNumberOfCameras(); public static int getNumberOfCameras() { return getNumberOfCameras(ActivityThread.currentApplication().getApplicationContext()); } /** * Returns the number of physical cameras available on this device for the given context. * The return value of this method might change dynamically if the device supports external * cameras and an external camera is connected or disconnected. * * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi public static int getNumberOfCameras(@NonNull Context context) { return _getNumberOfCameras(context.getDeviceId(), getDevicePolicyFromContext(context)); } private static native int _getNumberOfCameras(int deviceId, int devicePolicy); /** * Returns the information about a particular camera. Loading @@ -282,10 +307,22 @@ public class Camera { * low-level failure). */ public static void getCameraInfo(int cameraId, CameraInfo cameraInfo) { boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait( ActivityThread.currentApplication().getApplicationContext()); Context context = ActivityThread.currentApplication().getApplicationContext(); boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait(context); getCameraInfo(cameraId, context, overrideToPortrait, cameraInfo); } _getCameraInfo(cameraId, overrideToPortrait, cameraInfo); /** * Returns the information about a particular camera for the given context. * * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi public static void getCameraInfo(int cameraId, @NonNull Context context, boolean overrideToPortrait, CameraInfo cameraInfo) { _getCameraInfo(cameraId, overrideToPortrait, context.getDeviceId(), getDevicePolicyFromContext(context), cameraInfo); IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE); IAudioService audioService = IAudioService.Stub.asInterface(b); try { Loading @@ -298,8 +335,20 @@ public class Camera { Log.e(TAG, "Audio service is unavailable for queries"); } } private native static void _getCameraInfo(int cameraId, boolean overrideToPortrait, CameraInfo cameraInfo); int deviceId, int devicePolicy, CameraInfo cameraInfo); private static int getDevicePolicyFromContext(Context context) { if (context.getDeviceId() == DEVICE_ID_DEFAULT || !android.companion.virtual.flags.Flags.virtualCamera()) { return DEVICE_POLICY_DEFAULT; } VirtualDeviceManager virtualDeviceManager = context.getSystemService(VirtualDeviceManager.class); return virtualDeviceManager.getDevicePolicy(context.getDeviceId(), POLICY_TYPE_CAMERA); } /** * Information about a camera Loading Loading @@ -359,7 +408,7 @@ public class Camera { * when {@link Camera#takePicture takePicture} is called.</p> */ public boolean canDisableShutterSound; }; } /** * Creates a new Camera object to access a particular hardware camera. If Loading Loading @@ -391,7 +440,20 @@ public class Camera { * @see android.app.admin.DevicePolicyManager#getCameraDisabled(android.content.ComponentName) */ public static Camera open(int cameraId) { return new Camera(cameraId); Context context = ActivityThread.currentApplication().getApplicationContext(); boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait(context); return open(cameraId, context, overrideToPortrait); } /** * Creates a new Camera object for a given camera id for the given context. * * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi public static Camera open(int cameraId, @NonNull Context context, boolean overrideToPortrait) { return new Camera(cameraId, context, overrideToPortrait); } /** Loading @@ -409,7 +471,7 @@ public class Camera { for (int i = 0; i < numberOfCameras; i++) { getCameraInfo(i, cameraInfo); if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) { return new Camera(i); return open(i); } } return null; Loading Loading @@ -459,10 +521,10 @@ public class Camera { throw new IllegalArgumentException("Unsupported HAL version " + halVersion); } return new Camera(cameraId); return open(cameraId); } private int cameraInit(int cameraId) { private int cameraInit(int cameraId, Context context, boolean overrideToPortrait) { mShutterCallback = null; mRawImageCallback = null; mJpegCallback = null; Loading @@ -480,11 +542,10 @@ public class Camera { mEventHandler = null; } boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait( ActivityThread.currentApplication().getApplicationContext()); boolean forceSlowJpegMode = shouldForceSlowJpegMode(); return native_setup(new WeakReference<Camera>(this), cameraId, ActivityThread.currentOpPackageName(), overrideToPortrait, forceSlowJpegMode); return native_setup(new WeakReference<>(this), cameraId, ActivityThread.currentOpPackageName(), overrideToPortrait, forceSlowJpegMode, context.getDeviceId(), getDevicePolicyFromContext(context)); } private boolean shouldForceSlowJpegMode() { Loading @@ -501,8 +562,9 @@ public class Camera { } /** used by Camera#open, Camera#open(int) */ Camera(int cameraId) { int err = cameraInit(cameraId); Camera(int cameraId, @NonNull Context context, boolean overrideToPortrait) { Objects.requireNonNull(context); int err = cameraInit(cameraId, context, overrideToPortrait); if (checkInitErrors(err)) { if (err == -EACCES) { throw new RuntimeException("Fail to connect to camera service"); Loading @@ -515,7 +577,6 @@ public class Camera { initAppOps(); } /** * @hide */ Loading Loading @@ -568,11 +629,10 @@ public class Camera { @UnsupportedAppUsage private native int native_setup(Object cameraThis, int cameraId, String packageName, boolean overrideToPortrait, boolean forceSlowJpegMode); boolean overrideToPortrait, boolean forceSlowJpegMode, int deviceId, int devicePolicy); private native final void native_release(); /** * Disconnects and releases the Camera object resources. * Loading Loading @@ -672,13 +732,15 @@ public class Camera { if (holder != null) { setPreviewSurface(holder.getSurface()); } else { setPreviewSurface((Surface)null); setPreviewSurface(null); } } /** * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public native final void setPreviewSurface(Surface surface) throws IOException; Loading core/java/android/hardware/CameraStatus.java +19 −15 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.hardware; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; Loading @@ -23,7 +24,7 @@ import android.os.Parcelable; * Status information about a camera. * * Contains the name of the camera device, and its current status, one of the * ICameraServiceListener.STATUS_ values. * ICameraServiceListener.STATUS_* values. * * @hide */ Loading @@ -32,6 +33,7 @@ public class CameraStatus implements Parcelable { public int status; public String[] unavailablePhysicalCameras; public String clientPackage; public int deviceId; @Override public int describeContents() { Loading @@ -44,6 +46,7 @@ public class CameraStatus implements Parcelable { out.writeInt(status); out.writeStringArray(unavailablePhysicalCameras); out.writeString(clientPackage); out.writeInt(deviceId); } public void readFromParcel(Parcel in) { Loading @@ -51,15 +54,16 @@ public class CameraStatus implements Parcelable { status = in.readInt(); unavailablePhysicalCameras = in.readStringArray(); clientPackage = in.readString(); deviceId = in.readInt(); } public static final @android.annotation.NonNull Parcelable.Creator<CameraStatus> CREATOR = new Parcelable.Creator<CameraStatus>() { @NonNull public static final Parcelable.Creator<CameraStatus> CREATOR = new Parcelable.Creator<>() { @Override public CameraStatus createFromParcel(Parcel in) { CameraStatus status = new CameraStatus(); status.readFromParcel(in); return status; } Loading core/java/android/hardware/camera2/CameraCharacteristics.java +15 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.hardware.camera2; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.companion.virtual.VirtualDeviceManager; import android.companion.virtual.camera.VirtualCameraConfig; import android.compat.annotation.UnsupportedAppUsage; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.impl.ExtensionKey; Loading Loading @@ -5328,6 +5330,19 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri public static final Key<Integer> INFO_SESSION_CONFIGURATION_QUERY_VERSION = new Key<Integer>("android.info.sessionConfigurationQueryVersion", int.class); /** * <p>Id of the device that owns this camera.</p> * <p>In case of a virtual camera, this would be the id of the virtual device * owning the camera. For any other camera, this key would not be present. * Callers should assume {@link android.content.Context#DEVICE_ID_DEFAULT} * in case this key is not present.</p> * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> * @see VirtualDeviceManager.VirtualDevice#createVirtualCamera(VirtualCameraConfig) * @hide */ public static final Key<Integer> INFO_DEVICE_ID = new Key<Integer>("android.info.deviceId", int.class); /** * <p>The maximum number of frames that can occur after a request * (different than the previous) has been submitted, and before the Loading core/java/android/hardware/camera2/CameraManager.java +356 −243 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/api/test-current.txt +7 −0 Original line number Diff line number Diff line Loading @@ -1527,6 +1527,13 @@ package android.graphics.fonts { package android.hardware { @Deprecated public class Camera { method @Deprecated public static void getCameraInfo(int, @NonNull android.content.Context, boolean, android.hardware.Camera.CameraInfo); method @Deprecated public static int getNumberOfCameras(@NonNull android.content.Context); method @Deprecated public static android.hardware.Camera open(int, @NonNull android.content.Context, boolean); method @Deprecated public final void setPreviewSurface(android.view.Surface) throws java.io.IOException; } public final class SensorPrivacyManager { method @FlaggedApi("com.android.internal.camera.flags.camera_privacy_allowlist") @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setCameraPrivacyAllowlist(@NonNull java.util.List<java.lang.String>); method @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setSensorPrivacy(int, int, boolean); Loading
core/java/android/hardware/Camera.java +82 −20 Original line number Diff line number Diff line Loading @@ -16,14 +16,21 @@ package android.hardware; import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT; import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CAMERA; import static android.content.Context.DEVICE_ID_DEFAULT; import static android.system.OsConstants.EACCES; import static android.system.OsConstants.ENODEV; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.ActivityThread; import android.app.AppOpsManager; import android.companion.virtual.VirtualDeviceManager; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.ImageFormat; Loading Loading @@ -56,6 +63,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Objects; /** * The Camera class is used to set image capture settings, start/stop preview, Loading Loading @@ -271,7 +279,24 @@ public class Camera { * @return total number of accessible camera devices, or 0 if there are no * cameras or an error was encountered enumerating them. */ public native static int getNumberOfCameras(); public static int getNumberOfCameras() { return getNumberOfCameras(ActivityThread.currentApplication().getApplicationContext()); } /** * Returns the number of physical cameras available on this device for the given context. * The return value of this method might change dynamically if the device supports external * cameras and an external camera is connected or disconnected. * * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi public static int getNumberOfCameras(@NonNull Context context) { return _getNumberOfCameras(context.getDeviceId(), getDevicePolicyFromContext(context)); } private static native int _getNumberOfCameras(int deviceId, int devicePolicy); /** * Returns the information about a particular camera. Loading @@ -282,10 +307,22 @@ public class Camera { * low-level failure). */ public static void getCameraInfo(int cameraId, CameraInfo cameraInfo) { boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait( ActivityThread.currentApplication().getApplicationContext()); Context context = ActivityThread.currentApplication().getApplicationContext(); boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait(context); getCameraInfo(cameraId, context, overrideToPortrait, cameraInfo); } _getCameraInfo(cameraId, overrideToPortrait, cameraInfo); /** * Returns the information about a particular camera for the given context. * * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi public static void getCameraInfo(int cameraId, @NonNull Context context, boolean overrideToPortrait, CameraInfo cameraInfo) { _getCameraInfo(cameraId, overrideToPortrait, context.getDeviceId(), getDevicePolicyFromContext(context), cameraInfo); IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE); IAudioService audioService = IAudioService.Stub.asInterface(b); try { Loading @@ -298,8 +335,20 @@ public class Camera { Log.e(TAG, "Audio service is unavailable for queries"); } } private native static void _getCameraInfo(int cameraId, boolean overrideToPortrait, CameraInfo cameraInfo); int deviceId, int devicePolicy, CameraInfo cameraInfo); private static int getDevicePolicyFromContext(Context context) { if (context.getDeviceId() == DEVICE_ID_DEFAULT || !android.companion.virtual.flags.Flags.virtualCamera()) { return DEVICE_POLICY_DEFAULT; } VirtualDeviceManager virtualDeviceManager = context.getSystemService(VirtualDeviceManager.class); return virtualDeviceManager.getDevicePolicy(context.getDeviceId(), POLICY_TYPE_CAMERA); } /** * Information about a camera Loading Loading @@ -359,7 +408,7 @@ public class Camera { * when {@link Camera#takePicture takePicture} is called.</p> */ public boolean canDisableShutterSound; }; } /** * Creates a new Camera object to access a particular hardware camera. If Loading Loading @@ -391,7 +440,20 @@ public class Camera { * @see android.app.admin.DevicePolicyManager#getCameraDisabled(android.content.ComponentName) */ public static Camera open(int cameraId) { return new Camera(cameraId); Context context = ActivityThread.currentApplication().getApplicationContext(); boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait(context); return open(cameraId, context, overrideToPortrait); } /** * Creates a new Camera object for a given camera id for the given context. * * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi public static Camera open(int cameraId, @NonNull Context context, boolean overrideToPortrait) { return new Camera(cameraId, context, overrideToPortrait); } /** Loading @@ -409,7 +471,7 @@ public class Camera { for (int i = 0; i < numberOfCameras; i++) { getCameraInfo(i, cameraInfo); if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) { return new Camera(i); return open(i); } } return null; Loading Loading @@ -459,10 +521,10 @@ public class Camera { throw new IllegalArgumentException("Unsupported HAL version " + halVersion); } return new Camera(cameraId); return open(cameraId); } private int cameraInit(int cameraId) { private int cameraInit(int cameraId, Context context, boolean overrideToPortrait) { mShutterCallback = null; mRawImageCallback = null; mJpegCallback = null; Loading @@ -480,11 +542,10 @@ public class Camera { mEventHandler = null; } boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait( ActivityThread.currentApplication().getApplicationContext()); boolean forceSlowJpegMode = shouldForceSlowJpegMode(); return native_setup(new WeakReference<Camera>(this), cameraId, ActivityThread.currentOpPackageName(), overrideToPortrait, forceSlowJpegMode); return native_setup(new WeakReference<>(this), cameraId, ActivityThread.currentOpPackageName(), overrideToPortrait, forceSlowJpegMode, context.getDeviceId(), getDevicePolicyFromContext(context)); } private boolean shouldForceSlowJpegMode() { Loading @@ -501,8 +562,9 @@ public class Camera { } /** used by Camera#open, Camera#open(int) */ Camera(int cameraId) { int err = cameraInit(cameraId); Camera(int cameraId, @NonNull Context context, boolean overrideToPortrait) { Objects.requireNonNull(context); int err = cameraInit(cameraId, context, overrideToPortrait); if (checkInitErrors(err)) { if (err == -EACCES) { throw new RuntimeException("Fail to connect to camera service"); Loading @@ -515,7 +577,6 @@ public class Camera { initAppOps(); } /** * @hide */ Loading Loading @@ -568,11 +629,10 @@ public class Camera { @UnsupportedAppUsage private native int native_setup(Object cameraThis, int cameraId, String packageName, boolean overrideToPortrait, boolean forceSlowJpegMode); boolean overrideToPortrait, boolean forceSlowJpegMode, int deviceId, int devicePolicy); private native final void native_release(); /** * Disconnects and releases the Camera object resources. * Loading Loading @@ -672,13 +732,15 @@ public class Camera { if (holder != null) { setPreviewSurface(holder.getSurface()); } else { setPreviewSurface((Surface)null); setPreviewSurface(null); } } /** * @hide */ @SuppressLint("UnflaggedApi") // @TestApi without associated feature. @TestApi @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public native final void setPreviewSurface(Surface surface) throws IOException; Loading
core/java/android/hardware/CameraStatus.java +19 −15 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.hardware; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; Loading @@ -23,7 +24,7 @@ import android.os.Parcelable; * Status information about a camera. * * Contains the name of the camera device, and its current status, one of the * ICameraServiceListener.STATUS_ values. * ICameraServiceListener.STATUS_* values. * * @hide */ Loading @@ -32,6 +33,7 @@ public class CameraStatus implements Parcelable { public int status; public String[] unavailablePhysicalCameras; public String clientPackage; public int deviceId; @Override public int describeContents() { Loading @@ -44,6 +46,7 @@ public class CameraStatus implements Parcelable { out.writeInt(status); out.writeStringArray(unavailablePhysicalCameras); out.writeString(clientPackage); out.writeInt(deviceId); } public void readFromParcel(Parcel in) { Loading @@ -51,15 +54,16 @@ public class CameraStatus implements Parcelable { status = in.readInt(); unavailablePhysicalCameras = in.readStringArray(); clientPackage = in.readString(); deviceId = in.readInt(); } public static final @android.annotation.NonNull Parcelable.Creator<CameraStatus> CREATOR = new Parcelable.Creator<CameraStatus>() { @NonNull public static final Parcelable.Creator<CameraStatus> CREATOR = new Parcelable.Creator<>() { @Override public CameraStatus createFromParcel(Parcel in) { CameraStatus status = new CameraStatus(); status.readFromParcel(in); return status; } Loading
core/java/android/hardware/camera2/CameraCharacteristics.java +15 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.hardware.camera2; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.companion.virtual.VirtualDeviceManager; import android.companion.virtual.camera.VirtualCameraConfig; import android.compat.annotation.UnsupportedAppUsage; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.impl.ExtensionKey; Loading Loading @@ -5328,6 +5330,19 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri public static final Key<Integer> INFO_SESSION_CONFIGURATION_QUERY_VERSION = new Key<Integer>("android.info.sessionConfigurationQueryVersion", int.class); /** * <p>Id of the device that owns this camera.</p> * <p>In case of a virtual camera, this would be the id of the virtual device * owning the camera. For any other camera, this key would not be present. * Callers should assume {@link android.content.Context#DEVICE_ID_DEFAULT} * in case this key is not present.</p> * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> * @see VirtualDeviceManager.VirtualDevice#createVirtualCamera(VirtualCameraConfig) * @hide */ public static final Key<Integer> INFO_DEVICE_ID = new Key<Integer>("android.info.deviceId", int.class); /** * <p>The maximum number of frames that can occur after a request * (different than the previous) has been submitted, and before the Loading
core/java/android/hardware/camera2/CameraManager.java +356 −243 File changed.Preview size limit exceeded, changes collapsed. Show changes