diff --git a/dm_lite/src/display_manager_lite.cpp b/dm_lite/src/display_manager_lite.cpp index 4b4b5e361045edc460ae403cd7aa626ab89ff4ef..884a0ecc614daa4053246e329ce0811680c5c789 100644 --- a/dm_lite/src/display_manager_lite.cpp +++ b/dm_lite/src/display_manager_lite.cpp @@ -66,6 +66,8 @@ private: */ void NotifyDisplayStateChanged(DisplayId id, DisplayState state); void ClearDisplayStateCallback(); + void ClearFoldStatusCallback(); + void ClearDisplayModeCallback(); void Clear(); std::map> displayMap_; @@ -236,6 +238,8 @@ void DisplayManagerLite::Impl::Clear() TLOGW(WmsLogTag::DMS, "UnregisterDisplayManagerAgent DISPLAY_EVENT_LISTENER failed"); } ClearDisplayStateCallback(); + ClearFoldStatusCallback(); + ClearDisplayModeCallback(); } DisplayManagerLite::Impl::~Impl() @@ -578,6 +582,8 @@ void DisplayManagerLite::Impl::OnRemoteDied() TLOGI(WmsLogTag::DMS, "dms is died"); std::lock_guard lock(mutex_); displayManagerListener_ = nullptr; + foldStatusListenerAgent_ = nullptr; + displayModeListenerAgent_ = nullptr; } void DisplayManagerLite::OnRemoteDied() @@ -716,6 +722,38 @@ void DisplayManagerLite::Impl::ClearDisplayStateCallback() } } +void DisplayManagerLite::Impl::ClearFoldStatusCallback() +{ + DMError ret = DMError::DM_OK; + std::lock_guard lock(mutex_); + if (foldStatusListenerAgent_ != nullptr) { + ret = SingletonContainer::Get().UnregisterDisplayManagerAgent( + foldStatusListenerAgent_, + DisplayManagerAgentType::FOLD_STATUS_CHANGED_LISTENER); + foldStatusListenerAgent_ = nullptr; + TLOGI(WmsLogTag::DMS, "foldStatusListenerAgent_ is nullptr !"); + } + if (ret != DMError::DM_OK) { + TLOGW(WmsLogTag::DMS, "Unregister failed! Error code: %{public}d", ret); + } +} + +void DisplayManagerLite::Impl::ClearDisplayModeCallback() +{ + DMError ret = DMError::DM_OK; + std::lock_guard lock(mutex_); + if (displayModeListenerAgent_ != nullptr) { + ret = SingletonContainer::Get().UnregisterDisplayManagerAgent( + displayModeListenerAgent_, + DisplayManagerAgentType::DISPLAY_MODE_CHANGED_LISTENER); + displayModeListenerAgent_ = nullptr; + TLOGI(WmsLogTag::DMS, "displayModeListenerAgent_ is nullptr !"); + } + if (ret != DMError::DM_OK) { + TLOGW(WmsLogTag::DMS, "Unregister failed! Error code: %{public}d", ret); + } +} + DMError DisplayManagerLite::RegisterScreenMagneticStateListener(sptr listener) { if (listener == nullptr) { diff --git a/dm_lite/test/unittest/display_manager_lite_test.cpp b/dm_lite/test/unittest/display_manager_lite_test.cpp index 78c2720f5b8e314a9d64678e5ae05c5653a4b64a..18d03c1c76464cfce62839406d1385b73c1f5a73 100644 --- a/dm_lite/test/unittest/display_manager_lite_test.cpp +++ b/dm_lite/test/unittest/display_manager_lite_test.cpp @@ -747,6 +747,39 @@ HWTEST_F(DisplayManagerTest, SetSystemKeyboardStatus02, TestSize.Level1) auto ret = DisplayManagerLite::GetInstance().SetSystemKeyboardStatus(false); ASSERT_NE(ret, DMError::DM_OK); } + +/** + * @tc.name: ClearDisplayStateCallbackLite01 + * @tc.desc: ClearDisplayStateCallbackLite01 test + * @tc.type: FUNC + */ +HWTEST_F(DisplayManagerTest, ClearDisplayStateCallbackLite01, TestSize.Level1) +{ + DisplayManagerLite::GetInstance().pImpl_->ClearDisplayStateCallback(); + EXPECT_TRUE(DisplayManagerLite::GetInstance().pImpl_->displayStateAgent_ == nullptr); +} + +/** + * @tc.name: ClearFoldStatusCallbackLite01 + * @tc.desc: ClearFoldStatusCallbackLite01 test + * @tc.type: FUNC + */ +HWTEST_F(DisplayManagerTest, ClearFoldStatusCallbackLite01, TestSize.Level1) +{ + DisplayManagerLite::GetInstance().pImpl_->ClearFoldStatusCallback(); + EXPECT_TRUE(DisplayManagerLite::GetInstance().pImpl_->foldStatusListenerAgent_ == nullptr); +} + +/** + * @tc.name: ClearDisplayModeCallbackLite01 + * @tc.desc: ClearDisplayModeCallbackLite01 test + * @tc.type: FUNC + */ +HWTEST_F(DisplayManagerTest, ClearDisplayModeCallbackLite01, TestSize.Level1) +{ + DisplayManagerLite::GetInstance().pImpl_->ClearDisplayModeCallback(); + EXPECT_TRUE(DisplayManagerLite::GetInstance().pImpl_->displayModeListenerAgent_ == nullptr); +} } } // namespace Rosen } // namespace OHOS \ No newline at end of file