diff --git a/services/miscdevice_service/include/vibration_priority_manager.h b/services/miscdevice_service/include/vibration_priority_manager.h index 3f5bd436bf068a272db94ee3283a5b767e207368..f727f86ce172f66aa9c6c2f1e415d639d3d85051 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 2cada5a0190a75263953a46e28cd7590d4c93120..865fb5ffe368541ad0e3d1da557bf34dcb1e8bc2 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", diff --git a/test/unittest/vibrator/native/BUILD.gn b/test/unittest/vibrator/native/BUILD.gn index c060cf19c69b698738f26dc913adb6497e954105..e9b07490234f89f86df7046e4ffeb675877224b3 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 0000000000000000000000000000000000000000..0be70a3ed4961420485483e473770999814ff41c --- /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