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

Commit 98580a2e authored by Chris Ye's avatar Chris Ye Committed by Android (Google) Code Review
Browse files

Merge changes from topic "LightsManager" into sc-dev

* changes:
  Support input device lights manager feature in frameworks.
  Add SET_REPORT data output to hid commandline tool.
parents 95e716b9 cbb480c2
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -113,9 +113,10 @@ void DeviceCallback::onDeviceGetReport(uint32_t requestId, uint8_t reportId) {
    checkAndClearException(env, "onDeviceGetReport");
}

void DeviceCallback::onDeviceOutput(uint8_t rType, const std::vector<uint8_t>& data) {
void DeviceCallback::onDeviceOutput(uint8_t eventId, uint8_t rType,
                                    const std::vector<uint8_t>& data) {
    JNIEnv* env = getJNIEnv();
    env->CallVoidMethod(mCallbackObject, gDeviceCallbackClassInfo.onDeviceOutput, rType,
    env->CallVoidMethod(mCallbackObject, gDeviceCallbackClassInfo.onDeviceOutput, eventId, rType,
                        toJbyteArray(env, data).get());
    checkAndClearException(env, "onDeviceOutput");
}
@@ -261,6 +262,7 @@ int Device::handleEvents(int events) {
                ALOGD("Received SET_REPORT: id=%" PRIu32 " rnum=%" PRIu8 " data=%s", set_report.id,
                      set_report.rnum, toString(data).c_str());
            }
            mDeviceCallback->onDeviceOutput(UHID_SET_REPORT, set_report.rtype, data);
            break;
        }
        case UHID_OUTPUT: {
@@ -269,7 +271,7 @@ int Device::handleEvents(int events) {
            if (DEBUG_OUTPUT) {
                ALOGD("UHID_OUTPUT rtype=%" PRIu8 " data=%s", output.rtype, toString(data).c_str());
            }
            mDeviceCallback->onDeviceOutput(output.rtype, data);
            mDeviceCallback->onDeviceOutput(UHID_OUTPUT, output.rtype, data);
            break;
        }
        default: {
@@ -365,7 +367,7 @@ int register_com_android_commands_hid_Device(JNIEnv* env) {
    uhid::gDeviceCallbackClassInfo.onDeviceGetReport =
            env->GetMethodID(clazz, "onDeviceGetReport", "(II)V");
    uhid::gDeviceCallbackClassInfo.onDeviceOutput =
            env->GetMethodID(clazz, "onDeviceOutput", "(B[B)V");
            env->GetMethodID(clazz, "onDeviceOutput", "(BB[B)V");
    uhid::gDeviceCallbackClassInfo.onDeviceError =
            env->GetMethodID(clazz, "onDeviceError", "()V");
    if (uhid::gDeviceCallbackClassInfo.onDeviceOpen == NULL ||
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ public:

    void onDeviceOpen();
    void onDeviceGetReport(uint32_t requestId, uint8_t reportId);
    void onDeviceOutput(uint8_t rType, const std::vector<uint8_t>& data);
    void onDeviceOutput(uint8_t eventId, uint8_t rType, const std::vector<uint8_t>& data);
    void onDeviceError();

private:
+4 −3
Original line number Diff line number Diff line
@@ -46,7 +46,8 @@ public class Device {

    // Sync with linux uhid_event_type::UHID_OUTPUT
    private static final byte UHID_EVENT_TYPE_UHID_OUTPUT = 6;

    // Sync with linux uhid_event_type::UHID_SET_REPORT
    private static final byte UHID_EVENT_TYPE_SET_REPORT = 13;
    private final int mId;
    private final HandlerThread mThread;
    private final DeviceHandler mHandler;
@@ -199,10 +200,10 @@ public class Device {
        }

        // native callback
        public void onDeviceOutput(byte rtype, byte[] data) {
        public void onDeviceOutput(byte eventId, byte rtype, byte[] data) {
            JSONObject json = new JSONObject();
            try {
                json.put("eventId", UHID_EVENT_TYPE_UHID_OUTPUT);
                json.put("eventId", eventId);
                json.put("deviceId", mId);
                json.put("reportType", rtype);
                JSONArray dataArray = new JSONArray();
+53 −0
Original line number Diff line number Diff line
@@ -18659,6 +18659,58 @@ package android.hardware.input {
}
package android.hardware.lights {
  public final class Light implements android.os.Parcelable {
    method public int describeContents();
    method public int getId();
    method @NonNull public String getName();
    method public int getOrdinal();
    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_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 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();
    method @NonNull public abstract android.hardware.lights.LightsManager.LightsSession openSession();
  }
  public abstract static class LightsManager.LightsSession implements java.lang.AutoCloseable {
    ctor public LightsManager.LightsSession();
    method public abstract void close();
    method public abstract void requestLights(@NonNull android.hardware.lights.LightsRequest);
  }
  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();
  }
  public static final class LightsRequest.Builder {
    ctor public LightsRequest.Builder();
    method @NonNull public android.hardware.lights.LightsRequest.Builder addLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
    method @NonNull public android.hardware.lights.LightsRequest build();
    method @NonNull public android.hardware.lights.LightsRequest.Builder clearLight(@NonNull android.hardware.lights.Light);
  }
}
package android.hardware.usb {
  public class UsbAccessory implements android.os.Parcelable {
@@ -46898,6 +46950,7 @@ package android.view {
    method public int getId();
    method public android.view.KeyCharacterMap getKeyCharacterMap();
    method public int getKeyboardType();
    method @NonNull public android.hardware.lights.LightsManager getLightsManager();
    method public android.view.InputDevice.MotionRange getMotionRange(int);
    method public android.view.InputDevice.MotionRange getMotionRange(int, int);
    method public java.util.List<android.view.InputDevice.MotionRange> getMotionRanges();
+3 −33
Original line number Diff line number Diff line
@@ -3398,42 +3398,12 @@ package android.hardware.hdmi {
package android.hardware.lights {
  public final class Light implements android.os.Parcelable {
    method public int describeContents();
    method public int getId();
    method public int getOrdinal();
    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;
  }
  public final class LightState implements android.os.Parcelable {
    ctor public LightState(@ColorInt int);
    method public int describeContents();
    method @ColorInt public int getColor();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.LightState> CREATOR;
  }
  public final class LightsManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public java.util.List<android.hardware.lights.Light> getLights();
    method @NonNull @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public android.hardware.lights.LightsManager.LightsSession openSession();
    field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
  }
  public final class LightsManager.LightsSession implements java.lang.AutoCloseable {
    method @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public void close();
    method @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public void requestLights(@NonNull android.hardware.lights.LightsRequest);
  }
  public final class LightsRequest {
    ctor @Deprecated public LightState(@ColorInt int);
  }
  public static final class LightsRequest.Builder {
    ctor public LightsRequest.Builder();
    method @NonNull public android.hardware.lights.LightsRequest build();
    method @NonNull public android.hardware.lights.LightsRequest.Builder clearLight(@NonNull android.hardware.lights.Light);
    method @NonNull public android.hardware.lights.LightsRequest.Builder setLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
  public abstract class LightsManager {
    field @Deprecated public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
  }
}
Loading