Merge "Add Builder to LightState." into sc-dev

This commit is contained in:
Chris Ye
2021-04-27 16:06:12 +00:00
committed by Android (Google) Code Review
5 changed files with 97 additions and 28 deletions

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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
* of RBG color or single monochrome color.
*
* @param color the desired color and intensity in ARGB format.
* @return The LightState object contains the color.
* Builder for creating device light change requests.
*/
@NonNull
public static LightState forColor(@ColorInt int color) {
return new LightState(color, 0);
}
public static final class Builder {
private int mValue;
private boolean mIsForPlayerId;
/**
* Creates a new LightState with the desired player id, 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.
*/
@NonNull
public static LightState forPlayerId(int playerId) {
return new LightState(0, playerId);
/** 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 {@link LightState.Builder} object contains the light color and intensity.
*/
@SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder setColor(@ColorInt int color) {
mIsForPlayerId = false;
mValue = color;
return this;
}
/**
* 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 {@link LightState.Builder} object contains the player id.
*/
@SuppressLint("MissingGetterMatchingBuilder")
@NonNull
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);
}
}
}
/**

View File

@@ -99,6 +99,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();

View File

@@ -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.
*
@@ -51,7 +53,7 @@ public final class LightsRequest {
}
/**
* Get a list of Light as ids. The ids will returned in same order as the lights passed
* Get a list of Light as ids. The ids will returned in same order as the lights passed
* in Builder.
*
* @return List of light ids
@@ -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.
*/