Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 033df436 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add missing API for virtual sensor creation" into main

parents 6e287a57 92789bdd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
  }
@@ -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 {
+7 −0
Original line number Diff line number Diff line
@@ -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"
}
+71 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);
    }

    /**
@@ -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.
     *
@@ -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