From 527ed44dfea2e561981cc61d4b8d83c6a2d7281d Mon Sep 17 00:00:00 2001 From: "Harpreet \\\"Eli\\\" Sangha" Date: Thu, 7 Nov 2019 17:29:36 +0900 Subject: VibratorService: avoid shim In preparation to remove 1.4. Bug: 141828236 Test: P4 boot and vibrator works Test: P4 atest android.os.cts.VibratorTest Test: P2 boot and vibrator works Test: P2 atest android.os.cts.VibratorTest Change-Id: I83c1770191a57da5aa01173bfe928a1664c781d9 --- .../jni/com_android_server_VibratorService.cpp | 493 +++++++++++---------- 1 file changed, 257 insertions(+), 236 deletions(-) diff --git a/services/core/jni/com_android_server_VibratorService.cpp b/services/core/jni/com_android_server_VibratorService.cpp index 372622801aa0..4df5ba39669e 100644 --- a/services/core/jni/com_android_server_VibratorService.cpp +++ b/services/core/jni/com_android_server_VibratorService.cpp @@ -50,159 +50,40 @@ namespace android { static jmethodID sMethodIdOnComplete; -// TODO(b/141828236): remove HIDL 1.4 and re-write all of this code to remove -// shim -class VibratorShim : public V1_4::IVibrator { - public: - VibratorShim(const sp& vib) : mVib(vib) {} - - Return on(uint32_t timeoutMs) override { - return on_1_4(timeoutMs, nullptr); - } - - Return off() override { - return toHidlStatus(mVib->off()); - } - - Return supportsAmplitudeControl() override { - int32_t cap = 0; - if (!mVib->getCapabilities(&cap).isOk()) return false; - if (mUnderExternalControl) { - return (cap & aidl::IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL) > 0; - } else { - return (cap & aidl::IVibrator::CAP_AMPLITUDE_CONTROL) > 0; - } - } - - Return setAmplitude(uint8_t amplitude) override { - return toHidlStatus(mVib->setAmplitude(amplitude)); - } - - Return perform(V1_0::Effect effect, V1_0::EffectStrength strength, - perform_cb _hidl_cb) override { - return perform_1_4(static_cast(effect), strength, nullptr, _hidl_cb); - } - - Return perform_1_1(V1_1::Effect_1_1 effect, V1_0::EffectStrength strength, - perform_1_1_cb _hidl_cb) override { - return perform_1_4(static_cast(effect), strength, nullptr, _hidl_cb); - } - - Return perform_1_2(V1_2::Effect effect, V1_0::EffectStrength strength, - perform_1_2_cb _hidl_cb) override { - return perform_1_4(static_cast(effect), strength, nullptr, _hidl_cb); - } - - Return supportsExternalControl() override { - int32_t cap = 0; - if (!mVib->getCapabilities(&cap).isOk()) return false; - return (cap & aidl::IVibrator::CAP_EXTERNAL_CONTROL) > 0; - } - - Return setExternalControl(bool enabled) override { - Return status = toHidlStatus(mVib->setExternalControl(enabled)); - if (status.isOk() && status == V1_0::Status::OK) { - mUnderExternalControl = enabled; - } - return status; - } - - Return perform_1_3(V1_3::Effect effect, V1_0::EffectStrength strength, - perform_1_3_cb _hidl_cb) override { - return perform_1_4(static_cast(effect), strength, nullptr, _hidl_cb); - } - - Return getCapabilities() override { - static_assert(static_cast(V1_4::Capabilities::ON_COMPLETION_CALLBACK) == - static_cast(aidl::IVibrator::CAP_ON_CALLBACK)); - static_assert(static_cast(V1_4::Capabilities::PERFORM_COMPLETION_CALLBACK) == - static_cast(aidl::IVibrator::CAP_PERFORM_CALLBACK)); - - int32_t cap; - if (!mVib->getCapabilities(&cap).isOk()) return 0; - return (cap & (aidl::IVibrator::CAP_ON_CALLBACK | - aidl::IVibrator::CAP_PERFORM_CALLBACK)) > 0; - } - - Return on_1_4(uint32_t timeoutMs, - const sp& callback) override { - sp cb = callback ? new CallbackShim(callback) : nullptr; - return toHidlStatus(mVib->on(timeoutMs, cb)); - } - - Return perform_1_4(V1_3::Effect effect, V1_0::EffectStrength strength, - const sp& callback, - perform_1_4_cb _hidl_cb) override { - static_assert(static_cast(V1_0::EffectStrength::LIGHT) == - static_cast(aidl::EffectStrength::LIGHT)); - static_assert(static_cast(V1_0::EffectStrength::MEDIUM) == - static_cast(aidl::EffectStrength::MEDIUM)); - static_assert(static_cast(V1_0::EffectStrength::STRONG) == - static_cast(aidl::EffectStrength::STRONG)); - static_assert(static_cast(V1_3::Effect::CLICK) == - static_cast(aidl::Effect::CLICK)); - static_assert(static_cast(V1_3::Effect::DOUBLE_CLICK) == - static_cast(aidl::Effect::DOUBLE_CLICK)); - static_assert(static_cast(V1_3::Effect::TICK) == - static_cast(aidl::Effect::TICK)); - static_assert(static_cast(V1_3::Effect::THUD) == - static_cast(aidl::Effect::THUD)); - static_assert(static_cast(V1_3::Effect::POP) == - static_cast(aidl::Effect::POP)); - static_assert(static_cast(V1_3::Effect::HEAVY_CLICK) == - static_cast(aidl::Effect::HEAVY_CLICK)); - static_assert(static_cast(V1_3::Effect::RINGTONE_1) == - static_cast(aidl::Effect::RINGTONE_1)); - static_assert(static_cast(V1_3::Effect::RINGTONE_2) == - static_cast(aidl::Effect::RINGTONE_2)); - static_assert(static_cast(V1_3::Effect::RINGTONE_15) == - static_cast(aidl::Effect::RINGTONE_15)); - static_assert(static_cast(V1_3::Effect::TEXTURE_TICK) == - static_cast(aidl::Effect::TEXTURE_TICK)); - - sp cb = callback ? new CallbackShim(callback) : nullptr; - int timeoutMs = 0; - Return status = toHidlStatus( - mVib->perform(static_cast(effect), - static_cast(strength), cb, &timeoutMs)); - - if (status.isOk()) { - _hidl_cb(status, timeoutMs); - return android::hardware::Status::ok(); - } else { - return android::hardware::details::StatusOf(status); - } - } - private: - sp mVib; - bool mUnderExternalControl = false; - - Return toHidlStatus(const android::binder::Status& status) { - switch(status.exceptionCode()) { - using android::hardware::Status; - case Status::EX_NONE: return V1_0::Status::OK; - case Status::EX_ILLEGAL_ARGUMENT: return V1_0::Status::BAD_VALUE; - case Status::EX_UNSUPPORTED_OPERATION: return V1_0::Status::UNSUPPORTED_OPERATION; - case Status::EX_TRANSACTION_FAILED: { - return Status::fromStatusT(status.transactionError()); - } - } - return V1_0::Status::UNKNOWN_ERROR; - } - - class CallbackShim : public aidl::BnVibratorCallback { - public: - CallbackShim(const sp& cb) : mCb(cb) {} - binder::Status onComplete() { - mCb->onComplete(); - return binder::Status::ok(); // oneway, local call - } - private: - sp mCb; - }; -}; - -class VibratorCallback : public V1_4::IVibratorCallback { +static_assert(static_cast(V1_0::EffectStrength::LIGHT) == + static_cast(aidl::EffectStrength::LIGHT)); +static_assert(static_cast(V1_0::EffectStrength::MEDIUM) == + static_cast(aidl::EffectStrength::MEDIUM)); +static_assert(static_cast(V1_0::EffectStrength::STRONG) == + static_cast(aidl::EffectStrength::STRONG)); + +static_assert(static_cast(V1_3::Effect::CLICK) == + static_cast(aidl::Effect::CLICK)); +static_assert(static_cast(V1_3::Effect::DOUBLE_CLICK) == + static_cast(aidl::Effect::DOUBLE_CLICK)); +static_assert(static_cast(V1_3::Effect::TICK) == + static_cast(aidl::Effect::TICK)); +static_assert(static_cast(V1_3::Effect::THUD) == + static_cast(aidl::Effect::THUD)); +static_assert(static_cast(V1_3::Effect::POP) == + static_cast(aidl::Effect::POP)); +static_assert(static_cast(V1_3::Effect::HEAVY_CLICK) == + static_cast(aidl::Effect::HEAVY_CLICK)); +static_assert(static_cast(V1_3::Effect::RINGTONE_1) == + static_cast(aidl::Effect::RINGTONE_1)); +static_assert(static_cast(V1_3::Effect::RINGTONE_2) == + static_cast(aidl::Effect::RINGTONE_2)); +static_assert(static_cast(V1_3::Effect::RINGTONE_15) == + static_cast(aidl::Effect::RINGTONE_15)); +static_assert(static_cast(V1_3::Effect::TEXTURE_TICK) == + static_cast(aidl::Effect::TEXTURE_TICK)); + +static_assert(static_cast(V1_4::Capabilities::ON_COMPLETION_CALLBACK) == + static_cast(aidl::IVibrator::CAP_ON_CALLBACK)); +static_assert(static_cast(V1_4::Capabilities::PERFORM_COMPLETION_CALLBACK) == + static_cast(aidl::IVibrator::CAP_PERFORM_CALLBACK)); + +class VibratorCallback { public: VibratorCallback(JNIEnv *env, jobject vibration) : mVibration(MakeGlobalRefOrDie(env, vibration)) {} @@ -212,47 +93,106 @@ class VibratorCallback : public V1_4::IVibratorCallback { env->DeleteGlobalRef(mVibration); } - Return onComplete() override { + void onComplete() { auto env = AndroidRuntime::getJNIEnv(); env->CallVoidMethod(mVibration, sMethodIdOnComplete); - return Void(); } private: jobject mVibration; }; +class HidlVibratorCallback : public V1_4::IVibratorCallback { + public: + HidlVibratorCallback(JNIEnv *env, jobject vibration) : + mCb(env, vibration) {} + + Return onComplete() override { + mCb.onComplete(); + return Void(); + } + + private: + VibratorCallback mCb; +}; + +class AidlVibratorCallback : public aidl::BnVibratorCallback { + public: + AidlVibratorCallback(JNIEnv *env, jobject vibration) : + mCb(env, vibration) {} + + binder::Status onComplete() override { + mCb.onComplete(); + return binder::Status::ok(); // oneway, local call + } + + private: + VibratorCallback mCb; +}; + static constexpr int NUM_TRIES = 2; +template +inline R NoneStatus() { + using ::android::hardware::Status; + return Status::fromExceptionCode(Status::EX_NONE); +} + +template<> +inline binder::Status NoneStatus() { + using binder::Status; + return Status::fromExceptionCode(Status::EX_NONE); +} + // Creates a Return with STATUS::EX_NULL_POINTER. template -inline Return NullptrStatus() { +inline R NullptrStatus() { using ::android::hardware::Status; - return Return{Status::fromExceptionCode(Status::EX_NULL_POINTER)}; + return Status::fromExceptionCode(Status::EX_NULL_POINTER); +} + +template<> +inline binder::Status NullptrStatus() { + using binder::Status; + return Status::fromExceptionCode(Status::EX_NULL_POINTER); +} + +template +sp getService() { + return I::getService(); +} + +template <> +sp getService() { + return waitForVintfService(); +} + +template +sp tryGetService() { + return I::tryGetService(); +} + +template <> +sp tryGetService() { + return checkVintfService(); } template class HalWrapper { public: static std::unique_ptr Create() { - sp aidlVib = waitForVintfService(); - if (aidlVib) { - return std::unique_ptr(new HalWrapper(new VibratorShim(aidlVib))); - } - // Assume that if getService returns a nullptr, HAL is not available on the // device. - auto hal = I::getService(); + auto hal = getService(); return hal ? std::unique_ptr(new HalWrapper(std::move(hal))) : nullptr; } // Helper used to transparently deal with the vibrator HAL becoming unavailable. template - Return call(Return (I::* fn)(Args0...), Args1&&... args1) { + R call(R (I::* fn)(Args0...), Args1&&... args1) { // Return doesn't have a default constructor, so make a Return with // STATUS::EX_NONE. - using ::android::hardware::Status; - Return ret{Status::fromExceptionCode(Status::EX_NONE)}; + R ret{NoneStatus()}; // Note that ret is guaranteed to be changed after this loop. for (int i = 0; i < NUM_TRIES; ++i) { @@ -266,12 +206,7 @@ class HalWrapper { ALOGE("Failed to issue command to vibrator HAL. Retrying."); // Restoring connection to the HAL. - sp aidlVib = checkVintfService(); - if (aidlVib) { - mHal = new VibratorShim(aidlVib); - } else { - mHal = I::tryGetService(); - } + mHal = tryGetService(); } return ret; } @@ -290,7 +225,7 @@ static auto getHal() { } template -Return halCall(Return (I::* fn)(Args0...), Args1&&... args1) { +R halCall(R (I::* fn)(Args0...), Args1&&... args1) { auto hal = getHal(); return hal ? hal->call(fn, std::forward(args1)...) : NullptrStatus(); } @@ -307,110 +242,196 @@ bool isValidEffect(jlong effect) { static void vibratorInit(JNIEnv *env, jclass clazz) { - halCall(&V1_0::IVibrator::ping).isOk(); + if (auto hal = getHal()) { + // IBinder::pingBinder isn't accessible as a pointer function + // but getCapabilities can serve the same purpose + int32_t cap; + hal->call(&aidl::IVibrator::getCapabilities, &cap).isOk(); + } else { + halCall(&V1_0::IVibrator::ping).isOk(); + } } static jboolean vibratorExists(JNIEnv* /* env */, jclass /* clazz */) { - return halCall(&V1_0::IVibrator::ping).isOk() ? JNI_TRUE : JNI_FALSE; + bool ok; + + if (auto hal = getHal()) { + // IBinder::pingBinder isn't accessible as a pointer function + // but getCapabilities can serve the same purpose + int32_t cap; + ok = hal->call(&aidl::IVibrator::getCapabilities, &cap).isOk(); + } else { + ok = halCall(&V1_0::IVibrator::ping).isOk(); + } + return ok ? JNI_TRUE : JNI_FALSE; } static void vibratorOn(JNIEnv* /* env */, jclass /* clazz */, jlong timeout_ms) { - Status retStatus = halCall(&V1_0::IVibrator::on, timeout_ms).withDefault(Status::UNKNOWN_ERROR); - if (retStatus != Status::OK) { - ALOGE("vibratorOn command failed (%" PRIu32 ").", static_cast(retStatus)); + if (auto hal = getHal()) { + auto status = hal->call(&aidl::IVibrator::on, timeout_ms, nullptr); + if (!status.isOk()) { + ALOGE("vibratorOn command failed: %s", status.toString8().string()); + } + } else { + Status retStatus = halCall(&V1_0::IVibrator::on, timeout_ms).withDefault(Status::UNKNOWN_ERROR); + if (retStatus != Status::OK) { + ALOGE("vibratorOn command failed (%" PRIu32 ").", static_cast(retStatus)); + } } } static void vibratorOff(JNIEnv* /* env */, jclass /* clazz */) { - Status retStatus = halCall(&V1_0::IVibrator::off).withDefault(Status::UNKNOWN_ERROR); - if (retStatus != Status::OK) { - ALOGE("vibratorOff command failed (%" PRIu32 ").", static_cast(retStatus)); + if (auto hal = getHal()) { + auto status = hal->call(&aidl::IVibrator::off); + if (!status.isOk()) { + ALOGE("vibratorOff command failed: %s", status.toString8().string()); + } + } else { + Status retStatus = halCall(&V1_0::IVibrator::off).withDefault(Status::UNKNOWN_ERROR); + if (retStatus != Status::OK) { + ALOGE("vibratorOff command failed (%" PRIu32 ").", static_cast(retStatus)); + } } } static jlong vibratorSupportsAmplitudeControl(JNIEnv*, jclass) { - return halCall(&V1_0::IVibrator::supportsAmplitudeControl).withDefault(false); + if (auto hal = getHal()) { + int32_t cap = 0; + if (!hal->call(&aidl::IVibrator::getCapabilities, &cap).isOk()) { + return false; + } + return (cap & aidl::IVibrator::CAP_AMPLITUDE_CONTROL) > 0; + } else { + return halCall(&V1_0::IVibrator::supportsAmplitudeControl).withDefault(false); + } } static void vibratorSetAmplitude(JNIEnv*, jclass, jint amplitude) { - Status status = halCall(&V1_0::IVibrator::setAmplitude, static_cast(amplitude)) - .withDefault(Status::UNKNOWN_ERROR); - if (status != Status::OK) { - ALOGE("Failed to set vibrator amplitude (%" PRIu32 ").", - static_cast(status)); + if (auto hal = getHal()) { + auto status = hal->call(&aidl::IVibrator::IVibrator::setAmplitude, amplitude); + if (!status.isOk()) { + ALOGE("Failed to set vibrator amplitude: %s", status.toString8().string()); + } + } else { + Status status = halCall(&V1_0::IVibrator::setAmplitude, static_cast(amplitude)) + .withDefault(Status::UNKNOWN_ERROR); + if (status != Status::OK) { + ALOGE("Failed to set vibrator amplitude (%" PRIu32 ").", + static_cast(status)); + } } } static jboolean vibratorSupportsExternalControl(JNIEnv*, jclass) { - return halCall(&V1_3::IVibrator::supportsExternalControl).withDefault(false); + if (auto hal = getHal()) { + int32_t cap = 0; + if (!hal->call(&aidl::IVibrator::getCapabilities, &cap).isOk()) { + return false; + } + return (cap & aidl::IVibrator::CAP_EXTERNAL_CONTROL) > 0; + } else { + return halCall(&V1_3::IVibrator::supportsExternalControl).withDefault(false); + } } static void vibratorSetExternalControl(JNIEnv*, jclass, jboolean enabled) { - Status status = halCall(&V1_3::IVibrator::setExternalControl, static_cast(enabled)) - .withDefault(Status::UNKNOWN_ERROR); - if (status != Status::OK) { - ALOGE("Failed to set vibrator external control (%" PRIu32 ").", - static_cast(status)); + if (auto hal = getHal()) { + auto status = hal->call(&aidl::IVibrator::IVibrator::setExternalControl, enabled); + if (!status.isOk()) { + ALOGE("Failed to set vibrator external control: %s", status.toString8().string()); + } + } else { + Status status = halCall(&V1_3::IVibrator::setExternalControl, static_cast(enabled)) + .withDefault(Status::UNKNOWN_ERROR); + if (status != Status::OK) { + ALOGE("Failed to set vibrator external control (%" PRIu32 ").", + static_cast(status)); + } } } static jlong vibratorPerformEffect(JNIEnv* env, jclass, jlong effect, jlong strength, jobject vibration) { - Status status; - uint32_t lengthMs; - auto callback = [&status, &lengthMs](Status retStatus, uint32_t retLengthMs) { - status = retStatus; - lengthMs = retLengthMs; - }; - EffectStrength effectStrength(static_cast(strength)); - - Return ret; - if (auto hal = getHal(); hal && isValidEffect(effect)) { - sp effectCallback = new VibratorCallback(env, vibration); - ret = hal->call(&V1_4::IVibrator::perform_1_4, static_cast(effect), - effectStrength, effectCallback, callback); - } else if (isValidEffect(effect)) { - ret = halCall(&V1_0::IVibrator::perform, static_cast(effect), - effectStrength, callback); - } else if (isValidEffect(effect)) { - ret = halCall(&V1_1::IVibrator::perform_1_1, static_cast(effect), - effectStrength, callback); - } else if (isValidEffect(effect)) { - ret = halCall(&V1_2::IVibrator::perform_1_2, static_cast(effect), - effectStrength, callback); - } else if (isValidEffect(effect)) { - ret = halCall(&V1_3::IVibrator::perform_1_3, static_cast(effect), - effectStrength, callback); + if (auto hal = getHal()) { + int32_t lengthMs; + sp effectCallback = new AidlVibratorCallback(env, vibration); + aidl::Effect effectType(static_cast(strength)); + aidl::EffectStrength effectStrength(static_cast(strength)); + + auto status = hal->call(&aidl::IVibrator::perform, effectType, effectStrength, effectCallback, &lengthMs); + if (!status.isOk()) { + if (status.exceptionCode() != binder::Status::EX_UNSUPPORTED_OPERATION) { + ALOGE("Failed to perform haptic effect: effect=%" PRId64 ", strength=%" PRId32 + ": %s", static_cast(effect), static_cast(strength), status.toString8().string()); + } + return -1; + } + return lengthMs; } else { - ALOGW("Unable to perform haptic effect, invalid effect ID (%" PRId32 ")", - static_cast(effect)); - return -1; - } + Status status; + uint32_t lengthMs; + auto callback = [&status, &lengthMs](Status retStatus, uint32_t retLengthMs) { + status = retStatus; + lengthMs = retLengthMs; + }; + EffectStrength effectStrength(static_cast(strength)); + + Return ret; + if (auto hal = getHal(); hal && isValidEffect(effect)) { + sp effectCallback = new HidlVibratorCallback(env, vibration); + ret = hal->call(&V1_4::IVibrator::perform_1_4, static_cast(effect), + effectStrength, effectCallback, callback); + } else if (isValidEffect(effect)) { + ret = halCall(&V1_0::IVibrator::perform, static_cast(effect), + effectStrength, callback); + } else if (isValidEffect(effect)) { + ret = halCall(&V1_1::IVibrator::perform_1_1, static_cast(effect), + effectStrength, callback); + } else if (isValidEffect(effect)) { + ret = halCall(&V1_2::IVibrator::perform_1_2, static_cast(effect), + effectStrength, callback); + } else if (isValidEffect(effect)) { + ret = halCall(&V1_3::IVibrator::perform_1_3, static_cast(effect), + effectStrength, callback); + } else { + ALOGW("Unable to perform haptic effect, invalid effect ID (%" PRId32 ")", + static_cast(effect)); + return -1; + } - if (!ret.isOk()) { - ALOGW("Failed to perform effect (%" PRId32 ")", static_cast(effect)); - return -1; - } + if (!ret.isOk()) { + ALOGW("Failed to perform effect (%" PRId32 ")", static_cast(effect)); + return -1; + } - if (status == Status::OK) { - return lengthMs; - } else if (status != Status::UNSUPPORTED_OPERATION) { - // Don't warn on UNSUPPORTED_OPERATION, that's a normal event and just means the motor - // doesn't have a pre-defined waveform to perform for it, so we should just give the - // opportunity to fall back to the framework waveforms. - ALOGE("Failed to perform haptic effect: effect=%" PRId64 ", strength=%" PRId32 - ", error=%" PRIu32 ").", static_cast(effect), - static_cast(strength), static_cast(status)); + if (status == Status::OK) { + return lengthMs; + } else if (status != Status::UNSUPPORTED_OPERATION) { + // Don't warn on UNSUPPORTED_OPERATION, that's a normal event and just means the motor + // doesn't have a pre-defined waveform to perform for it, so we should just give the + // opportunity to fall back to the framework waveforms. + ALOGE("Failed to perform haptic effect: effect=%" PRId64 ", strength=%" PRId32 + ", error=%" PRIu32 ").", static_cast(effect), + static_cast(strength), static_cast(status)); + } } return -1; } static jlong vibratorGetCapabilities(JNIEnv*, jclass) { - return halCall(&V1_4::IVibrator::getCapabilities).withDefault(0); + if (auto hal = getHal()) { + int32_t cap = 0; + if (!hal->call(&aidl::IVibrator::getCapabilities, &cap).isOk()) { + return 0; + } + return cap; + } else { + return halCall(&V1_4::IVibrator::getCapabilities).withDefault(0); + } } static const JNINativeMethod method_table[] = { -- cgit v1.2.3-59-g8ed1b From 5af46952b21359cd307b630d8d837edc4036c035 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Sun, 10 Nov 2019 17:56:28 -0800 Subject: Remove vibrator@1.4 Since this HAL was converted to AIDL. Bug: 141828236 Test: boot, use vibrator Change-Id: I0835dcecf7e6a3a4b5b01675df2a36ca8e6cd7a7 --- services/core/Android.bp | 2 +- .../java/com/android/server/VibratorService.java | 4 +-- services/core/jni/Android.bp | 1 - .../jni/com_android_server_VibratorService.cpp | 32 +++------------------- 4 files changed, 7 insertions(+), 32 deletions(-) diff --git a/services/core/Android.bp b/services/core/Android.bp index a05c2cc31e40..084a74724ad8 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -32,6 +32,7 @@ java_library_static { "android.hardware.power-V1.0-java", "android.hardware.tv.cec-V1.0-java", "app-compat-annotations", + "vintf-vibrator-java", ], required: [ @@ -50,7 +51,6 @@ java_library_static { "android.hardware.biometrics.fingerprint-V2.1-java", "android.hardware.oemlock-V1.0-java", "android.hardware.tetheroffload.control-V1.0-java", - "android.hardware.vibrator-V1.4-java", "android.hardware.configstore-V1.0-java", "android.hardware.contexthub-V1.0-java", "android.hidl.manager-V1.2-java", diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java index d622fb433ed8..0db8495e9af9 100644 --- a/services/core/java/com/android/server/VibratorService.java +++ b/services/core/java/com/android/server/VibratorService.java @@ -28,8 +28,8 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.database.ContentObserver; import android.hardware.input.InputManager; +import android.hardware.vibrator.IVibrator; import android.hardware.vibrator.V1_0.EffectStrength; -import android.hardware.vibrator.V1_4.Capabilities; import android.icu.text.DateFormat; import android.media.AudioAttributes; import android.media.AudioManager; @@ -1153,7 +1153,7 @@ public class VibratorService extends IVibratorService.Stub long duration = vibratorPerformEffect(prebaked.getId(), prebaked.getEffectStrength(), vib); long timeout = duration; - if ((mCapabilities & Capabilities.PERFORM_COMPLETION_CALLBACK) != 0) { + if ((mCapabilities & IVibrator.CAP_PERFORM_CALLBACK) != 0) { timeout *= ASYNC_TIMEOUT_MULTIPLIER; } if (timeout > 0) { diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index 6175d4183020..7b3fbb97da56 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -130,7 +130,6 @@ cc_defaults { "android.hardware.vibrator@1.1", "android.hardware.vibrator@1.2", "android.hardware.vibrator@1.3", - "android.hardware.vibrator@1.4", "android.hardware.vr@1.0", "android.frameworks.schedulerservice@1.0", "android.frameworks.sensorservice@1.0", diff --git a/services/core/jni/com_android_server_VibratorService.cpp b/services/core/jni/com_android_server_VibratorService.cpp index 4df5ba39669e..746610df11ae 100644 --- a/services/core/jni/com_android_server_VibratorService.cpp +++ b/services/core/jni/com_android_server_VibratorService.cpp @@ -16,7 +16,7 @@ #define LOG_TAG "VibratorService" -#include +#include #include #include #include @@ -43,7 +43,6 @@ namespace V1_0 = android::hardware::vibrator::V1_0; namespace V1_1 = android::hardware::vibrator::V1_1; namespace V1_2 = android::hardware::vibrator::V1_2; namespace V1_3 = android::hardware::vibrator::V1_3; -namespace V1_4 = android::hardware::vibrator::V1_4; namespace aidl = android::hardware::vibrator; namespace android { @@ -78,11 +77,6 @@ static_assert(static_cast(V1_3::Effect::RINGTONE_15) == static_assert(static_cast(V1_3::Effect::TEXTURE_TICK) == static_cast(aidl::Effect::TEXTURE_TICK)); -static_assert(static_cast(V1_4::Capabilities::ON_COMPLETION_CALLBACK) == - static_cast(aidl::IVibrator::CAP_ON_CALLBACK)); -static_assert(static_cast(V1_4::Capabilities::PERFORM_COMPLETION_CALLBACK) == - static_cast(aidl::IVibrator::CAP_PERFORM_CALLBACK)); - class VibratorCallback { public: VibratorCallback(JNIEnv *env, jobject vibration) : @@ -102,20 +96,6 @@ class VibratorCallback { jobject mVibration; }; -class HidlVibratorCallback : public V1_4::IVibratorCallback { - public: - HidlVibratorCallback(JNIEnv *env, jobject vibration) : - mCb(env, vibration) {} - - Return onComplete() override { - mCb.onComplete(); - return Void(); - } - - private: - VibratorCallback mCb; -}; - class AidlVibratorCallback : public aidl::BnVibratorCallback { public: AidlVibratorCallback(JNIEnv *env, jobject vibration) : @@ -380,11 +360,7 @@ static jlong vibratorPerformEffect(JNIEnv* env, jclass, jlong effect, jlong stre EffectStrength effectStrength(static_cast(strength)); Return ret; - if (auto hal = getHal(); hal && isValidEffect(effect)) { - sp effectCallback = new HidlVibratorCallback(env, vibration); - ret = hal->call(&V1_4::IVibrator::perform_1_4, static_cast(effect), - effectStrength, effectCallback, callback); - } else if (isValidEffect(effect)) { + if (isValidEffect(effect)) { ret = halCall(&V1_0::IVibrator::perform, static_cast(effect), effectStrength, callback); } else if (isValidEffect(effect)) { @@ -429,9 +405,9 @@ static jlong vibratorGetCapabilities(JNIEnv*, jclass) { return 0; } return cap; - } else { - return halCall(&V1_4::IVibrator::getCapabilities).withDefault(0); } + + return 0; } static const JNINativeMethod method_table[] = { -- cgit v1.2.3-59-g8ed1b