From 94b983586a438fd3b8a2509106760ffc5df4d49c Mon Sep 17 00:00:00 2001 From: xiaojianfeng Date: Sat, 25 Jun 2022 17:17:40 +0800 Subject: [PATCH] fix code style Signed-off-by: xiaojianfeng Change-Id: I70a83035135945f5af011d1b66a2bb581b4a6114 --- interfaces/innerkits/wm/window.h | 2 +- interfaces/innerkits/wm/wm_common.h | 2 +- .../napi/window_runtime/api/@ohos.window.d.ts | 2 +- .../window_napi/js_window_listener.h | 2 +- .../js_window_register_manager.cpp | 16 +- .../window_napi/js_window_utils.cpp | 3 +- wm/src/window_adapter.cpp | 1 - wm/src/window_agent.cpp | 4 +- wm/src/window_impl.cpp | 8 +- wm/test/systemtest/BUILD.gn | 2 +- wm/test/systemtest/window_immersive_test.cpp | 171 ++---------------- .../window_split_immersive_test.cpp | 4 - wmserver/include/avoid_area_controller.h | 4 +- wmserver/include/window_controller.h | 2 +- wmserver/include/window_node_container.h | 2 +- wmserver/include/zidl/window_manager_proxy.h | 1 - wmserver/src/avoid_area_controller.cpp | 54 +++--- wmserver/src/window_controller.cpp | 2 +- wmserver/src/window_manager_service.cpp | 1 - wmserver/src/window_node_container.cpp | 7 +- wmserver/src/window_root.cpp | 2 +- 21 files changed, 66 insertions(+), 226 deletions(-) diff --git a/interfaces/innerkits/wm/window.h b/interfaces/innerkits/wm/window.h index 0a3684b4..c1451688 100644 --- a/interfaces/innerkits/wm/window.h +++ b/interfaces/innerkits/wm/window.h @@ -71,7 +71,7 @@ public: class IAvoidAreaChangedListener : virtual public RefBase { public: - virtual void OnAvoidAreaChanged(const AvoidArea avoidAreas, AvoidAreaType type) = 0; + virtual void OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type) = 0; }; class IWindowDragListener : virtual public RefBase { diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 5bcd2ab0..24da28ce 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -217,7 +217,7 @@ enum class AvoidAreaType : uint32_t { TYPE_SYSTEM, // area of SystemUI TYPE_CUTOUT, // cutout of screen TYPE_SYSTEM_GESTURE, // area for system gesture - TYPE_KEYBOARD, + TYPE_KEYBOARD, // area for soft input keyboard }; enum class OccupiedAreaType : uint32_t { diff --git a/interfaces/kits/napi/window_runtime/api/@ohos.window.d.ts b/interfaces/kits/napi/window_runtime/api/@ohos.window.d.ts index ff8203a6..2ba61c6b 100644 --- a/interfaces/kits/napi/window_runtime/api/@ohos.window.d.ts +++ b/interfaces/kits/napi/window_runtime/api/@ohos.window.d.ts @@ -86,7 +86,7 @@ declare namespace window { TYPE_SYSTEM_GESTURE, /** - * area for keyboard + * area for soft input keyboard * @since 9 */ TYPE_KEYBOARD diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_listener.h b/interfaces/kits/napi/window_runtime/window_napi/js_window_listener.h index 56a05f45..8a39f121 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_listener.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_listener.h @@ -52,7 +52,7 @@ public: void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) override; void OnSizeChange(Rect rect, WindowSizeChangeReason reason) override; void OnModeChange(WindowMode mode) override; - void OnAvoidAreaChanged(const AvoidArea avoidAreas, AvoidAreaType type) override; + void OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type) override; void AfterForeground() override; void AfterBackground() override; void AfterFocused() override; diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_register_manager.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_register_manager.cpp index 633df51c..79a81276 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_register_manager.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_register_manager.cpp @@ -30,12 +30,12 @@ JsWindowRegisterManager::JsWindowRegisterManager() }; // white register list for window listenerProcess_[CaseType::CASE_WINDOW] = { - {WINDOW_SIZE_CHANGE_CB, &JsWindowRegisterManager::ProcessWindowChangeRegister }, - {SYSTEM_AVOID_AREA_CHANGE_CB, &JsWindowRegisterManager::ProcessSystemAvoidAreaChangeRegister }, - {AVOID_AREA_CHANGE_CB, &JsWindowRegisterManager::ProcessAvoidAreaChangeRegister }, - {LIFECYCLE_EVENT_CB, &JsWindowRegisterManager::ProcessLifeCycleEventRegister }, - {KEYBOARD_HEIGHT_CHANGE_CB, &JsWindowRegisterManager::ProcessOccupiedAreaChangeRegister }, - {TOUCH_OUTSIDE_CB, &JsWindowRegisterManager::ProcessTouchOutsideRegister } + { WINDOW_SIZE_CHANGE_CB, &JsWindowRegisterManager::ProcessWindowChangeRegister }, + { SYSTEM_AVOID_AREA_CHANGE_CB, &JsWindowRegisterManager::ProcessSystemAvoidAreaChangeRegister }, + { AVOID_AREA_CHANGE_CB, &JsWindowRegisterManager::ProcessAvoidAreaChangeRegister }, + { LIFECYCLE_EVENT_CB, &JsWindowRegisterManager::ProcessLifeCycleEventRegister }, + { KEYBOARD_HEIGHT_CHANGE_CB, &JsWindowRegisterManager::ProcessOccupiedAreaChangeRegister }, + { TOUCH_OUTSIDE_CB, &JsWindowRegisterManager::ProcessTouchOutsideRegister } }; // white register list for window stage listenerProcess_[CaseType::CASE_STAGE] = { @@ -70,6 +70,10 @@ bool JsWindowRegisterManager::ProcessSystemAvoidAreaChangeRegister(sptrSetIsDeprecatedInterface(true); sptr thisListener(listener); if (isRegister) { diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index 9e4d09d6..9253f519 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -102,8 +102,7 @@ NativeValue* AvoidAreaTypeInit(NativeEngine* engine) static_cast(AvoidAreaType::TYPE_CUTOUT))); object->SetProperty("TYPE_SYSTEM_GESTURE", CreateJsValue(*engine, static_cast(AvoidAreaType::TYPE_SYSTEM_GESTURE))); - object->SetProperty("TYPE_KEYBOARD", CreateJsValue(*engine, - static_cast(AvoidAreaType::TYPE_KEYBOARD))); + object->SetProperty("TYPE_KEYBOARD", CreateJsValue(*engine, static_cast(AvoidAreaType::TYPE_KEYBOARD))); return objValue; } diff --git a/wm/src/window_adapter.cpp b/wm/src/window_adapter.cpp index c492949c..2d2285a5 100644 --- a/wm/src/window_adapter.cpp +++ b/wm/src/window_adapter.cpp @@ -261,7 +261,6 @@ void WindowAdapter::MinimizeWindowsByLauncher(std::vector windowIds, b WMError WindowAdapter::UpdateAvoidAreaListener(uint32_t windowId, bool haveListener) { INIT_PROXY_CHECK_RETURN(WMError::WM_ERROR_SAMGR); - return windowManagerServiceProxy_->UpdateAvoidAreaListener(windowId, haveListener); } } // namespace Rosen diff --git a/wm/src/window_agent.cpp b/wm/src/window_agent.cpp index 36bf52c8..e99a5966 100644 --- a/wm/src/window_agent.cpp +++ b/wm/src/window_agent.cpp @@ -57,8 +57,8 @@ void WindowAgent::UpdateFocusStatus(bool focused) void WindowAgent::UpdateAvoidArea(const sptr& avoidArea, AvoidAreaType type) { - if (window_ == nullptr) { - WLOGFE("window_ is nullptr"); + if (window_ == nullptr || avoidArea == nullptr) { + WLOGFE("window_ or avoidArea is nullptr."); return; } window_->UpdateAvoidArea(avoidArea, type); diff --git a/wm/src/window_impl.cpp b/wm/src/window_impl.cpp index f95c09a2..7dd3be9a 100644 --- a/wm/src/window_impl.cpp +++ b/wm/src/window_impl.cpp @@ -295,7 +295,6 @@ WMError WindowImpl::GetAvoidAreaByType(AvoidAreaType type, AvoidArea& avoidArea) if (ret != WMError::WM_OK) { WLOGFE("GetAvoidAreaByType errCode:%{public}d winId:%{public}u Type is :%{public}u.", static_cast(ret), property_->GetWindowId(), static_cast(type)); - return ret; } return ret; } @@ -2145,12 +2144,7 @@ void WindowImpl::NotifyAvoidAreaChange(const sptr& avoidArea, AvoidAr std::lock_guard lock(mutex_); avoidAreaChangeListeners = avoidAreaChangeListeners_; } - PostListenerTask([avoidAreaChangeListeners, avoidArea, type]() { - AvoidArea outAvoidArea; - outAvoidArea.topRect_ = avoidArea->topRect_; - outAvoidArea.leftRect_ = avoidArea->leftRect_; - outAvoidArea.rightRect_ = avoidArea->rightRect_; - outAvoidArea.bottomRect_ = avoidArea->bottomRect_; + PostListenerTask([avoidAreaChangeListeners, outAvoidArea = *avoidArea, type]() { for (auto& listener : avoidAreaChangeListeners) { if (listener != nullptr) { listener->OnAvoidAreaChanged(outAvoidArea, type); diff --git a/wm/test/systemtest/BUILD.gn b/wm/test/systemtest/BUILD.gn index 11d52155..f05745d1 100644 --- a/wm/test/systemtest/BUILD.gn +++ b/wm/test/systemtest/BUILD.gn @@ -25,9 +25,9 @@ group("systemtest") { ":wm_window_effect_test", ":wm_window_focus_test", ":wm_window_gamut_test", + ":wm_window_immersive_test", ":wm_window_input_method_test", ":wm_window_input_test", - ":wm_window_layout_test", ":wm_window_mode_support_info_test", ":wm_window_move_drag_test", ":wm_window_multi_ability_test", diff --git a/wm/test/systemtest/window_immersive_test.cpp b/wm/test/systemtest/window_immersive_test.cpp index 6f7191c3..919c00bf 100644 --- a/wm/test/systemtest/window_immersive_test.cpp +++ b/wm/test/systemtest/window_immersive_test.cpp @@ -59,8 +59,8 @@ public: class TestAvoidAreaChangedListener : public IAvoidAreaChangedListener { public: - AvoidArea avoidAreas_; - void OnAvoidAreaChanged(const AvoidArea avoidAreas) override; + AvoidArea avoidArea_; + void OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type) override; }; class WindowImmersiveTest : public testing::Test { @@ -97,7 +97,7 @@ sptr WindowImmersiveTest::testAvoidAreaChangedList void WindowImmersiveTest::SetWindowSystemProps(const sptr& window, const SystemBarRegionTints& tints) { for (auto tint : tints) { - window->SetSystemBarProperty(tint.type_, tint.propWindowImmersiveTest _); + window->SetSystemBarProperty(tint.type_, tint.prop_); } } @@ -106,16 +106,15 @@ void WindowImmersiveTest::DumpFailedInfo(const SystemBarRegionTints& expect) auto act = testSystemBarChangedListener_->tints_; WLOGFI("WindowImmersiveTest Expected:"); for (auto tint : expect) { - WLOGFI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x", - static_cast(tint.type_), tint.prop_.enable_, - tint.prop_.backgroundColor_, tint.prop_.contentColor_); + WLOGFI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x", + static_cast(tint.type_), tint.prop_.enable_, + tint.prop_.backgroundColor_, tint.prop_.contentColor_); } WLOGFI("WindowImmersiveTest Act: "); - for (auto tint : act) { - WLOGFI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x", - static_cast(tint.type_), tint.prop_.enable_, - tint.prop_.backgroundColor_, tint.prop_.contentColor_); + WLOGFI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x", + static_cast(tint.type_), tint.prop_.enable_, + tint.prop_.backgroundColor_, tint.prop_.contentColor_); } } @@ -189,9 +188,9 @@ void TestSystemBarChangedListener::OnSystemBarPropertyChange(DisplayId displayId } } -void TestAvoidAreaChangedListener::OnAvoidAreaChanged(AvoidArea avoidAreas) +void TestAvoidAreaChangedListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type) { - avoidAreas_ = avoidAreas; + avoidArea_ = avoidArea; } void WindowImmersiveTest::SetUpTestCase() @@ -394,154 +393,6 @@ HWTEST_F(WindowImmersiveTest, GetAvoidAreaByTypeTest01, Function | MediumTest | ASSERT_EQ(WMError::WM_OK, win->Hide()); } -/** - * @tc.name: GetAvoidAreaByTypeTest02 - * @tc.desc: Add SystemBar left avoid. And Test GetAvoidArea. - * @tc.type: FUNC - */ -HWTEST_F(WindowImmersiveTest, GetAvoidAreaByTypeTest02, Function | MediumTest | Level3) -{ - // Add full screenwindow for call GetAvoidArea, and push_back in activeWindows_ - const sptr& win = utils::CreateTestWindow(fullScreenAppinfo_); - activeWindows_.push_back(win); - ASSERT_EQ(WMError::WM_OK, win->Show()); - WLOGFI("win.posY_=%{public}d", win->GetRect().posY_); - - // Add a unexist leftAvoid - avoidBarInfo_.rect = {0, 0, leftAvoidW_, leftAvoidH_}; - const sptr& left = utils::CreateTestWindow(avoidBarInfo_); - activeWindows_.push_back(left); - WLOGFI("win.posY_=%{public}d", win->GetRect().posY_); - ASSERT_EQ(WMError::WM_OK, left->Show()); - ASSERT_EQ(WMError::WM_OK, left->Resize(leftAvoidW_, leftAvoidH_)); - - - // Test GetAvoidArea - AvoidArea avoidarea; - WMError ret = win->GetAvoidAreaByType(AvoidAreaType::TYPE_SYSTEM, avoidarea); - WLOGFI("ret = [%{public}u, avoidArea: top[%{public}d, %{public}d, %{public}u, %{public}u], left[%{public}d, %{public}d, %{public}u, %{public}u], " \ - "right[%{public}d, %{public}d, %{public}u, %{public}u], bottom[%{public}d, %{public}d, %{public}u, %{public}u]", ret, - avoidarea.topRect_.posX_, avoidarea.topRect_.posY_, avoidarea.topRect_.width_, avoidarea.topRect_.height_, - avoidarea.leftRect_.posX_, avoidarea.leftRect_.posY_, avoidarea.leftRect_.width_, avoidarea.leftRect_.height_, - avoidarea.rightRect_.posX_, avoidarea.rightRect_.posY_, avoidarea.rightRect_.width_, avoidarea.rightRect_.height_, - avoidarea.bottomRect_.posX_, avoidarea.bottomRect_.posY_, avoidarea.bottomRect_.width_, avoidarea.bottomRect_.height_); - ASSERT_EQ(WMError::WM_OK, ret); - ASSERT_TRUE(utils::RectEqualTo(left, avoidarea.leftRect_)); - ASSERT_EQ(WMError::WM_OK, left->Hide()); - ASSERT_EQ(WMError::WM_OK, win->Hide()); -} - -/** - * @tc.name: GetAvoidAreaByTypeTest03 - * @tc.desc: Add SystemBar top avoid. And Test GetAvoidArea. - * @tc.type: FUNC - */ -HWTEST_F(WindowImmersiveTest, GetAvoidAreaByTypeTest03, Function | MediumTest | Level3) -{ - // Add full screenwindow for call GetAvoidArea, and push_back in activeWindows_ - const sptr& win = utils::CreateTestWindow(fullScreenAppinfo_); - activeWindows_.push_back(win); - - // Add a unexist topAvoid - avoidBarInfo_.name = "TopAvoidTest"; - avoidBarInfo_.rect = {0, 0, topAvoidW_, topAvoidH_}; - const sptr& top = utils::CreateTestWindow(avoidBarInfo_); - activeWindows_.push_back(top); - ASSERT_EQ(WMError::WM_OK, top->Show()); - ASSERT_EQ(WMError::WM_OK, top->Resize(topAvoidW_, topAvoidH_)); - - // Tesr GetAvoidArea - AvoidArea avoidarea; - WMError ret = win->GetAvoidAreaByType(AvoidAreaType::TYPE_SYSTEM, avoidarea); - ASSERT_EQ(WMError::WM_OK, ret); - ASSERT_TRUE(utils::RectEqualTo(top, avoidarea.topRect)); - ASSERT_EQ(WMError::WM_OK, top->Hide()); - ASSERT_EQ(WMError::WM_OK, win->Hide()); -} - -/** - * @tc.name: OnAvoidAreaChangedTest01 - * @tc.desc: Add unexistavoid and Update this avoid. Test OnAvoidAreaChanged listener - * @tc.type: FUNC - */ -HWTEST_F(WindowImmersiveTest, OnAvoidAreaChangedTest01, Function | MediumTest | Level3) -{ - // Add full screenwindow for RegisterAvoidAreaChangeListener - const sptr& window = utils::CreateTestWindow(fullScreenAppinfo_); - sptr thisListener(testAvoidAreaChangedListener_); - window->RegisterAvoidAreaChangeListener(thisListener); - activeWindows_.push_back(window); - ASSERT_EQ(WMError::WM_OK, window->Show()); - - // Add a unexist topAvoid - avoidBarInfo_.name = "TopAvoidTest"; - avoidBarInfo_.rect = {0, 0, topAvoidW_, topAvoidH_}; - const sptr& top = utils::CreateTestWindow(avoidBarInfo_); - activeWindows_.push_back(top); - ASSERT_EQ(WMError::WM_OK, top->Show()); - ASSERT_EQ(WMError::WM_OK, top->Resize(topAvoidW_, topAvoidH_)); - - // Await 100ms and get callback result in listener. Compare current avoidArea - usleep(WAIT_ASYNC_US); - std::vector avoidArea = testAvoidAreaChangedListener_->avoidAreas_; - ASSERT_EQ(4u, static_cast(avoidArea.size())); // 4: avoidAreaNum(left, top, right, bottom) - ASSERT_TRUE(utils::RectEqualToRect(avoidBarInfo_.rect, avoidArea[1])); // 1: left Rect - - // Update topavoid. Enlarge topAvoidH_ - uint32_t bigHeight = std::min(static_cast(utils::displayRect_.height_), - static_cast(utils::displayRect_.width_ * 0.5)); // 0.5 : just use bigger height for update - Rect bigTopRect = {0, 0, topAvoidW_, bigHeight}; - ASSERT_EQ(WMError::WM_OK, top->Resize(topAvoidW_, bigHeight)); - - // Await 100ms and get callback result in listener. Compare current avoidArea - usleep(WAIT_ASYNC_US); - std::vector avoidArea2 = testAvoidAreaChangedListener_->avoidAreas_; - ASSERT_TRUE(utils::RectEqualToRect(bigTopRect, avoidArea2[1])); - - window->UnregisterAvoidAreaChangeListener(thisListener); - ASSERT_EQ(WMError::WM_OK, top->Hide()); - ASSERT_EQ(WMError::WM_OK, window->Hide()); -} - -/** - * @tc.name: OnAvoidAreaChangedTest02 - * @tc.desc: Add unexistavoid and remove this avoid. Test OnAvoidAreaChanged listener - * @tc.type: FUNC - */ -HWTEST_F(WindowImmersiveTest, OnAvoidAreaChangedTest02, Function | MediumTest | Level3) -{ - // Add full screenwindow for call UpdateAvoidChange - const sptr& window = utils::CreateTestWindow(fullScreenAppinfo_); - sptr thisListener(testAvoidAreaChangedListener_); - window->RegisterAvoidAreaChangeListener(thisListener); - activeWindows_.push_back(window); - ASSERT_EQ(WMError::WM_OK, window->Show()); - - // Add a unexist leftAvoid - avoidBarInfo_.rect = {0, 0, leftAvoidW_, leftAvoidH_}; - const sptr& left = utils::CreateTestWindow(avoidBarInfo_); - activeWindows_.push_back(left); - ASSERT_EQ(WMError::WM_OK, left->Show()); - ASSERT_EQ(WMError::WM_OK, left->Resize(leftAvoidW_, leftAvoidH_)); - - // Await 100ms and get callback result in listener. Compare current avoidArea - usleep(WAIT_ASYNC_US); - std::vector avoidArea = testAvoidAreaChangedListener_->avoidAreas_; - ASSERT_EQ(4u, static_cast(avoidArea.size())); // 4: avoidAreaNum(left, top, right, bottom) - ASSERT_TRUE(utils::RectEqualToRect(avoidBarInfo_.rect, avoidArea[0])); // 0: left Rect - - // Remove left avoid. - ASSERT_EQ(WMError::WM_OK, left->Hide()); - - // Await 100ms and get callback result in listener. Compare current avoidArea - usleep(WAIT_ASYNC_US); - std::vector avoidArea2 = testAvoidAreaChangedListener_->avoidAreas_; - ASSERT_TRUE(utils::RectEqualToRect(EMPTY_RECT, avoidArea2[0])); // 0: left Rect - - window->UnregisterAvoidAreaChangeListener(thisListener); - ASSERT_EQ(WMError::WM_OK, window->Hide()); -} - /** * @tc.name: DockWindowTest01 * @tc.desc: Add unexistavoid and remove this avoid. Test OnAvoidAreaChanged listener diff --git a/wm/test/systemtest/window_split_immersive_test.cpp b/wm/test/systemtest/window_split_immersive_test.cpp index afeb680e..61b305f8 100644 --- a/wm/test/systemtest/window_split_immersive_test.cpp +++ b/wm/test/systemtest/window_split_immersive_test.cpp @@ -118,10 +118,6 @@ HWTEST_F(WindowSplitImmersiveTest, SplitImmersive01, Function | MediumTest | Lev // check is out split Immersive ASSERT_EQ(WindowMode::WINDOW_MODE_FULLSCREEN, fullWindow->GetMode()); - Rect curFullScreenRect = fullWindow->GetRect(); - AvoidArea avoidArea; - fullWindow->GetAvoidAreaByType(AvoidAreaType::TYPE_SYSTEM, avoidArea); - ASSERT_EQ(avoidArea.topRect_.height_, curFullScreenRect.posY_); ASSERT_EQ(WMError::WM_OK, fullWindow->Hide()); sleep(SPLIT_TEST_SLEEP_S); diff --git a/wmserver/include/avoid_area_controller.h b/wmserver/include/avoid_area_controller.h index 9b6cd6ff..82af2268 100644 --- a/wmserver/include/avoid_area_controller.h +++ b/wmserver/include/avoid_area_controller.h @@ -55,7 +55,7 @@ private: AvoidPosType CalculateOverlayRect(const sptr& node, const sptr& overlayNode, Rect& overlayRect) const; AvoidPosType GetAvoidPosType(const Rect& windowRect, const Rect& overlayRect) const; - void SetAvoidAreaRect(AvoidArea& avoidArea, Rect& rect, AvoidPosType type) const; + void SetAvoidAreaRect(AvoidArea& avoidArea, const Rect& rect, AvoidPosType type) const; bool UpdateAvoidAreaIfNeed(const AvoidArea& avoidArea, const sptr& node, AvoidAreaType avoidAreaType); AvoidArea GetAvoidAreaSystemType(const sptr& node) const; AvoidArea GetAvoidAreaKeyboardType(const sptr& node) const; @@ -64,8 +64,8 @@ private: std::unordered_map> overlayWindowMap_; std::set> avoidAreaListenerNodes_; std::map> lastUpdatedAvoidArea_; - DEFINE_VAR_DEFAULT_FUNC_SET(bool, FlagForProcessWindowChange, isForbidProcessingWindowChange, false) uint32_t lastSoftInputKeyboardAreaUpdatedWindowId_ { 0 }; + DEFINE_VAR_DEFAULT_FUNC_SET(bool, FlagForProcessWindowChange, isForbidProcessingWindowChange, false) }; } } diff --git a/wmserver/include/window_controller.h b/wmserver/include/window_controller.h index ca602bfb..66971809 100644 --- a/wmserver/include/window_controller.h +++ b/wmserver/include/window_controller.h @@ -43,7 +43,7 @@ public: WMError RequestFocus(uint32_t windowId); WMError SetWindowBackgroundBlur(uint32_t windowId, WindowBlurLevel level); WMError SetAlpha(uint32_t windowId, float alpha); - AvoidArea GetAvoidAreaByType(uint32_t windowId, AvoidAreaType avoidAreaType); + AvoidArea GetAvoidAreaByType(uint32_t windowId, AvoidAreaType avoidAreaType) const; WMError GetTopWindowId(uint32_t mainWinId, uint32_t& topWinId); void NotifyDisplayStateChange(DisplayId defaultDisplayId, sptr displayInfo, const std::map>& displayInfoMap, DisplayStateChangeType type); diff --git a/wmserver/include/window_node_container.h b/wmserver/include/window_node_container.h index faea28a7..6803edeb 100644 --- a/wmserver/include/window_node_container.h +++ b/wmserver/include/window_node_container.h @@ -56,7 +56,7 @@ public: uint32_t ToOverrideBrightness(float brightness); void UpdateBrightness(uint32_t id, bool byRemoved); void HandleKeepScreenOn(const sptr& node, bool requireLock); - AvoidArea GetAvoidAreaByType(const sptr& node, AvoidAreaType avoidAreaType); + AvoidArea GetAvoidAreaByType(const sptr& node, AvoidAreaType avoidAreaType) const; WMError MinimizeStructuredAppWindowsExceptSelf(const sptr& node); void TraverseContainer(std::vector>& windowNodes) const; uint64_t GetScreenId(DisplayId displayId) const; diff --git a/wmserver/include/zidl/window_manager_proxy.h b/wmserver/include/zidl/window_manager_proxy.h index fc358929..4d58628b 100644 --- a/wmserver/include/zidl/window_manager_proxy.h +++ b/wmserver/include/zidl/window_manager_proxy.h @@ -59,7 +59,6 @@ public: void MinimizeWindowsByLauncher(std::vector windowIds, bool isAnimated, sptr& finishCallback) override; WMError UpdateAvoidAreaListener(uint32_t windowId, bool haveListener) override; - private: static inline BrokerDelegator delegator_; }; diff --git a/wmserver/src/avoid_area_controller.cpp b/wmserver/src/avoid_area_controller.cpp index 6f5a1322..a173696c 100644 --- a/wmserver/src/avoid_area_controller.cpp +++ b/wmserver/src/avoid_area_controller.cpp @@ -75,11 +75,10 @@ void AvoidAreaController::AddOrRemoveOverlayWindowIfNeed(const sptr& uint32_t overlayId = overlayNode->GetWindowId(); bool isRecorded = (overlayWindowMap_.find(overlayId) != overlayWindowMap_.end()); if (isAdding == isRecorded) { - WLOGE("error occured in overlay. overlayId %{public}u isAdding %{public}d record flag %{public}d", + WLOGFE("error occured in overlay. overlayId %{public}u isAdding %{public}d record flag %{public}d", overlayId, isAdding, isRecorded); return; } - WLOGFE("overlayId %{public}u isAdding %{public}d record flag %{public}d", overlayId, isAdding, isRecorded); if (isAdding) { overlayWindowMap_.insert(std::make_pair(overlayId, overlayNode)); } else { @@ -102,34 +101,36 @@ void AvoidAreaController::AddOrRemoveKeyboard(const sptr& keyboardNo const uint32_t callingWindowId = keyboardNode->GetCallingWindow(); sptr callingWindow = nullptr; sptr focusWindow = nullptr; - sptr lastSoftInputKeyboardAreaUpdatedWindow = nullptr; + sptr lastKeyboardAreaUpdatedWindow = nullptr; for (auto window : avoidAreaListenerNodes_) { - if (window != nullptr && window->GetWindowToken() != nullptr && window->GetWindowId() == callingWindowId) { + if (window == nullptr || window->GetWindowToken() == nullptr) { + continue; + } + if (window->GetWindowId() == callingWindowId) { callingWindow = window; } - if (window != nullptr && window->GetWindowToken() != nullptr && window->GetWindowId() == focusedWindow_) { + if (window->GetWindowId() == focusedWindow_) { focusWindow = window; } - if (window != nullptr && window->GetWindowToken() != nullptr && - window->GetWindowId() == lastSoftInputKeyboardAreaUpdatedWindowId_) { - lastSoftInputKeyboardAreaUpdatedWindow = window; + if (window->GetWindowId() == lastSoftInputKeyboardAreaUpdatedWindowId_) { + lastKeyboardAreaUpdatedWindow = window; } } if (callingWindow == nullptr) { callingWindow = focusWindow; } - if (lastSoftInputKeyboardAreaUpdatedWindow != nullptr && lastSoftInputKeyboardAreaUpdatedWindow != callingWindow) { - const WindowMode windowMode = lastSoftInputKeyboardAreaUpdatedWindow->GetWindowMode(); + if (lastKeyboardAreaUpdatedWindow != nullptr && lastKeyboardAreaUpdatedWindow != callingWindow) { + const WindowMode windowMode = lastKeyboardAreaUpdatedWindow->GetWindowMode(); if (windowMode == WindowMode::WINDOW_MODE_FULLSCREEN || windowMode == WindowMode::WINDOW_MODE_SPLIT_PRIMARY || windowMode == WindowMode::WINDOW_MODE_SPLIT_SECONDARY || windowMode == WindowMode::WINDOW_MODE_FLOATING) { - auto avoidArea = GetAvoidAreaByType(lastSoftInputKeyboardAreaUpdatedWindow, AvoidAreaType::TYPE_KEYBOARD); - UpdateAvoidAreaIfNeed(avoidArea, lastSoftInputKeyboardAreaUpdatedWindow, AvoidAreaType::TYPE_KEYBOARD); + auto avoidArea = GetAvoidAreaByType(lastKeyboardAreaUpdatedWindow, AvoidAreaType::TYPE_KEYBOARD); + UpdateAvoidAreaIfNeed(avoidArea, lastKeyboardAreaUpdatedWindow, AvoidAreaType::TYPE_KEYBOARD); } } - if (callingWindow == nullptr && focusWindow == nullptr) { - WLOGFI("callingWindow: %{public}u is nullptr, focusWindow: %{public}u is nullptr.", + if (callingWindow == nullptr) { + WLOGFE("callingWindow: %{public}u is nullptr, focusWindow: %{public}u is nullptr.", callingWindowId, focusedWindow_); return; } @@ -168,15 +169,14 @@ void AvoidAreaController::UpdateOverlayWindowIfNeed(const sptr& node WLOGE("window: %{public}u is not in avoidAreaListenerNodes, don't update avoid area.", node->GetWindowId()); return; } - AvoidArea systemAvoidArea = GetAvoidAreaByType(node, AvoidAreaType::TYPE_SYSTEM); - AvoidArea cutoutAvoidArea = GetAvoidAreaByType(node, AvoidAreaType::TYPE_CUTOUT); - AvoidArea gestureAvoidArea = GetAvoidAreaByType(node, AvoidAreaType::TYPE_SYSTEM_GESTURE); - AvoidArea keyboardAvoidArea = GetAvoidAreaByType(node, AvoidAreaType::TYPE_KEYBOARD); - UpdateAvoidAreaIfNeed(systemAvoidArea, node, AvoidAreaType::TYPE_SYSTEM); - UpdateAvoidAreaIfNeed(cutoutAvoidArea, node, AvoidAreaType::TYPE_CUTOUT); - UpdateAvoidAreaIfNeed(gestureAvoidArea, node, AvoidAreaType::TYPE_SYSTEM_GESTURE); - if (UpdateAvoidAreaIfNeed(keyboardAvoidArea, node, AvoidAreaType::TYPE_KEYBOARD)) { - lastSoftInputKeyboardAreaUpdatedWindowId_ = node->GetWindowId(); + uint32_t start = static_cast(AvoidAreaType::TYPE_SYSTEM); + uint32_t end = static_cast(AvoidAreaType::TYPE_KEYBOARD); + for (int type = start; type <= end; type++) { + AvoidArea systemAvoidArea = GetAvoidAreaByType(node, static_cast(type)); + bool res = UpdateAvoidAreaIfNeed(systemAvoidArea, node, static_cast(type)); + if (res && type == static_cast(AvoidAreaType::TYPE_KEYBOARD)) { + lastSoftInputKeyboardAreaUpdatedWindowId_ = node->GetWindowId(); + } } } } @@ -241,7 +241,7 @@ AvoidPosType AvoidAreaController::GetAvoidPosType(const Rect& windowRect, const return AvoidPosType::AVOID_POS_BOTTOM; } -void AvoidAreaController::SetAvoidAreaRect(AvoidArea& avoidArea, Rect& rect, AvoidPosType type) const +void AvoidAreaController::SetAvoidAreaRect(AvoidArea& avoidArea, const Rect& rect, AvoidPosType type) const { switch (type) { case AvoidPosType::AVOID_POS_TOP : { @@ -335,10 +335,9 @@ AvoidArea AvoidAreaController::GetAvoidAreaSystemType(const sptr& no AvoidArea AvoidAreaController::GetAvoidAreaKeyboardType(const sptr& node) const { - AvoidArea avoidArea; if (focusedWindow_ != node->GetWindowId()) { WLOGFI("focusedWindow: %{public}u is not windowId: %{public}u", focusedWindow_, node->GetWindowId()); - return avoidArea; + return {}; } for (auto& iter : overlayWindowMap_) { if (iter.second != nullptr && @@ -351,11 +350,12 @@ AvoidArea AvoidAreaController::GetAvoidAreaKeyboardType(const sptr& } Rect avoidAreaRect; AvoidPosType avoidPosType = CalculateOverlayRect(node, iter.second, avoidAreaRect); + AvoidArea avoidArea; SetAvoidAreaRect(avoidArea, avoidAreaRect, avoidPosType); return avoidArea; } } - return avoidArea; + return {}; } } } diff --git a/wmserver/src/window_controller.cpp b/wmserver/src/window_controller.cpp index d6ab58c7..580d8326 100644 --- a/wmserver/src/window_controller.cpp +++ b/wmserver/src/window_controller.cpp @@ -616,7 +616,7 @@ WMError WindowController::SetWindowAnimationController(const sptrGetAvoidAreaByType(windowId, avoidAreaType); } diff --git a/wmserver/src/window_manager_service.cpp b/wmserver/src/window_manager_service.cpp index d14f68ba..89d51ef9 100644 --- a/wmserver/src/window_manager_service.cpp +++ b/wmserver/src/window_manager_service.cpp @@ -669,7 +669,6 @@ void WindowManagerService::GetFullScreenWindowRequestedOrientation(DisplayId dis WMError WindowManagerService::UpdateAvoidAreaListener(uint32_t windowId, bool haveAvoidAreaListener) { return wmsTaskLooper_->ScheduleTask([this, windowId, haveAvoidAreaListener]() { - WM_SCOPED_TRACE("wms:UpdateAvoidAreaListener"); sptr node = windowRoot_->GetWindowNode(windowId); if (node == nullptr) { WLOGFE("get window node failed. win %{public}u", windowId); diff --git a/wmserver/src/window_node_container.cpp b/wmserver/src/window_node_container.cpp index 942fa200..a2e77c39 100644 --- a/wmserver/src/window_node_container.cpp +++ b/wmserver/src/window_node_container.cpp @@ -224,7 +224,6 @@ WMError WindowNodeContainer::UpdateWindowNode(sptr& node, WindowUpda if (WindowHelper::IsMainWindow(node->GetWindowType()) && WindowHelper::IsSwitchCascadeReason(reason)) { SwitchLayoutPolicy(WindowLayoutMode::CASCADE, node->GetDisplayId()); } - WLOGFI("UpdateWindowNode windowId: %{public}u begin", node->GetWindowId()); layoutPolicy_->UpdateWindowNode(node); NotifyIfAvoidAreaChanged(node, AvoidControlType::AVOID_NODE_UPDATE); DumpScreenWindowTree(); @@ -862,8 +861,8 @@ void WindowNodeContainer::NotifyIfKeyboardRegionChanged(const sptr& WLOGFI("keyboard size change callingWindow: [%{public}s, %{public}u], " \ "overlap rect: [%{public}d, %{public}d, %{public}u, %{public}u]", - callingWindow->GetWindowName().c_str(), callingWindow->GetWindowId(), - overlapRect.posX_, overlapRect.posY_, overlapRect.width_, overlapRect.height_); + callingWindow->GetWindowName().c_str(), callingWindow->GetWindowId(), + overlapRect.posX_, overlapRect.posY_, overlapRect.width_, overlapRect.height_); sptr info = new OccupiedAreaChangeInfo(OccupiedAreaType::TYPE_INPUT, overlapRect); callingWindow->GetWindowToken()->UpdateOccupiedAreaChangeInfo(info); return; @@ -1082,7 +1081,7 @@ void WindowNodeContainer::TraverseWindowNode(sptr& node, std::vector } } -AvoidArea WindowNodeContainer::GetAvoidAreaByType(const sptr& node, AvoidAreaType avoidAreaType) +AvoidArea WindowNodeContainer::GetAvoidAreaByType(const sptr& node, AvoidAreaType avoidAreaType) const { if (CheckWindowNodeWhetherInWindowTree(node)) { return avoidController_->GetAvoidAreaByType(node, avoidAreaType); diff --git a/wmserver/src/window_root.cpp b/wmserver/src/window_root.cpp index e6bc12f6..59b64bac 100644 --- a/wmserver/src/window_root.cpp +++ b/wmserver/src/window_root.cpp @@ -72,7 +72,7 @@ sptr WindowRoot::GetOrCreateWindowNodeContainer(DisplayId d } // In case of have no container for default display, create container - WLOGFE("Create container for current display, displayId: %{public}" PRIu64 "", displayId); + WLOGFI("Create container for current display, displayId: %{public}" PRIu64 "", displayId); sptr displayInfo = DisplayManagerServiceInner::GetInstance().GetDisplayById(displayId); return CreateWindowNodeContainer(displayInfo); }