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

Commit d398fb78 authored by Chris Ye's avatar Chris Ye
Browse files

Add Builder to LightState.

Add Builder to LightState to replace the static constructors. Add
documents for Player ID lights. Changed input device lights types
definition to avoid future collsion with HAL light types.

Bug: 181743615
Test: atest InputDeviceLightsManagerTest
Change-Id: Ie47ef901006220d622677117c7ecd6ee41cf10f6
parent d560996d
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -18964,22 +18964,27 @@ package android.hardware.lights {
    method public int getType();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.Light> CREATOR;
    field public static final int LIGHT_TYPE_INPUT_PLAYER_ID = 10; // 0xa
    field public static final int LIGHT_TYPE_INPUT_RGB = 11; // 0xb
    field public static final int LIGHT_TYPE_INPUT_SINGLE = 9; // 0x9
    field public static final int LIGHT_TYPE_INPUT_PLAYER_ID = 10002; // 0x2712
    field public static final int LIGHT_TYPE_INPUT_RGB = 10003; // 0x2713
    field public static final int LIGHT_TYPE_INPUT_SINGLE = 10001; // 0x2711
    field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
  }
  public final class LightState implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public static android.hardware.lights.LightState forColor(@ColorInt int);
    method @NonNull public static android.hardware.lights.LightState forPlayerId(int);
    method @ColorInt public int getColor();
    method public int getPlayerId();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.LightState> CREATOR;
  }
  public static final class LightState.Builder {
    ctor public LightState.Builder();
    method @NonNull public android.hardware.lights.LightState build();
    method @NonNull public android.hardware.lights.LightState.Builder setColor(@ColorInt int);
    method @NonNull public android.hardware.lights.LightState.Builder setPlayerId(int);
  }
  public abstract class LightsManager {
    method @NonNull public abstract android.hardware.lights.LightState getLightState(@NonNull android.hardware.lights.Light);
    method @NonNull public abstract java.util.List<android.hardware.lights.Light> getLights();
@@ -18995,6 +19000,7 @@ package android.hardware.lights {
  public final class LightsRequest {
    method @NonNull public java.util.List<android.hardware.lights.LightState> getLightStates();
    method @NonNull public java.util.List<java.lang.Integer> getLights();
    method @NonNull public java.util.Map<java.lang.Integer,android.hardware.lights.LightState> getLightsAndStates();
  }
  public static final class LightsRequest.Builder {
+8 −3
Original line number Diff line number Diff line
@@ -37,20 +37,25 @@ public final class Light implements Parcelable {
    /** Type for lights that indicate microphone usage */
    public static final int LIGHT_TYPE_MICROPHONE = 8;

    // These enum values start from 10001 to avoid collision with expanding of HAL light types.
    /**
     * Type for lights that indicate a monochrome color LED light.
     */
    public static final int LIGHT_TYPE_INPUT_SINGLE = 9;
    public static final int LIGHT_TYPE_INPUT_SINGLE = 10001;

    /**
     * Type for lights that indicate a group of LED lights representing player ID.
     * Player ID lights normally present on game controllers are lights that consist of a row of
     * LEDs.
     * During multi-player game, the player ID for the current game controller is represented by
     * one of the LED that is lit according to its position in the row.
     */
    public static final int LIGHT_TYPE_INPUT_PLAYER_ID = 10;
    public static final int LIGHT_TYPE_INPUT_PLAYER_ID = 10002;

    /**
     * Type for lights that indicate a color LED light.
     */
    public static final int LIGHT_TYPE_INPUT_RGB = 11;
    public static final int LIGHT_TYPE_INPUT_RGB = 10003;

    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
+54 −19
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.hardware.lights;

import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -65,27 +66,61 @@ public final class LightState implements Parcelable {
    }

    /**
     * Creates a new LightState with the desired color and intensity, for a light type
     * Builder for creating device light change requests.
     */
    public static final class Builder {
        private int mValue;
        private boolean mIsForPlayerId;

        /** Creates a new {@link LightState.Builder}. */
        public Builder() {
            mValue = 0;
            mIsForPlayerId = false;
        }

        /**
         * Set the desired color and intensity of the LightState Builder, for a light type
         * of RBG color or single monochrome color.
         *
         * @param color the desired color and intensity in ARGB format.
     * @return The LightState object contains the color.
         * @return The {@link LightState.Builder} object contains the light color and intensity.
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        @NonNull
    public static LightState forColor(@ColorInt int color) {
        return new LightState(color, 0);
        public Builder setColor(@ColorInt int color) {
            mIsForPlayerId = false;
            mValue = color;
            return this;
        }

        /**
     * Creates a new LightState with the desired player id, for a light of type
         * Set the desired player id of the LightState Builder, for a light of type
         * {@link android.hardware.lights.Light#LIGHT_TYPE_INPUT_PLAYER_ID}.
         *
         * @param playerId the desired player id.
     * @return The LightState object contains the player id.
         * @return The {@link LightState.Builder} object contains the player id.
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        @NonNull
    public static LightState forPlayerId(int playerId) {
        return new LightState(0, playerId);
        public Builder setPlayerId(int playerId) {
            mIsForPlayerId = true;
            mValue = playerId;
            return this;
        }

        /**
         * Create a LightState object used to control lights on the device.
         *
         * <p>The generated {@link LightState} should be used in
         * {@link LightsRequest.Builder#addLight(Light, LightState)}.
         */
        public @NonNull LightState build() {
            if (!mIsForPlayerId) {
                return new LightState(mValue, 0);
            } else {
                return new LightState(0, mValue);
            }
        }
    }

    /**
+9 −0
Original line number Diff line number Diff line
@@ -86,6 +86,15 @@ public abstract class LightsManager {
    /**
     * Encapsulates a session that can be used to control device lights and represents the lifetime
     * of the requests.
     *
     * <p>Any lights requests always live in a lights session which defines the lifecycle of the
     * lights requests. A lights session is AutoCloseable that will get closed when leaving the
     * session context.
     *
     * <p>Multiple sessions can make lights requests which contains same light. In the case the
     * LightsManager implementation will arbitrate and honor one of the session's request. When
     * the session hold the current light request closed, LightsManager implementation will choose
     * another live session to honor its lights requests.
     */
    public abstract static class LightsSession implements AutoCloseable {
        private final IBinder mToken = new Binder();
+15 −1
Original line number Diff line number Diff line
@@ -24,7 +24,9 @@ import com.android.internal.util.Preconditions;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Encapsulates a request to modify the state of multiple lights.
 *
@@ -74,6 +76,18 @@ public final class LightsRequest {
        return Arrays.asList(mLightStates);
    }

    /**
     * Get a map of light ids and states.  The map will contain all the light ids as keys and
     * the corresponding LightState requested as values.
     */
    public @NonNull Map<Integer, LightState> getLightsAndStates() {
        Map<Integer, LightState> map = new HashMap<>();
        for (int i = 0; i < mLightIds.length; i++) {
            map.put(mLightIds[i], mLightStates[i]);
        }
        return map;
    }

    /**
     * Builder for creating device light change requests.
     */