Loading services/core/jni/com_android_server_lights_LightsService.cpp +64 −46 Original line number Original line Diff line number Diff line Loading @@ -43,63 +43,46 @@ static sp<ILight> gLight; static bool validate(jint light, jint flash, jint brightness) { static bool validate(jint light, jint flash, jint brightness) { bool valid = true; bool valid = true; if (light < 0 || light >= static_cast<int>(Type::COUNT)) { if (light < 0 || light >= static_cast<jint>(Type::COUNT)) { ALOGE("Invalid light parameter %d.", light); ALOGE("Invalid light parameter %d.", light); valid = false; valid = false; } } if (flash != static_cast<int>(Flash::NONE) && if (flash != static_cast<jint>(Flash::NONE) && flash != static_cast<int>(Flash::TIMED) && flash != static_cast<jint>(Flash::TIMED) && flash != static_cast<int>(Flash::HARDWARE)) { flash != static_cast<jint>(Flash::HARDWARE)) { ALOGE("Invalid flash parameter %d.", flash); ALOGE("Invalid flash parameter %d.", flash); valid = false; valid = false; } } if (brightness != static_cast<int>(Brightness::USER) && if (brightness != static_cast<jint>(Brightness::USER) && brightness != static_cast<int>(Brightness::SENSOR) && brightness != static_cast<jint>(Brightness::SENSOR) && brightness != static_cast<int>(Brightness::LOW_PERSISTENCE)) { brightness != static_cast<jint>(Brightness::LOW_PERSISTENCE)) { ALOGE("Invalid brightness parameter %d.", brightness); ALOGE("Invalid brightness parameter %d.", brightness); valid = false; valid = false; } } if (brightness == static_cast<jint>(Brightness::LOW_PERSISTENCE) && light != static_cast<jint>(Type::BACKLIGHT)) { ALOGE("Cannot set low-persistence mode for non-backlight device."); valid = false; } return valid; return valid; } } static void setLight_native( static LightState constructState( JNIEnv* /* env */, jobject /* clazz */, jint light, jint colorARGB, jint colorARGB, jint flashMode, jint flashMode, jint onMS, jint onMS, jint offMS, jint offMS, jint brightnessMode){ jint brightnessMode){ if (!validate(light, flashMode, brightnessMode)) { return; } // TODO(b/31632518) if (gLight == nullptr) { gLight = ILight::getService(); } if (gLight == nullptr) { ALOGE("LightService unable to get ILight interface."); return; } Type type = static_cast<Type>(light); Flash flash = static_cast<Flash>(flashMode); Flash flash = static_cast<Flash>(flashMode); Brightness brightness = static_cast<Brightness>(brightnessMode); Brightness brightness = static_cast<Brightness>(brightnessMode); LightState state{}; LightState state{}; if (brightnessMode == static_cast<int>(Brightness::LOW_PERSISTENCE)) { if (brightness == Brightness::LOW_PERSISTENCE) { if (light != static_cast<int>(Type::BACKLIGHT)) { ALOGE("Cannot set low-persistence mode for non-backlight device."); return; } state.flashMode = Flash::NONE; state.flashMode = Flash::NONE; } else { } else { // Only set non-brightness settings when not in low-persistence mode // Only set non-brightness settings when not in low-persistence mode Loading @@ -111,27 +94,28 @@ static void setLight_native( state.color = colorARGB; state.color = colorARGB; state.brightnessMode = brightness; state.brightnessMode = brightness; Status status; return state; { } ALOGD_IF_SLOW(50, "Excessive delay setting light"); Return<Status> ret = gLight->setLight(type, state); static void processReturn( const Return<Status> &ret, Type type, const LightState &state) { if (!ret.isOk()) { if (!ret.isOk()) { ALOGE("Failed to issue set light command."); ALOGE("Failed to issue set light command."); gLight = nullptr; return; return; } } status = static_cast<Status>(ret); // hal status switch (static_cast<Status>(ret)) { } switch (status) { case Status::SUCCESS: case Status::SUCCESS: break; break; case Status::LIGHT_NOT_SUPPORTED: case Status::LIGHT_NOT_SUPPORTED: ALOGE("Light requested not availale on this device."); ALOGE("Light requested not available on this device. %d", type); break; break; case Status::BRIGHTNESS_NOT_SUPPORTED: case Status::BRIGHTNESS_NOT_SUPPORTED: ALOGE("Brightness parameter not supported on this device."); ALOGE("Brightness parameter not supported on this device: %d", state.brightnessMode); break; break; case Status::UNKNOWN: case Status::UNKNOWN: default: default: Loading @@ -139,6 +123,40 @@ static void setLight_native( } } } } static void setLight_native( JNIEnv* /* env */, jobject /* clazz */, jint light, jint colorARGB, jint flashMode, jint onMS, jint offMS, jint brightnessMode) { if (!validate(light, flashMode, brightnessMode)) { return; } if (gLight == nullptr || !gLight->ping().isOk()) { gLight = ILight::getService(); } if (gLight == nullptr) { ALOGE("Unable to get ILight interface."); return; } Type type = static_cast<Type>(light); LightState state = constructState( colorARGB, flashMode, onMS, offMS, brightnessMode); { ALOGD_IF_SLOW(50, "Excessive delay setting light"); Return<Status> ret = gLight->setLight(type, state); processReturn(ret, type, state); } } static const JNINativeMethod method_table[] = { static const JNINativeMethod method_table[] = { { "setLight_native", "(IIIIII)V", (void*)setLight_native }, { "setLight_native", "(IIIIII)V", (void*)setLight_native }, }; }; Loading Loading
services/core/jni/com_android_server_lights_LightsService.cpp +64 −46 Original line number Original line Diff line number Diff line Loading @@ -43,63 +43,46 @@ static sp<ILight> gLight; static bool validate(jint light, jint flash, jint brightness) { static bool validate(jint light, jint flash, jint brightness) { bool valid = true; bool valid = true; if (light < 0 || light >= static_cast<int>(Type::COUNT)) { if (light < 0 || light >= static_cast<jint>(Type::COUNT)) { ALOGE("Invalid light parameter %d.", light); ALOGE("Invalid light parameter %d.", light); valid = false; valid = false; } } if (flash != static_cast<int>(Flash::NONE) && if (flash != static_cast<jint>(Flash::NONE) && flash != static_cast<int>(Flash::TIMED) && flash != static_cast<jint>(Flash::TIMED) && flash != static_cast<int>(Flash::HARDWARE)) { flash != static_cast<jint>(Flash::HARDWARE)) { ALOGE("Invalid flash parameter %d.", flash); ALOGE("Invalid flash parameter %d.", flash); valid = false; valid = false; } } if (brightness != static_cast<int>(Brightness::USER) && if (brightness != static_cast<jint>(Brightness::USER) && brightness != static_cast<int>(Brightness::SENSOR) && brightness != static_cast<jint>(Brightness::SENSOR) && brightness != static_cast<int>(Brightness::LOW_PERSISTENCE)) { brightness != static_cast<jint>(Brightness::LOW_PERSISTENCE)) { ALOGE("Invalid brightness parameter %d.", brightness); ALOGE("Invalid brightness parameter %d.", brightness); valid = false; valid = false; } } if (brightness == static_cast<jint>(Brightness::LOW_PERSISTENCE) && light != static_cast<jint>(Type::BACKLIGHT)) { ALOGE("Cannot set low-persistence mode for non-backlight device."); valid = false; } return valid; return valid; } } static void setLight_native( static LightState constructState( JNIEnv* /* env */, jobject /* clazz */, jint light, jint colorARGB, jint colorARGB, jint flashMode, jint flashMode, jint onMS, jint onMS, jint offMS, jint offMS, jint brightnessMode){ jint brightnessMode){ if (!validate(light, flashMode, brightnessMode)) { return; } // TODO(b/31632518) if (gLight == nullptr) { gLight = ILight::getService(); } if (gLight == nullptr) { ALOGE("LightService unable to get ILight interface."); return; } Type type = static_cast<Type>(light); Flash flash = static_cast<Flash>(flashMode); Flash flash = static_cast<Flash>(flashMode); Brightness brightness = static_cast<Brightness>(brightnessMode); Brightness brightness = static_cast<Brightness>(brightnessMode); LightState state{}; LightState state{}; if (brightnessMode == static_cast<int>(Brightness::LOW_PERSISTENCE)) { if (brightness == Brightness::LOW_PERSISTENCE) { if (light != static_cast<int>(Type::BACKLIGHT)) { ALOGE("Cannot set low-persistence mode for non-backlight device."); return; } state.flashMode = Flash::NONE; state.flashMode = Flash::NONE; } else { } else { // Only set non-brightness settings when not in low-persistence mode // Only set non-brightness settings when not in low-persistence mode Loading @@ -111,27 +94,28 @@ static void setLight_native( state.color = colorARGB; state.color = colorARGB; state.brightnessMode = brightness; state.brightnessMode = brightness; Status status; return state; { } ALOGD_IF_SLOW(50, "Excessive delay setting light"); Return<Status> ret = gLight->setLight(type, state); static void processReturn( const Return<Status> &ret, Type type, const LightState &state) { if (!ret.isOk()) { if (!ret.isOk()) { ALOGE("Failed to issue set light command."); ALOGE("Failed to issue set light command."); gLight = nullptr; return; return; } } status = static_cast<Status>(ret); // hal status switch (static_cast<Status>(ret)) { } switch (status) { case Status::SUCCESS: case Status::SUCCESS: break; break; case Status::LIGHT_NOT_SUPPORTED: case Status::LIGHT_NOT_SUPPORTED: ALOGE("Light requested not availale on this device."); ALOGE("Light requested not available on this device. %d", type); break; break; case Status::BRIGHTNESS_NOT_SUPPORTED: case Status::BRIGHTNESS_NOT_SUPPORTED: ALOGE("Brightness parameter not supported on this device."); ALOGE("Brightness parameter not supported on this device: %d", state.brightnessMode); break; break; case Status::UNKNOWN: case Status::UNKNOWN: default: default: Loading @@ -139,6 +123,40 @@ static void setLight_native( } } } } static void setLight_native( JNIEnv* /* env */, jobject /* clazz */, jint light, jint colorARGB, jint flashMode, jint onMS, jint offMS, jint brightnessMode) { if (!validate(light, flashMode, brightnessMode)) { return; } if (gLight == nullptr || !gLight->ping().isOk()) { gLight = ILight::getService(); } if (gLight == nullptr) { ALOGE("Unable to get ILight interface."); return; } Type type = static_cast<Type>(light); LightState state = constructState( colorARGB, flashMode, onMS, offMS, brightnessMode); { ALOGD_IF_SLOW(50, "Excessive delay setting light"); Return<Status> ret = gLight->setLight(type, state); processReturn(ret, type, state); } } static const JNINativeMethod method_table[] = { static const JNINativeMethod method_table[] = { { "setLight_native", "(IIIIII)V", (void*)setLight_native }, { "setLight_native", "(IIIIII)V", (void*)setLight_native }, }; }; Loading