From 96c1fc8fd702ddb5b32763b8dcf37e022a8d4fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=B6=E6=98=A5=E9=BE=99?= Date: Thu, 24 Jul 2025 23:49:26 +0800 Subject: [PATCH 1/2] add haptics ramp interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陶春龙 --- .../ringtone_player/ringtone_player_impl.cpp | 32 +++++++++++++++ .../ringtone_player/ringtone_player_impl.h | 1 + .../src/ringtone_player_unit_test.cpp | 39 +++++++++++++++++++ .../include/ringtone_player.h | 10 +++++ 4 files changed, 82 insertions(+) diff --git a/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.cpp b/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.cpp index beac3311f..aa40c3d4d 100644 --- a/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.cpp +++ b/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.cpp @@ -602,6 +602,38 @@ int32_t RingtonePlayerImpl::SetRingtoneHapticsFeature(const RingtoneHapticsFeatu return ret; } +int32_t RingtonePlayerImpl::SetRingtoneHapticsRamp(int32_t duration, float startIntensity, float endIntensity) +{ + MEDIA_LOGI("RingtonePlayerImpl::SetRingtoneHapticsRamp %{public}d, %{public}f, %{public}f", + duration, startIntensity, endIntensity); + + std::lock_guard lock(playerMutex_); + CHECK_AND_RETURN_RET_LOG(ringtoneState_ != STATE_RELEASED, MSERR_INVALID_OPERATION, + "ringtone player has been released."); + CHECK_AND_RETURN_RET_LOG(player_ != nullptr && ringtoneState_ != STATE_INVALID, MSERR_INVALID_VAL, "no player_"); + + // duration not less than 100ms + if (duration < 100) { + MEDIA_LOGE("RingtonePlayerImpl::SetRingtoneHapticsRamp: the duration value is invalid."); + return MSERR_INVALID_VAL; + } + + if (startIntensity < 1.0f || startIntensity > 100.0f) { + MEDIA_LOGE("RingtonePlayerImpl::SetRingtoneHapticsRamp: the startIntensity value is invalid."); + return MSERR_INVALID_VAL; + } + + if (endIntensity < 1.0f || endIntensity > 100.0f) { + MEDIA_LOGE("RingtonePlayerImpl::SetRingtoneHapticsRamp: the endIntensity value is invalid."); + return MSERR_INVALID_VAL; + } + + int32_t result = player_->SetHapticsRamp(duration, startIntensity, endIntensity); + CHECK_AND_RETURN_RET_LOG(result == MSERR_OK, result, "RingtonePlayerImpl::SetRingtoneHapticsRamp error"); + + return result; +} + // Callback class symbols RingtonePlayerCallback::RingtonePlayerCallback(RingtonePlayerImpl &ringtonePlayerImpl) : ringtonePlayerImpl_(ringtonePlayerImpl) {} diff --git a/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.h b/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.h index d196d9e22..607179348 100644 --- a/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.h +++ b/frameworks/native/system_sound_manager/ringtone_player/ringtone_player_impl.h @@ -52,6 +52,7 @@ public: int32_t SetRingtonePlayerInterruptCallback( const std::shared_ptr &interruptCallback) override; int32_t SetRingtoneHapticsFeature(const RingtoneHapticsFeature &feature) override; + int32_t SetRingtoneHapticsRamp(int32_t duration, float startIntensity, float endIntensity) override; private: void InitPlayer(std::string &audioUri, ToneHapticsSettings &settings, AudioHapticPlayerOptions options); diff --git a/frameworks/native/system_sound_manager/unittest/ringtone_player_test/src/ringtone_player_unit_test.cpp b/frameworks/native/system_sound_manager/unittest/ringtone_player_test/src/ringtone_player_unit_test.cpp index 0844d8cfa..3137145e9 100644 --- a/frameworks/native/system_sound_manager/unittest/ringtone_player_test/src/ringtone_player_unit_test.cpp +++ b/frameworks/native/system_sound_manager/unittest/ringtone_player_test/src/ringtone_player_unit_test.cpp @@ -375,5 +375,44 @@ HWTEST(RingtonePlayerUnitTest, Media_RingtonePlayer_018, TestSize.Level1) result = ringtonePlayerImpl_->SetRingtoneHapticsFeature(RingtoneHapticsFeature::RINGTONE_GENTLE_HAPTICS); EXPECT_EQ(result, ERR_OPERATE_NOT_ALLOWED); } + +/** + * @tc.name : Test MediaRingtonePlayer + * @tc.number: Media_RingtonePlayer_019 + * @tc.desc : Test SetRingtoneHapticsRamp. Returns set result. + */ +HWTEST(RingtonePlayerUnitTest, Media_RingtonePlayer_019, TestSize.Level1) +{ + auto context_ = std::make_shared(); + auto sysSoundMgr = std::make_shared(); + RingtoneType type = RINGTONE_TYPE_SIM_CARD_0; + auto ringtonePlayerImpl_ = std::make_shared(context_, *sysSoundMgr, type); + int32_t sourceId = 1; + AudioHapticPlayerOptions options = {false, false}; + auto player = ringtonePlayerImpl_->audioHapticManager_->CreatePlayer(sourceId, options); + + ringtonePlayerImpl_->ringtoneState_ = STATE_RELEASED; + EXPECT_EQ(ringtonePlayerImpl_->SetRingtoneHapticsRamp(50, 1.0f, 50.0f), MSERR_INVALID_OPERATION); + + ringtonePlayerImpl_->ringtoneState_ = STATE_INVALID; + EXPECT_EQ(ringtonePlayerImpl_->SetRingtoneHapticsRamp(50, 1.0f, 50.0f), MSERR_INVALID_VAL); + + ringtonePlayerImpl_->player_ = player; + EXPECT_EQ(ringtonePlayerImpl_->SetRingtoneHapticsRamp(50, 1.0f, 50.0f), MSERR_INVALID_VAL); + + ringtonePlayerImpl_->ringtoneState_ = STATE_NEW; + // test duration less than 100ms + EXPECT_EQ(MSERR_INVALID_VAL, ringtonePlayerImpl_->SetRingtoneHapticsRamp(50, 1.0f, 50.0f)); + // test startIntensity less than 1.0f + EXPECT_EQ(MSERR_INVALID_VAL, ringtonePlayerImpl_->SetRingtoneHapticsRamp(1000, -1.0f, 50.0f)); + // test startIntensity larger than 100.0f + EXPECT_EQ(MSERR_INVALID_VAL, ringtonePlayerImpl_->SetRingtoneHapticsRamp(1000, 101.0f, 50.0f)); + // test endIntensity less than 1.0f + EXPECT_EQ(MSERR_INVALID_VAL, ringtonePlayerImpl_->SetRingtoneHapticsRamp(1000, 50.0f, -1.0f)); + // test endIntensity larger than 100.0f + EXPECT_EQ(MSERR_INVALID_VAL, ringtonePlayerImpl_->SetRingtoneHapticsRamp(1000, 50.0f, 101.0f)); + // test all params ok + EXPECT_EQ(ERR_OPERATE_NOT_ALLOWED, ringtonePlayerImpl_->SetRingtoneHapticsRamp(1000, 50.0f, 90.0f)); +} } } diff --git a/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h b/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h index 9783f7c22..c777d3ef0 100644 --- a/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h +++ b/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h @@ -147,6 +147,16 @@ public: * @version 1.0 */ virtual int32_t SetRingtoneHapticsFeature(const RingtoneHapticsFeature &feature) = 0; + + /** + * @brief Set the ringtone player haptics's ramp + * + * @return Returns {@link MSERR_OK} if the haptics's ramp set successfully; + * returns an error code defined in {@link media_errors.h} otherwise. + * @since 1.0 + * @version 1.0 + */ + virtual int32_t SetRingtoneHapticsRamp(int32_t duration, float startIntensity, float endIntensity) = 0; }; -- Gitee From 203c28e0f7279a522df6605ca884090c9f5340fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=B6=E6=98=A5=E9=BE=99?= Date: Fri, 25 Jul 2025 09:11:30 +0800 Subject: [PATCH 2/2] fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陶春龙 --- .../native/system_sound_manager/include/ringtone_player.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h b/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h index c777d3ef0..142490fb4 100644 --- a/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h +++ b/interfaces/inner_api/native/system_sound_manager/include/ringtone_player.h @@ -151,6 +151,9 @@ public: /** * @brief Set the ringtone player haptics's ramp * + * @param duration haptics ramp duration, not less than 100ms + * @param startIntensity start intensity, value range (1.0f, 100.0f] + * @param endIntensity start intensity, value range (1.0f, 100.0f] * @return Returns {@link MSERR_OK} if the haptics's ramp set successfully; * returns an error code defined in {@link media_errors.h} otherwise. * @since 1.0 -- Gitee