Loading core/api/current.txt +3 −1 Original line number Diff line number Diff line Loading @@ -18646,8 +18646,10 @@ package android.hardware.lights { 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_CAPABILITY_BRIGHTNESS = 1; // 0x1 field public static final int LIGHT_CAPABILITY_RGB = 0; // 0x0 field public static final int LIGHT_CAPABILITY_COLOR_RGB = 2; // 0x2 field @Deprecated public static final int LIGHT_CAPABILITY_RGB = 0; // 0x0 field public static final int LIGHT_TYPE_INPUT = 10001; // 0x2711 field public static final int LIGHT_TYPE_KEYBOARD_BACKLIGHT = 10003; // 0x2713 field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8 field public static final int LIGHT_TYPE_PLAYER_ID = 10002; // 0x2712 } core/java/android/hardware/lights/Light.java +20 −4 Original line number Diff line number Diff line Loading @@ -59,16 +59,30 @@ public final class Light implements Parcelable { */ public static final int LIGHT_TYPE_PLAYER_ID = 10002; /** * Type for lights that illuminate keyboard keys. */ public static final int LIGHT_TYPE_KEYBOARD_BACKLIGHT = 10003; /** * Capability for lights that could adjust its LED brightness. If the capability is not present * the led can only be turned either on or off. * the LED can only be turned either on or off. */ public static final int LIGHT_CAPABILITY_BRIGHTNESS = 1 << 0; /** * Capability for lights that has red, green and blue LEDs to control the light's color. * Capability for lights that have red, green and blue LEDs to control the light's color. */ public static final int LIGHT_CAPABILITY_COLOR_RGB = 1 << 1; /** * Capability for lights that have red, green and blue LEDs to control the light's color. * * @deprecated Wrong int based flag with value 0. Use capability flag {@code * LIGHT_CAPABILITY_COLOR_RGB} instead. */ public static final int LIGHT_CAPABILITY_RGB = 0 << 1; @Deprecated public static final int LIGHT_CAPABILITY_RGB = 0; /** @hide */ @Retention(RetentionPolicy.SOURCE) Loading @@ -77,6 +91,7 @@ public final class Light implements Parcelable { LIGHT_TYPE_MICROPHONE, LIGHT_TYPE_INPUT, LIGHT_TYPE_PLAYER_ID, LIGHT_TYPE_KEYBOARD_BACKLIGHT, }) public @interface LightType {} Loading @@ -85,6 +100,7 @@ public final class Light implements Parcelable { @IntDef(flag = true, prefix = {"LIGHT_CAPABILITY_"}, value = { LIGHT_CAPABILITY_BRIGHTNESS, LIGHT_CAPABILITY_COLOR_RGB, LIGHT_CAPABILITY_RGB, }) public @interface LightCapability {} Loading Loading @@ -233,7 +249,7 @@ public final class Light implements Parcelable { * @return True if the hardware can control the RGB led, otherwise false. */ public boolean hasRgbControl() { return (mCapabilities & LIGHT_CAPABILITY_RGB) == LIGHT_CAPABILITY_RGB; return (mCapabilities & LIGHT_CAPABILITY_COLOR_RGB) == LIGHT_CAPABILITY_COLOR_RGB; } } core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java +8 −8 Original line number Diff line number Diff line Loading @@ -131,7 +131,7 @@ public class InputDeviceLightsManagerTest { new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_BRIGHTNESS), new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, 0 /* capabilities */) }; Loading @@ -150,13 +150,13 @@ public class InputDeviceLightsManagerTest { Light[] mockedLights = { new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(4 /* id */, "Light4", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB) Light.LIGHT_CAPABILITY_COLOR_RGB) }; mockLights(mockedLights); Loading Loading @@ -204,7 +204,7 @@ public class InputDeviceLightsManagerTest { new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_PLAYER_ID, 0 /* capabilities */), new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS), Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS), new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_BRIGHTNESS) }; Loading Loading @@ -239,9 +239,9 @@ public class InputDeviceLightsManagerTest { @Test public void testLightCapabilities() throws Exception { Light light = new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS); Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS); assertThat(light.getType()).isEqualTo(Light.LIGHT_TYPE_INPUT); assertThat(light.getCapabilities()).isEqualTo(Light.LIGHT_CAPABILITY_RGB assertThat(light.getCapabilities()).isEqualTo(Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS); assertTrue(light.hasBrightnessControl()); assertTrue(light.hasRgbControl()); Loading services/core/jni/com_android_server_input_InputManagerService.cpp +21 −15 Original line number Diff line number Diff line Loading @@ -168,8 +168,9 @@ static struct { jmethodID constructor; jfieldID lightTypeInput; jfieldID lightTypePlayerId; jfieldID lightTypeKeyboardBacklight; jfieldID lightCapabilityBrightness; jfieldID lightCapabilityRgb; jfieldID lightCapabilityColorRgb; } gLightClassInfo; static struct { Loading Loading @@ -2011,25 +2012,28 @@ static jobject nativeGetLights(JNIEnv* env, jobject nativeImplObj, jint deviceId jint jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypeInput); jint jCapability = 0; if (lightInfo.type == InputDeviceLightType::MONO) { jCapability = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityBrightness); } else if (lightInfo.type == InputDeviceLightType::RGB || lightInfo.type == InputDeviceLightType::MULTI_COLOR) { jCapability = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityBrightness) | env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityRgb); if (lightInfo.type == InputDeviceLightType::INPUT) { jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypeInput); } else if (lightInfo.type == InputDeviceLightType::PLAYER_ID) { jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypePlayerId); } else if (lightInfo.type == InputDeviceLightType::KEYBOARD_BACKLIGHT) { jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypeKeyboardBacklight); } else { ALOGW("Unknown light type %d", lightInfo.type); continue; } jint jCapability = 0; if (lightInfo.capabilityFlags.test(InputDeviceLightCapability::BRIGHTNESS)) { jCapability |= env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityBrightness); } if (lightInfo.capabilityFlags.test(InputDeviceLightCapability::RGB)) { jCapability |= env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityColorRgb); } ScopedLocalRef<jobject> lightObj(env, env->NewObject(gLightClassInfo.clazz, gLightClassInfo.constructor, Loading Loading @@ -2596,10 +2600,12 @@ int register_android_server_InputManager(JNIEnv* env) { env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_TYPE_INPUT", "I"); gLightClassInfo.lightTypePlayerId = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_TYPE_PLAYER_ID", "I"); gLightClassInfo.lightTypeKeyboardBacklight = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_TYPE_KEYBOARD_BACKLIGHT", "I"); gLightClassInfo.lightCapabilityBrightness = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_CAPABILITY_BRIGHTNESS", "I"); gLightClassInfo.lightCapabilityRgb = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_CAPABILITY_RGB", "I"); gLightClassInfo.lightCapabilityColorRgb = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_CAPABILITY_COLOR_RGB", "I"); // ArrayList FIND_CLASS(gArrayListClassInfo.clazz, "java/util/ArrayList"); Loading Loading
core/api/current.txt +3 −1 Original line number Diff line number Diff line Loading @@ -18646,8 +18646,10 @@ package android.hardware.lights { 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_CAPABILITY_BRIGHTNESS = 1; // 0x1 field public static final int LIGHT_CAPABILITY_RGB = 0; // 0x0 field public static final int LIGHT_CAPABILITY_COLOR_RGB = 2; // 0x2 field @Deprecated public static final int LIGHT_CAPABILITY_RGB = 0; // 0x0 field public static final int LIGHT_TYPE_INPUT = 10001; // 0x2711 field public static final int LIGHT_TYPE_KEYBOARD_BACKLIGHT = 10003; // 0x2713 field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8 field public static final int LIGHT_TYPE_PLAYER_ID = 10002; // 0x2712 }
core/java/android/hardware/lights/Light.java +20 −4 Original line number Diff line number Diff line Loading @@ -59,16 +59,30 @@ public final class Light implements Parcelable { */ public static final int LIGHT_TYPE_PLAYER_ID = 10002; /** * Type for lights that illuminate keyboard keys. */ public static final int LIGHT_TYPE_KEYBOARD_BACKLIGHT = 10003; /** * Capability for lights that could adjust its LED brightness. If the capability is not present * the led can only be turned either on or off. * the LED can only be turned either on or off. */ public static final int LIGHT_CAPABILITY_BRIGHTNESS = 1 << 0; /** * Capability for lights that has red, green and blue LEDs to control the light's color. * Capability for lights that have red, green and blue LEDs to control the light's color. */ public static final int LIGHT_CAPABILITY_COLOR_RGB = 1 << 1; /** * Capability for lights that have red, green and blue LEDs to control the light's color. * * @deprecated Wrong int based flag with value 0. Use capability flag {@code * LIGHT_CAPABILITY_COLOR_RGB} instead. */ public static final int LIGHT_CAPABILITY_RGB = 0 << 1; @Deprecated public static final int LIGHT_CAPABILITY_RGB = 0; /** @hide */ @Retention(RetentionPolicy.SOURCE) Loading @@ -77,6 +91,7 @@ public final class Light implements Parcelable { LIGHT_TYPE_MICROPHONE, LIGHT_TYPE_INPUT, LIGHT_TYPE_PLAYER_ID, LIGHT_TYPE_KEYBOARD_BACKLIGHT, }) public @interface LightType {} Loading @@ -85,6 +100,7 @@ public final class Light implements Parcelable { @IntDef(flag = true, prefix = {"LIGHT_CAPABILITY_"}, value = { LIGHT_CAPABILITY_BRIGHTNESS, LIGHT_CAPABILITY_COLOR_RGB, LIGHT_CAPABILITY_RGB, }) public @interface LightCapability {} Loading Loading @@ -233,7 +249,7 @@ public final class Light implements Parcelable { * @return True if the hardware can control the RGB led, otherwise false. */ public boolean hasRgbControl() { return (mCapabilities & LIGHT_CAPABILITY_RGB) == LIGHT_CAPABILITY_RGB; return (mCapabilities & LIGHT_CAPABILITY_COLOR_RGB) == LIGHT_CAPABILITY_COLOR_RGB; } }
core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java +8 −8 Original line number Diff line number Diff line Loading @@ -131,7 +131,7 @@ public class InputDeviceLightsManagerTest { new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_BRIGHTNESS), new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, 0 /* capabilities */) }; Loading @@ -150,13 +150,13 @@ public class InputDeviceLightsManagerTest { Light[] mockedLights = { new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB), Light.LIGHT_CAPABILITY_COLOR_RGB), new Light(4 /* id */, "Light4", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB) Light.LIGHT_CAPABILITY_COLOR_RGB) }; mockLights(mockedLights); Loading Loading @@ -204,7 +204,7 @@ public class InputDeviceLightsManagerTest { new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_PLAYER_ID, 0 /* capabilities */), new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS), Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS), new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_BRIGHTNESS) }; Loading Loading @@ -239,9 +239,9 @@ public class InputDeviceLightsManagerTest { @Test public void testLightCapabilities() throws Exception { Light light = new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT, Light.LIGHT_CAPABILITY_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS); Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS); assertThat(light.getType()).isEqualTo(Light.LIGHT_TYPE_INPUT); assertThat(light.getCapabilities()).isEqualTo(Light.LIGHT_CAPABILITY_RGB assertThat(light.getCapabilities()).isEqualTo(Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS); assertTrue(light.hasBrightnessControl()); assertTrue(light.hasRgbControl()); Loading
services/core/jni/com_android_server_input_InputManagerService.cpp +21 −15 Original line number Diff line number Diff line Loading @@ -168,8 +168,9 @@ static struct { jmethodID constructor; jfieldID lightTypeInput; jfieldID lightTypePlayerId; jfieldID lightTypeKeyboardBacklight; jfieldID lightCapabilityBrightness; jfieldID lightCapabilityRgb; jfieldID lightCapabilityColorRgb; } gLightClassInfo; static struct { Loading Loading @@ -2011,25 +2012,28 @@ static jobject nativeGetLights(JNIEnv* env, jobject nativeImplObj, jint deviceId jint jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypeInput); jint jCapability = 0; if (lightInfo.type == InputDeviceLightType::MONO) { jCapability = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityBrightness); } else if (lightInfo.type == InputDeviceLightType::RGB || lightInfo.type == InputDeviceLightType::MULTI_COLOR) { jCapability = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityBrightness) | env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityRgb); if (lightInfo.type == InputDeviceLightType::INPUT) { jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypeInput); } else if (lightInfo.type == InputDeviceLightType::PLAYER_ID) { jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypePlayerId); } else if (lightInfo.type == InputDeviceLightType::KEYBOARD_BACKLIGHT) { jTypeId = env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightTypeKeyboardBacklight); } else { ALOGW("Unknown light type %d", lightInfo.type); continue; } jint jCapability = 0; if (lightInfo.capabilityFlags.test(InputDeviceLightCapability::BRIGHTNESS)) { jCapability |= env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityBrightness); } if (lightInfo.capabilityFlags.test(InputDeviceLightCapability::RGB)) { jCapability |= env->GetStaticIntField(gLightClassInfo.clazz, gLightClassInfo.lightCapabilityColorRgb); } ScopedLocalRef<jobject> lightObj(env, env->NewObject(gLightClassInfo.clazz, gLightClassInfo.constructor, Loading Loading @@ -2596,10 +2600,12 @@ int register_android_server_InputManager(JNIEnv* env) { env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_TYPE_INPUT", "I"); gLightClassInfo.lightTypePlayerId = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_TYPE_PLAYER_ID", "I"); gLightClassInfo.lightTypeKeyboardBacklight = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_TYPE_KEYBOARD_BACKLIGHT", "I"); gLightClassInfo.lightCapabilityBrightness = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_CAPABILITY_BRIGHTNESS", "I"); gLightClassInfo.lightCapabilityRgb = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_CAPABILITY_RGB", "I"); gLightClassInfo.lightCapabilityColorRgb = env->GetStaticFieldID(gLightClassInfo.clazz, "LIGHT_CAPABILITY_COLOR_RGB", "I"); // ArrayList FIND_CLASS(gArrayListClassInfo.clazz, "java/util/ArrayList"); Loading