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

Commit 5c2bccc9 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari Committed by Android (Google) Code Review
Browse files

Merge "Add support for KEYBOARD_BACKLIGHT to LightsManager API"

parents 8eb24f5f e11ba33b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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
  }
+20 −4
Original line number Diff line number Diff line
@@ -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)
@@ -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 {}

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

}
+8 −8
Original line number Diff line number Diff line
@@ -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 */)
        };
@@ -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);

@@ -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)
        };
@@ -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());
+21 −15
Original line number Diff line number Diff line
@@ -168,8 +168,9 @@ static struct {
    jmethodID constructor;
    jfieldID lightTypeInput;
    jfieldID lightTypePlayerId;
    jfieldID lightTypeKeyboardBacklight;
    jfieldID lightCapabilityBrightness;
    jfieldID lightCapabilityRgb;
    jfieldID lightCapabilityColorRgb;
} gLightClassInfo;

static struct {
@@ -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,
@@ -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");