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

Commit 92789bdd authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

Add missing API for virtual sensor creation

Fix: 362254217
Bug: 285020111
Test: CTS
Flag: android.companion.virtualdevice.flags.device_aware_display_power
Change-Id: Iebfc26830edfc564a0bf600ddc1d4177936ee6c3
parent 60251f91
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