Loading core/api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -3694,9 +3694,11 @@ package android.companion.virtual.sensor { method public int getMinDelay(); method @NonNull public String getName(); method public float getPower(); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public int getReportingMode(); method public float getResolution(); method public int getType(); method @Nullable public String getVendor(); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public boolean isWakeUpSensor(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.sensor.VirtualSensorConfig> CREATOR; } Loading @@ -3710,8 +3712,10 @@ package android.companion.virtual.sensor { method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setMaximumRange(float); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setMinDelay(int); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setPower(float); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setReportingMode(int); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setResolution(float); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setVendor(@Nullable String); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setWakeUpSensor(boolean); } public interface VirtualSensorDirectChannelCallback { core/java/android/companion/virtual/flags/flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -103,3 +103,10 @@ flag { description: "Expose multiple surface for the virtual camera owner for different stream resolution" bug: "341083465" } flag { namespace: "virtual_devices" name: "device_aware_display_power" description: "Device awareness in power and display APIs" bug: "285020111" } core/java/android/companion/virtual/sensor/VirtualSensorConfig.java +71 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,14 @@ package android.companion.virtual.sensor; import android.annotation.FlaggedApi; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; import android.companion.virtualdevice.flags.Flags; import android.hardware.Sensor; import android.hardware.SensorDirectChannel; import android.os.Parcel; Loading @@ -42,6 +44,13 @@ import java.util.Objects; public final class VirtualSensorConfig implements Parcelable { private static final String TAG = "VirtualSensorConfig"; // Defined in sensors.h private static final int FLAG_WAKE_UP_SENSOR = 1; // Mask for the reporting mode, bit 2, 3, 4. private static final int REPORTING_MODE_MASK = 0xE; private static final int REPORTING_MODE_SHIFT = 1; // Mask for direct mode highest rate level, bit 7, 8, 9. private static final int DIRECT_REPORT_MASK = 0x380; private static final int DIRECT_REPORT_SHIFT = 7; Loading Loading @@ -193,8 +202,7 @@ public final class VirtualSensorConfig implements Parcelable { @SensorDirectChannel.RateLevel public int getHighestDirectReportRateLevel() { int rateLevel = ((mFlags & DIRECT_REPORT_MASK) >> DIRECT_REPORT_SHIFT); return rateLevel <= SensorDirectChannel.RATE_VERY_FAST ? rateLevel : SensorDirectChannel.RATE_VERY_FAST; return Math.min(rateLevel, SensorDirectChannel.RATE_VERY_FAST); } /** Loading @@ -214,6 +222,28 @@ public final class VirtualSensorConfig implements Parcelable { return memoryTypes; } /** * Returns whether the sensor is a wake-up sensor. * * @see Builder#setWakeUpSensor(boolean) * @see Sensor#isWakeUpSensor() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) public boolean isWakeUpSensor() { return (mFlags & FLAG_WAKE_UP_SENSOR) > 0; } /** * Returns the reporting mode of this sensor. * * @see Builder#setReportingMode(int) * @see Sensor#getReportingMode() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) public int getReportingMode() { return ((mFlags & REPORTING_MODE_MASK) >> REPORTING_MODE_SHIFT); } /** * Returns the sensor flags. * Loading Loading @@ -383,6 +413,45 @@ public final class VirtualSensorConfig implements Parcelable { } return this; } /** * Sets whether this sensor is a wake up sensor. * * @see Sensor#isWakeUpSensor() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) @NonNull public VirtualSensorConfig.Builder setWakeUpSensor(boolean wakeUpSensor) { if (wakeUpSensor) { mFlags |= FLAG_WAKE_UP_SENSOR; } else { mFlags &= ~FLAG_WAKE_UP_SENSOR; } return this; } /** * Sets the reporting mode of this sensor. * * @throws IllegalArgumentException if the reporting mode is not one of * {@link Sensor#REPORTING_MODE_CONTINUOUS}, {@link Sensor#REPORTING_MODE_ON_CHANGE}, * {@link Sensor#REPORTING_MODE_ONE_SHOT}, or * {@link Sensor#REPORTING_MODE_SPECIAL_TRIGGER}. * * @see Sensor#getReportingMode() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) @NonNull public VirtualSensorConfig.Builder setReportingMode(int reportingMode) { if (reportingMode != Sensor.REPORTING_MODE_CONTINUOUS && reportingMode != Sensor.REPORTING_MODE_ON_CHANGE && reportingMode != Sensor.REPORTING_MODE_ONE_SHOT && reportingMode != Sensor.REPORTING_MODE_SPECIAL_TRIGGER) { throw new IllegalArgumentException("Invalid reporting mode: " + reportingMode); } mFlags |= reportingMode << REPORTING_MODE_SHIFT; return this; } } @NonNull Loading Loading
core/api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -3694,9 +3694,11 @@ package android.companion.virtual.sensor { method public int getMinDelay(); method @NonNull public String getName(); method public float getPower(); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public int getReportingMode(); method public float getResolution(); method public int getType(); method @Nullable public String getVendor(); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") public boolean isWakeUpSensor(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.sensor.VirtualSensorConfig> CREATOR; } Loading @@ -3710,8 +3712,10 @@ package android.companion.virtual.sensor { method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setMaximumRange(float); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setMinDelay(int); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setPower(float); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setReportingMode(int); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setResolution(float); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setVendor(@Nullable String); method @FlaggedApi("android.companion.virtualdevice.flags.device_aware_display_power") @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setWakeUpSensor(boolean); } public interface VirtualSensorDirectChannelCallback {
core/java/android/companion/virtual/flags/flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -103,3 +103,10 @@ flag { description: "Expose multiple surface for the virtual camera owner for different stream resolution" bug: "341083465" } flag { namespace: "virtual_devices" name: "device_aware_display_power" description: "Device awareness in power and display APIs" bug: "285020111" }
core/java/android/companion/virtual/sensor/VirtualSensorConfig.java +71 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,14 @@ package android.companion.virtual.sensor; import android.annotation.FlaggedApi; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; import android.companion.virtualdevice.flags.Flags; import android.hardware.Sensor; import android.hardware.SensorDirectChannel; import android.os.Parcel; Loading @@ -42,6 +44,13 @@ import java.util.Objects; public final class VirtualSensorConfig implements Parcelable { private static final String TAG = "VirtualSensorConfig"; // Defined in sensors.h private static final int FLAG_WAKE_UP_SENSOR = 1; // Mask for the reporting mode, bit 2, 3, 4. private static final int REPORTING_MODE_MASK = 0xE; private static final int REPORTING_MODE_SHIFT = 1; // Mask for direct mode highest rate level, bit 7, 8, 9. private static final int DIRECT_REPORT_MASK = 0x380; private static final int DIRECT_REPORT_SHIFT = 7; Loading Loading @@ -193,8 +202,7 @@ public final class VirtualSensorConfig implements Parcelable { @SensorDirectChannel.RateLevel public int getHighestDirectReportRateLevel() { int rateLevel = ((mFlags & DIRECT_REPORT_MASK) >> DIRECT_REPORT_SHIFT); return rateLevel <= SensorDirectChannel.RATE_VERY_FAST ? rateLevel : SensorDirectChannel.RATE_VERY_FAST; return Math.min(rateLevel, SensorDirectChannel.RATE_VERY_FAST); } /** Loading @@ -214,6 +222,28 @@ public final class VirtualSensorConfig implements Parcelable { return memoryTypes; } /** * Returns whether the sensor is a wake-up sensor. * * @see Builder#setWakeUpSensor(boolean) * @see Sensor#isWakeUpSensor() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) public boolean isWakeUpSensor() { return (mFlags & FLAG_WAKE_UP_SENSOR) > 0; } /** * Returns the reporting mode of this sensor. * * @see Builder#setReportingMode(int) * @see Sensor#getReportingMode() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) public int getReportingMode() { return ((mFlags & REPORTING_MODE_MASK) >> REPORTING_MODE_SHIFT); } /** * Returns the sensor flags. * Loading Loading @@ -383,6 +413,45 @@ public final class VirtualSensorConfig implements Parcelable { } return this; } /** * Sets whether this sensor is a wake up sensor. * * @see Sensor#isWakeUpSensor() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) @NonNull public VirtualSensorConfig.Builder setWakeUpSensor(boolean wakeUpSensor) { if (wakeUpSensor) { mFlags |= FLAG_WAKE_UP_SENSOR; } else { mFlags &= ~FLAG_WAKE_UP_SENSOR; } return this; } /** * Sets the reporting mode of this sensor. * * @throws IllegalArgumentException if the reporting mode is not one of * {@link Sensor#REPORTING_MODE_CONTINUOUS}, {@link Sensor#REPORTING_MODE_ON_CHANGE}, * {@link Sensor#REPORTING_MODE_ONE_SHOT}, or * {@link Sensor#REPORTING_MODE_SPECIAL_TRIGGER}. * * @see Sensor#getReportingMode() */ @FlaggedApi(Flags.FLAG_DEVICE_AWARE_DISPLAY_POWER) @NonNull public VirtualSensorConfig.Builder setReportingMode(int reportingMode) { if (reportingMode != Sensor.REPORTING_MODE_CONTINUOUS && reportingMode != Sensor.REPORTING_MODE_ON_CHANGE && reportingMode != Sensor.REPORTING_MODE_ONE_SHOT && reportingMode != Sensor.REPORTING_MODE_SPECIAL_TRIGGER) { throw new IllegalArgumentException("Invalid reporting mode: " + reportingMode); } mFlags |= reportingMode << REPORTING_MODE_SHIFT; return this; } } @NonNull Loading