Loading services/vibratorservice/VibratorHalController.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <vibratorservice/VibratorHalWrapper.h> using android::hardware::vibrator::CompositeEffect; using android::hardware::vibrator::CompositePrimitive; using android::hardware::vibrator::Effect; using android::hardware::vibrator::EffectStrength; Loading Loading @@ -201,6 +202,12 @@ HalResult<std::vector<Effect>> HalController::getSupportedEffects() { return apply(getSupportedEffectsFn, "getSupportedEffects"); } HalResult<std::vector<CompositePrimitive>> HalController::getSupportedPrimitives() { hal_fn<std::vector<CompositePrimitive>> getSupportedPrimitivesFn = [](std::shared_ptr<HalWrapper> hal) { return hal->getSupportedPrimitives(); }; return apply(getSupportedPrimitivesFn, "getSupportedPrimitives"); } HalResult<milliseconds> HalController::performEffect( Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) { hal_fn<milliseconds> performEffectFn = [&](std::shared_ptr<HalWrapper> hal) { Loading services/vibratorservice/VibratorHalWrapper.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <vibratorservice/VibratorHalWrapper.h> using android::hardware::vibrator::CompositeEffect; using android::hardware::vibrator::CompositePrimitive; using android::hardware::vibrator::Effect; using android::hardware::vibrator::EffectStrength; Loading Loading @@ -221,6 +222,13 @@ HalResult<std::vector<Effect>> AidlHalWrapper::getSupportedEffects() { mSupportedEffects); } HalResult<std::vector<CompositePrimitive>> AidlHalWrapper::getSupportedPrimitives() { std::lock_guard<std::mutex> lock(mSupportedPrimitivesMutex); return loadCached<std::vector< CompositePrimitive>>(std::bind(&AidlHalWrapper::getSupportedPrimitivesInternal, this), mSupportedPrimitives); } HalResult<milliseconds> AidlHalWrapper::performEffect( Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) { HalResult<Capabilities> capabilities = getCapabilities(); Loading Loading @@ -260,6 +268,12 @@ HalResult<std::vector<Effect>> AidlHalWrapper::getSupportedEffectsInternal() { return HalResult<std::vector<Effect>>::fromStatus(result, supportedEffects); } HalResult<std::vector<CompositePrimitive>> AidlHalWrapper::getSupportedPrimitivesInternal() { std::vector<CompositePrimitive> supportedPrimitives; auto result = getHal()->getSupportedPrimitives(&supportedPrimitives); return HalResult<std::vector<CompositePrimitive>>::fromStatus(result, supportedPrimitives); } sp<Aidl::IVibrator> AidlHalWrapper::getHal() { std::lock_guard<std::mutex> lock(mHandleMutex); return mHandle; Loading Loading @@ -336,6 +350,12 @@ HalResult<std::vector<Effect>> HidlHalWrapper<I>::getSupportedEffects() { return HalResult<std::vector<Effect>>::unsupported(); } template <typename I> HalResult<std::vector<CompositePrimitive>> HidlHalWrapper<I>::getSupportedPrimitives() { ALOGV("Skipped getSupportedPrimitives because Vibrator HAL AIDL is not available"); return HalResult<std::vector<CompositePrimitive>>::unsupported(); } template <typename I> HalResult<void> HidlHalWrapper<I>::performComposedEffect(const std::vector<CompositeEffect>&, const std::function<void()>&) { Loading services/vibratorservice/include/vibratorservice/VibratorHalController.h +2 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ public: HalResult<Capabilities> getCapabilities() final override; HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() final override; HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() final override; HalResult<std::chrono::milliseconds> performEffect( hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength, Loading services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h +10 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,8 @@ public: virtual HalResult<Capabilities> getCapabilities() = 0; virtual HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() = 0; virtual HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() = 0; virtual HalResult<std::chrono::milliseconds> performEffect( hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength, Loading Loading @@ -194,6 +196,8 @@ public: HalResult<Capabilities> getCapabilities() override final; HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() override final; HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() override final; HalResult<std::chrono::milliseconds> performEffect( hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength, Loading @@ -207,14 +211,18 @@ private: std::mutex mHandleMutex; std::mutex mCapabilitiesMutex; std::mutex mSupportedEffectsMutex; std::mutex mSupportedPrimitivesMutex; sp<hardware::vibrator::IVibrator> mHandle GUARDED_BY(mHandleMutex); std::optional<Capabilities> mCapabilities GUARDED_BY(mCapabilitiesMutex); std::optional<std::vector<hardware::vibrator::Effect>> mSupportedEffects GUARDED_BY(mSupportedEffectsMutex); std::optional<std::vector<hardware::vibrator::CompositePrimitive>> mSupportedPrimitives GUARDED_BY(mSupportedPrimitivesMutex); // Loads directly from IVibrator handle, skipping caches. HalResult<Capabilities> getCapabilitiesInternal(); HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffectsInternal(); HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitivesInternal(); sp<hardware::vibrator::IVibrator> getHal(); }; Loading Loading @@ -242,6 +250,8 @@ public: HalResult<Capabilities> getCapabilities() override final; HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() override final; HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() override final; HalResult<void> performComposedEffect( const std::vector<hardware::vibrator::CompositeEffect>& primitiveEffects, Loading services/vibratorservice/test/VibratorHalControllerTest.cpp +26 −7 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ public: MOCK_METHOD(vibrator::HalResult<void>, alwaysOnDisable, (int32_t id), (override)); MOCK_METHOD(vibrator::HalResult<vibrator::Capabilities>, getCapabilities, (), (override)); MOCK_METHOD(vibrator::HalResult<std::vector<Effect>>, getSupportedEffects, (), (override)); MOCK_METHOD(vibrator::HalResult<std::vector<CompositePrimitive>>, getSupportedPrimitives, (), (override)); MOCK_METHOD(vibrator::HalResult<milliseconds>, performEffect, (Effect effect, EffectStrength strength, const std::function<void()>& completionCallback), Loading Loading @@ -132,6 +134,7 @@ protected: vibrator::HalResult<void> voidResult, vibrator::HalResult<vibrator::Capabilities> capabilitiesResult, vibrator::HalResult<std::vector<Effect>> effectsResult, vibrator::HalResult<std::vector<CompositePrimitive>> primitivesResult, vibrator::HalResult<milliseconds> durationResult) { EXPECT_CALL(*mMockHal.get(), ping()) .Times(Exactly(cardinality)) Loading Loading @@ -161,6 +164,9 @@ protected: EXPECT_CALL(*mMockHal.get(), getSupportedEffects()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(effectsResult)); EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(primitivesResult)); EXPECT_CALL(*mMockHal.get(), performEffect(Eq(Effect::CLICK), Eq(EffectStrength::LIGHT), _)) .Times(Exactly(cardinality)) .WillRepeatedly(Return(durationResult)); Loading @@ -170,7 +176,7 @@ protected: if (cardinality > 1) { // One reconnection call after each failure. EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(11 * cardinality)); EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(12 * cardinality)); } } }; Loading @@ -187,9 +193,12 @@ TEST_F(VibratorHalControllerTest, TestInit) { } TEST_F(VibratorHalControllerTest, TestApiCallsAreForwardedToHal) { std::vector<Effect> supportedEffects; supportedEffects.push_back(Effect::CLICK); supportedEffects.push_back(Effect::TICK); std::vector<Effect> effects; effects.push_back(Effect::CLICK); effects.push_back(Effect::TICK); std::vector<CompositePrimitive> primitives; primitives.push_back(CompositePrimitive::CLICK); primitives.push_back(CompositePrimitive::THUD); std::vector<CompositeEffect> compositeEffects; compositeEffects.push_back( vibrator::TestFactory::createCompositeEffect(CompositePrimitive::SPIN, 100ms, 0.5f)); Loading @@ -199,7 +208,8 @@ TEST_F(VibratorHalControllerTest, TestApiCallsAreForwardedToHal) { setHalExpectations(/* cardinality= */ 1, compositeEffects, vibrator::HalResult<void>::ok(), vibrator::HalResult<vibrator::Capabilities>::ok( vibrator::Capabilities::ON_CALLBACK), vibrator::HalResult<std::vector<Effect>>::ok(supportedEffects), vibrator::HalResult<std::vector<Effect>>::ok(effects), vibrator::HalResult<std::vector<CompositePrimitive>>::ok(primitives), vibrator::HalResult<milliseconds>::ok(100ms)); ASSERT_TRUE(mController->ping().isOk()); Loading @@ -216,7 +226,11 @@ TEST_F(VibratorHalControllerTest, TestApiCallsAreForwardedToHal) { auto getSupportedEffectsResult = mController->getSupportedEffects(); ASSERT_TRUE(getSupportedEffectsResult.isOk()); ASSERT_EQ(supportedEffects, getSupportedEffectsResult.value()); ASSERT_EQ(effects, getSupportedEffectsResult.value()); auto getSupportedPrimitivesResult = mController->getSupportedPrimitives(); ASSERT_TRUE(getSupportedPrimitivesResult.isOk()); ASSERT_EQ(primitives, getSupportedPrimitivesResult.value()); auto performEffectResult = mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}); Loading @@ -233,6 +247,7 @@ TEST_F(VibratorHalControllerTest, TestUnsupportedApiResultDoNotResetHalConnectio vibrator::HalResult<void>::unsupported(), vibrator::HalResult<vibrator::Capabilities>::unsupported(), vibrator::HalResult<std::vector<Effect>>::unsupported(), vibrator::HalResult<std::vector<CompositePrimitive>>::unsupported(), vibrator::HalResult<milliseconds>::unsupported()); ASSERT_EQ(0, mConnectCounter); Loading @@ -247,6 +262,7 @@ TEST_F(VibratorHalControllerTest, TestUnsupportedApiResultDoNotResetHalConnectio ASSERT_TRUE(mController->alwaysOnDisable(1).isUnsupported()); ASSERT_TRUE(mController->getCapabilities().isUnsupported()); ASSERT_TRUE(mController->getSupportedEffects().isUnsupported()); ASSERT_TRUE(mController->getSupportedPrimitives().isUnsupported()); ASSERT_TRUE(mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}) .isUnsupported()); ASSERT_TRUE(mController->performComposedEffect(std::vector<CompositeEffect>(), []() {}) Loading @@ -260,6 +276,7 @@ TEST_F(VibratorHalControllerTest, TestFailedApiResultResetsHalConnection) { vibrator::HalResult<void>::failed("message"), vibrator::HalResult<vibrator::Capabilities>::failed("message"), vibrator::HalResult<std::vector<Effect>>::failed("message"), vibrator::HalResult<std::vector<CompositePrimitive>>::failed("message"), vibrator::HalResult<milliseconds>::failed("message")); ASSERT_EQ(0, mConnectCounter); Loading @@ -273,6 +290,7 @@ TEST_F(VibratorHalControllerTest, TestFailedApiResultResetsHalConnection) { ASSERT_TRUE(mController->alwaysOnDisable(1).isFailed()); ASSERT_TRUE(mController->getCapabilities().isFailed()); ASSERT_TRUE(mController->getSupportedEffects().isFailed()); ASSERT_TRUE(mController->getSupportedPrimitives().isFailed()); ASSERT_TRUE( mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}).isFailed()); ASSERT_TRUE( Loading Loading @@ -331,13 +349,14 @@ TEST_F(VibratorHalControllerTest, TestNoVibratorReturnsUnsupportedAndAttemptsToR ASSERT_TRUE(mController->alwaysOnDisable(1).isUnsupported()); ASSERT_TRUE(mController->getCapabilities().isUnsupported()); ASSERT_TRUE(mController->getSupportedEffects().isUnsupported()); ASSERT_TRUE(mController->getSupportedPrimitives().isUnsupported()); ASSERT_TRUE(mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}) .isUnsupported()); ASSERT_TRUE(mController->performComposedEffect(std::vector<CompositeEffect>(), []() {}) .isUnsupported()); // One connection attempt per api call. ASSERT_EQ(11, mConnectCounter); ASSERT_EQ(12, mConnectCounter); } TEST_F(VibratorHalControllerTest, TestScheduledCallbackSurvivesReconnection) { Loading Loading
services/vibratorservice/VibratorHalController.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <vibratorservice/VibratorHalWrapper.h> using android::hardware::vibrator::CompositeEffect; using android::hardware::vibrator::CompositePrimitive; using android::hardware::vibrator::Effect; using android::hardware::vibrator::EffectStrength; Loading Loading @@ -201,6 +202,12 @@ HalResult<std::vector<Effect>> HalController::getSupportedEffects() { return apply(getSupportedEffectsFn, "getSupportedEffects"); } HalResult<std::vector<CompositePrimitive>> HalController::getSupportedPrimitives() { hal_fn<std::vector<CompositePrimitive>> getSupportedPrimitivesFn = [](std::shared_ptr<HalWrapper> hal) { return hal->getSupportedPrimitives(); }; return apply(getSupportedPrimitivesFn, "getSupportedPrimitives"); } HalResult<milliseconds> HalController::performEffect( Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) { hal_fn<milliseconds> performEffectFn = [&](std::shared_ptr<HalWrapper> hal) { Loading
services/vibratorservice/VibratorHalWrapper.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <vibratorservice/VibratorHalWrapper.h> using android::hardware::vibrator::CompositeEffect; using android::hardware::vibrator::CompositePrimitive; using android::hardware::vibrator::Effect; using android::hardware::vibrator::EffectStrength; Loading Loading @@ -221,6 +222,13 @@ HalResult<std::vector<Effect>> AidlHalWrapper::getSupportedEffects() { mSupportedEffects); } HalResult<std::vector<CompositePrimitive>> AidlHalWrapper::getSupportedPrimitives() { std::lock_guard<std::mutex> lock(mSupportedPrimitivesMutex); return loadCached<std::vector< CompositePrimitive>>(std::bind(&AidlHalWrapper::getSupportedPrimitivesInternal, this), mSupportedPrimitives); } HalResult<milliseconds> AidlHalWrapper::performEffect( Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) { HalResult<Capabilities> capabilities = getCapabilities(); Loading Loading @@ -260,6 +268,12 @@ HalResult<std::vector<Effect>> AidlHalWrapper::getSupportedEffectsInternal() { return HalResult<std::vector<Effect>>::fromStatus(result, supportedEffects); } HalResult<std::vector<CompositePrimitive>> AidlHalWrapper::getSupportedPrimitivesInternal() { std::vector<CompositePrimitive> supportedPrimitives; auto result = getHal()->getSupportedPrimitives(&supportedPrimitives); return HalResult<std::vector<CompositePrimitive>>::fromStatus(result, supportedPrimitives); } sp<Aidl::IVibrator> AidlHalWrapper::getHal() { std::lock_guard<std::mutex> lock(mHandleMutex); return mHandle; Loading Loading @@ -336,6 +350,12 @@ HalResult<std::vector<Effect>> HidlHalWrapper<I>::getSupportedEffects() { return HalResult<std::vector<Effect>>::unsupported(); } template <typename I> HalResult<std::vector<CompositePrimitive>> HidlHalWrapper<I>::getSupportedPrimitives() { ALOGV("Skipped getSupportedPrimitives because Vibrator HAL AIDL is not available"); return HalResult<std::vector<CompositePrimitive>>::unsupported(); } template <typename I> HalResult<void> HidlHalWrapper<I>::performComposedEffect(const std::vector<CompositeEffect>&, const std::function<void()>&) { Loading
services/vibratorservice/include/vibratorservice/VibratorHalController.h +2 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ public: HalResult<Capabilities> getCapabilities() final override; HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() final override; HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() final override; HalResult<std::chrono::milliseconds> performEffect( hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength, Loading
services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h +10 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,8 @@ public: virtual HalResult<Capabilities> getCapabilities() = 0; virtual HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() = 0; virtual HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() = 0; virtual HalResult<std::chrono::milliseconds> performEffect( hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength, Loading Loading @@ -194,6 +196,8 @@ public: HalResult<Capabilities> getCapabilities() override final; HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() override final; HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() override final; HalResult<std::chrono::milliseconds> performEffect( hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength, Loading @@ -207,14 +211,18 @@ private: std::mutex mHandleMutex; std::mutex mCapabilitiesMutex; std::mutex mSupportedEffectsMutex; std::mutex mSupportedPrimitivesMutex; sp<hardware::vibrator::IVibrator> mHandle GUARDED_BY(mHandleMutex); std::optional<Capabilities> mCapabilities GUARDED_BY(mCapabilitiesMutex); std::optional<std::vector<hardware::vibrator::Effect>> mSupportedEffects GUARDED_BY(mSupportedEffectsMutex); std::optional<std::vector<hardware::vibrator::CompositePrimitive>> mSupportedPrimitives GUARDED_BY(mSupportedPrimitivesMutex); // Loads directly from IVibrator handle, skipping caches. HalResult<Capabilities> getCapabilitiesInternal(); HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffectsInternal(); HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitivesInternal(); sp<hardware::vibrator::IVibrator> getHal(); }; Loading Loading @@ -242,6 +250,8 @@ public: HalResult<Capabilities> getCapabilities() override final; HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffects() override final; HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitives() override final; HalResult<void> performComposedEffect( const std::vector<hardware::vibrator::CompositeEffect>& primitiveEffects, Loading
services/vibratorservice/test/VibratorHalControllerTest.cpp +26 −7 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ public: MOCK_METHOD(vibrator::HalResult<void>, alwaysOnDisable, (int32_t id), (override)); MOCK_METHOD(vibrator::HalResult<vibrator::Capabilities>, getCapabilities, (), (override)); MOCK_METHOD(vibrator::HalResult<std::vector<Effect>>, getSupportedEffects, (), (override)); MOCK_METHOD(vibrator::HalResult<std::vector<CompositePrimitive>>, getSupportedPrimitives, (), (override)); MOCK_METHOD(vibrator::HalResult<milliseconds>, performEffect, (Effect effect, EffectStrength strength, const std::function<void()>& completionCallback), Loading Loading @@ -132,6 +134,7 @@ protected: vibrator::HalResult<void> voidResult, vibrator::HalResult<vibrator::Capabilities> capabilitiesResult, vibrator::HalResult<std::vector<Effect>> effectsResult, vibrator::HalResult<std::vector<CompositePrimitive>> primitivesResult, vibrator::HalResult<milliseconds> durationResult) { EXPECT_CALL(*mMockHal.get(), ping()) .Times(Exactly(cardinality)) Loading Loading @@ -161,6 +164,9 @@ protected: EXPECT_CALL(*mMockHal.get(), getSupportedEffects()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(effectsResult)); EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(primitivesResult)); EXPECT_CALL(*mMockHal.get(), performEffect(Eq(Effect::CLICK), Eq(EffectStrength::LIGHT), _)) .Times(Exactly(cardinality)) .WillRepeatedly(Return(durationResult)); Loading @@ -170,7 +176,7 @@ protected: if (cardinality > 1) { // One reconnection call after each failure. EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(11 * cardinality)); EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(12 * cardinality)); } } }; Loading @@ -187,9 +193,12 @@ TEST_F(VibratorHalControllerTest, TestInit) { } TEST_F(VibratorHalControllerTest, TestApiCallsAreForwardedToHal) { std::vector<Effect> supportedEffects; supportedEffects.push_back(Effect::CLICK); supportedEffects.push_back(Effect::TICK); std::vector<Effect> effects; effects.push_back(Effect::CLICK); effects.push_back(Effect::TICK); std::vector<CompositePrimitive> primitives; primitives.push_back(CompositePrimitive::CLICK); primitives.push_back(CompositePrimitive::THUD); std::vector<CompositeEffect> compositeEffects; compositeEffects.push_back( vibrator::TestFactory::createCompositeEffect(CompositePrimitive::SPIN, 100ms, 0.5f)); Loading @@ -199,7 +208,8 @@ TEST_F(VibratorHalControllerTest, TestApiCallsAreForwardedToHal) { setHalExpectations(/* cardinality= */ 1, compositeEffects, vibrator::HalResult<void>::ok(), vibrator::HalResult<vibrator::Capabilities>::ok( vibrator::Capabilities::ON_CALLBACK), vibrator::HalResult<std::vector<Effect>>::ok(supportedEffects), vibrator::HalResult<std::vector<Effect>>::ok(effects), vibrator::HalResult<std::vector<CompositePrimitive>>::ok(primitives), vibrator::HalResult<milliseconds>::ok(100ms)); ASSERT_TRUE(mController->ping().isOk()); Loading @@ -216,7 +226,11 @@ TEST_F(VibratorHalControllerTest, TestApiCallsAreForwardedToHal) { auto getSupportedEffectsResult = mController->getSupportedEffects(); ASSERT_TRUE(getSupportedEffectsResult.isOk()); ASSERT_EQ(supportedEffects, getSupportedEffectsResult.value()); ASSERT_EQ(effects, getSupportedEffectsResult.value()); auto getSupportedPrimitivesResult = mController->getSupportedPrimitives(); ASSERT_TRUE(getSupportedPrimitivesResult.isOk()); ASSERT_EQ(primitives, getSupportedPrimitivesResult.value()); auto performEffectResult = mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}); Loading @@ -233,6 +247,7 @@ TEST_F(VibratorHalControllerTest, TestUnsupportedApiResultDoNotResetHalConnectio vibrator::HalResult<void>::unsupported(), vibrator::HalResult<vibrator::Capabilities>::unsupported(), vibrator::HalResult<std::vector<Effect>>::unsupported(), vibrator::HalResult<std::vector<CompositePrimitive>>::unsupported(), vibrator::HalResult<milliseconds>::unsupported()); ASSERT_EQ(0, mConnectCounter); Loading @@ -247,6 +262,7 @@ TEST_F(VibratorHalControllerTest, TestUnsupportedApiResultDoNotResetHalConnectio ASSERT_TRUE(mController->alwaysOnDisable(1).isUnsupported()); ASSERT_TRUE(mController->getCapabilities().isUnsupported()); ASSERT_TRUE(mController->getSupportedEffects().isUnsupported()); ASSERT_TRUE(mController->getSupportedPrimitives().isUnsupported()); ASSERT_TRUE(mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}) .isUnsupported()); ASSERT_TRUE(mController->performComposedEffect(std::vector<CompositeEffect>(), []() {}) Loading @@ -260,6 +276,7 @@ TEST_F(VibratorHalControllerTest, TestFailedApiResultResetsHalConnection) { vibrator::HalResult<void>::failed("message"), vibrator::HalResult<vibrator::Capabilities>::failed("message"), vibrator::HalResult<std::vector<Effect>>::failed("message"), vibrator::HalResult<std::vector<CompositePrimitive>>::failed("message"), vibrator::HalResult<milliseconds>::failed("message")); ASSERT_EQ(0, mConnectCounter); Loading @@ -273,6 +290,7 @@ TEST_F(VibratorHalControllerTest, TestFailedApiResultResetsHalConnection) { ASSERT_TRUE(mController->alwaysOnDisable(1).isFailed()); ASSERT_TRUE(mController->getCapabilities().isFailed()); ASSERT_TRUE(mController->getSupportedEffects().isFailed()); ASSERT_TRUE(mController->getSupportedPrimitives().isFailed()); ASSERT_TRUE( mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}).isFailed()); ASSERT_TRUE( Loading Loading @@ -331,13 +349,14 @@ TEST_F(VibratorHalControllerTest, TestNoVibratorReturnsUnsupportedAndAttemptsToR ASSERT_TRUE(mController->alwaysOnDisable(1).isUnsupported()); ASSERT_TRUE(mController->getCapabilities().isUnsupported()); ASSERT_TRUE(mController->getSupportedEffects().isUnsupported()); ASSERT_TRUE(mController->getSupportedPrimitives().isUnsupported()); ASSERT_TRUE(mController->performEffect(Effect::CLICK, EffectStrength::LIGHT, []() {}) .isUnsupported()); ASSERT_TRUE(mController->performComposedEffect(std::vector<CompositeEffect>(), []() {}) .isUnsupported()); // One connection attempt per api call. ASSERT_EQ(11, mConnectCounter); ASSERT_EQ(12, mConnectCounter); } TEST_F(VibratorHalControllerTest, TestScheduledCallbackSurvivesReconnection) { Loading