From e5ff96b1887f9c1821033442655b212a76187a71 Mon Sep 17 00:00:00 2001 From: shenpeixing Date: Thu, 26 Jun 2025 15:40:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=81=B6=E7=8E=B0clear?= =?UTF-8?q?=E5=85=8D=E6=89=93=E6=89=B0=E7=99=BD=E5=90=8D=E5=8D=95crash?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: shenpeixing --- .../miscdevice_service/include/vibration_priority_manager.h | 1 + services/miscdevice_service/src/vibration_priority_manager.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/services/miscdevice_service/include/vibration_priority_manager.h b/services/miscdevice_service/include/vibration_priority_manager.h index 3f5bd43..f727f86 100644 --- a/services/miscdevice_service/include/vibration_priority_manager.h +++ b/services/miscdevice_service/include/vibration_priority_manager.h @@ -135,6 +135,7 @@ private: std::vector doNotDisturbWhiteList_; sptr currentUserObserver_; std::mutex currentUserObserverMutex_; + std::mutex whiteListMutex_; #endif // OHOS_BUILD_ENABLE_DO_NOT_DISTURB #ifdef OHOS_BUILD_ENABLE_VIBRATOR_CROWN std::atomic_int32_t miscCrownFeedback_ = FEEDBACK_MODE_INVALID; diff --git a/services/miscdevice_service/src/vibration_priority_manager.cpp b/services/miscdevice_service/src/vibration_priority_manager.cpp index 2cada5a..865fb5f 100644 --- a/services/miscdevice_service/src/vibration_priority_manager.cpp +++ b/services/miscdevice_service/src/vibration_priority_manager.cpp @@ -151,6 +151,7 @@ void VibrationPriorityManager::InitDoNotDisturbData() doNotDisturbSwitch_ = switchTemp; MISC_HILOGI("doNotDisturbSwitch:%{public}d", switchTemp); } + std::lock_guard whiteListLock(whiteListMutex_); if (doNotDisturbSwitch_ == DONOTDISTURB_SWITCH_ON) { std::vector whiteListTemp; int32_t whiteListRet = GetWhiteListValue(DO_NOT_DISTURB_WHITE_LIST, whiteListTemp); @@ -443,6 +444,7 @@ bool VibrationPriorityManager::IgnoreAppVibrations(const VibrateInfo &vibrateInf MISC_HILOGD("DoNotDisturbSwitch is off"); return false; } + std::lock_guard whiteListLock(whiteListMutex_); for (const WhiteListAppInfo &whiteListAppInfo : doNotDisturbWhiteList_) { if (vibrateInfo.packageName == whiteListAppInfo.bundle) { MISC_HILOGD("Not ignore app vibration, the app is on the whitelist, bundleName::%{public}s", -- Gitee From 4103040dde76b34fab06f46e2e1c550d4965b36d Mon Sep 17 00:00:00 2001 From: shenpeixing Date: Fri, 27 Jun 2025 12:35:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: shenpeixing --- test/unittest/vibrator/native/BUILD.gn | 31 +++++++ .../vibration_priority_manager_test.cpp | 90 +++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 test/unittest/vibrator/native/vibration_priority_manager_test.cpp diff --git a/test/unittest/vibrator/native/BUILD.gn b/test/unittest/vibrator/native/BUILD.gn index c060cf1..e9b0749 100644 --- a/test/unittest/vibrator/native/BUILD.gn +++ b/test/unittest/vibrator/native/BUILD.gn @@ -107,11 +107,42 @@ ohos_unittest("VibratorAgentModulationTest") { } } +ohos_unittest("VibrationPriorityManagerTest") { + module_out_path = "miscdevice/miscdevice/native" + + sources = [ "vibration_priority_manager_test.cpp" ] + + include_dirs = [ + "$SUBSYSTEM_DIR/interfaces/inner_api/vibrator", + "$SUBSYSTEM_DIR/utils/common/include", + "$SUBSYSTEM_DIR/services/miscdevice_service/include", + ] + + deps = [ + "$SUBSYSTEM_DIR/frameworks/native/vibrator:vibrator_target", + "$SUBSYSTEM_DIR/utils/common:libmiscdevice_utils", + ] + + external_deps = [ + "c_utils:utils", + "googletest:gmock", + "googletest:gtest_main", + "hilog:libhilog", + "init:libbegetutil", + "ipc:ipc_single", + ] + + cflags = [ + "-fno-access-control", # Ignore Private Member Access Control + ] +} + group("unittest") { testonly = true deps = [ ":VibratorAgentSeekTest", ":VibratorAgentTest", ":VibratorAgentModulationTest", + ":VibrationPriorityManagerTest", ] } diff --git a/test/unittest/vibrator/native/vibration_priority_manager_test.cpp b/test/unittest/vibrator/native/vibration_priority_manager_test.cpp new file mode 100644 index 0000000..0be70a3 --- /dev/null +++ b/test/unittest/vibrator/native/vibration_priority_manager_test.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "vibration_priority_manager.h" + +#include +#include +#include +#include + +#include "parameters.h" +#include "sensors_errors.h" + +#undef LOG_TAG +#define LOG_TAG "VibrationPriorityManagerTest" + +namespace OHOS { +namespace Sensors { +using namespace testing::ext; + +namespace { +constexpr int32_t TIME_WAIT_FOR_OP_TWO_HUNDRED = 200; +#ifdef OHOS_BUILD_ENABLE_DO_NOT_DISTURB +constexpr bool IS_ENABLE_DO_NOT_DISTURB = true; +#else +constexpr bool IS_ENABLE_DO_NOT_DISTURB = false; +#endif // OHOS_BUILD_ENABLE_DO_NOT_DISTURB +} // namespace + +class VibrationPriorityManagerTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void VibrationPriorityManagerTest::SetUpTestCase() +{ +} + +void VibrationPriorityManagerTest::TearDownTestCase() +{ +} + +void VibrationPriorityManagerTest::SetUp() +{ +} + +void VibrationPriorityManagerTest::TearDown() +{ + std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP_TWO_HUNDRED)); +} + +HWTEST_F(VibrationPriorityManagerTest, ShouldIgnoreVibrateTest, TestSize.Level1) +{ + MISC_HILOGI("ShouldIgnoreVibrateTest in"); + VibrateInfo info = { .mode = VIBRATE_TIME, + .packageName = "test_vibrate_package", + .usage = USAGE_NOTIFICATION, + .systemUsage = false }; + VibratorIdentifierIPC identifier; + miscAudioRingerMode_ = RINGER_MODE_SILENT; + if (IS_ENABLE_DO_NOT_DISTURB) { + MISC_HILOGI("ShouldIgnoreVibrateTest enable doNotDisturb in"); + VibrateStatus status = ShouldIgnoreVibrate(info, nullptr, identifier); + ASSERT_EQ(status, IGNORE_RINGER_MODE); + doNotDisturbSwitch_ = DONOTDISTURB_SWITCH_ON; + status = ShouldIgnoreVibrate(info, nullptr, identifier); + ASSERT_EQ(status, IGNORE_GLOBAL_SETTINGS); + } else { + MISC_HILOGI("ShouldIgnoreVibrateTest not enable doNotDisturb in"); + VibrateStatus status = ShouldIgnoreVibrate(info, nullptr, identifier); + ASSERT_EQ(status, IGNORE_RINGER_MODE); + } +} +} // namespace Sensors +} // namespace OHOS -- Gitee