mirror of
https://github.com/openharmony/windowmanager.git
synced 2026-07-20 01:13:32 -04:00
fix code style
Signed-off-by: xiaojianfeng <xiaojianfeng3@huawei.com> Change-Id: I70a83035135945f5af011d1b66a2bb581b4a6114
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -86,7 +86,7 @@ declare namespace window {
|
||||
TYPE_SYSTEM_GESTURE,
|
||||
|
||||
/**
|
||||
* area for keyboard
|
||||
* area for soft input keyboard
|
||||
* @since 9
|
||||
*/
|
||||
TYPE_KEYBOARD
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(sptr<JsWindow
|
||||
WLOGFE("[NAPI]Window is nullptr");
|
||||
return false;
|
||||
}
|
||||
if (listener == nullptr) {
|
||||
WLOGFE("[NAPI]listener is nullptr");
|
||||
return false;
|
||||
}
|
||||
listener->SetIsDeprecatedInterface(true);
|
||||
sptr<IAvoidAreaChangedListener> thisListener(listener);
|
||||
if (isRegister) {
|
||||
|
||||
@@ -102,8 +102,7 @@ NativeValue* AvoidAreaTypeInit(NativeEngine* engine)
|
||||
static_cast<int32_t>(AvoidAreaType::TYPE_CUTOUT)));
|
||||
object->SetProperty("TYPE_SYSTEM_GESTURE", CreateJsValue(*engine,
|
||||
static_cast<int32_t>(AvoidAreaType::TYPE_SYSTEM_GESTURE)));
|
||||
object->SetProperty("TYPE_KEYBOARD", CreateJsValue(*engine,
|
||||
static_cast<int32_t>(AvoidAreaType::TYPE_KEYBOARD)));
|
||||
object->SetProperty("TYPE_KEYBOARD", CreateJsValue(*engine, static_cast<int32_t>(AvoidAreaType::TYPE_KEYBOARD)));
|
||||
return objValue;
|
||||
}
|
||||
|
||||
|
||||
@@ -261,7 +261,6 @@ void WindowAdapter::MinimizeWindowsByLauncher(std::vector<uint32_t> 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
|
||||
|
||||
@@ -57,8 +57,8 @@ void WindowAgent::UpdateFocusStatus(bool focused)
|
||||
|
||||
void WindowAgent::UpdateAvoidArea(const sptr<AvoidArea>& 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);
|
||||
|
||||
@@ -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<int32_t>(ret), property_->GetWindowId(), static_cast<uint32_t>(type));
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -2145,12 +2144,7 @@ void WindowImpl::NotifyAvoidAreaChange(const sptr<AvoidArea>& avoidArea, AvoidAr
|
||||
std::lock_guard<std::recursive_mutex> 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);
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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<TestAvoidAreaChangedListener> WindowImmersiveTest::testAvoidAreaChangedList
|
||||
void WindowImmersiveTest::SetWindowSystemProps(const sptr<Window>& 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<uint32_t>(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<uint32_t>(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<uint32_t>(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<uint32_t>(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<Window>& 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<Window>& 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<Window>& win = utils::CreateTestWindow(fullScreenAppinfo_);
|
||||
activeWindows_.push_back(win);
|
||||
|
||||
// Add a unexist topAvoid
|
||||
avoidBarInfo_.name = "TopAvoidTest";
|
||||
avoidBarInfo_.rect = {0, 0, topAvoidW_, topAvoidH_};
|
||||
const sptr<Window>& 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>& window = utils::CreateTestWindow(fullScreenAppinfo_);
|
||||
sptr<IAvoidAreaChangedListener> 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<Window>& 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<Rect> avoidArea = testAvoidAreaChangedListener_->avoidAreas_;
|
||||
ASSERT_EQ(4u, static_cast<uint32_t>(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<uint32_t>(utils::displayRect_.height_),
|
||||
static_cast<uint32_t>(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<Rect> 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>& window = utils::CreateTestWindow(fullScreenAppinfo_);
|
||||
sptr<IAvoidAreaChangedListener> 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<Window>& 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<Rect> avoidArea = testAvoidAreaChangedListener_->avoidAreas_;
|
||||
ASSERT_EQ(4u, static_cast<uint32_t>(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<Rect> 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -55,7 +55,7 @@ private:
|
||||
AvoidPosType CalculateOverlayRect(const sptr<WindowNode>& node,
|
||||
const sptr<WindowNode>& 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<WindowNode>& node, AvoidAreaType avoidAreaType);
|
||||
AvoidArea GetAvoidAreaSystemType(const sptr<WindowNode>& node) const;
|
||||
AvoidArea GetAvoidAreaKeyboardType(const sptr<WindowNode>& node) const;
|
||||
@@ -64,8 +64,8 @@ private:
|
||||
std::unordered_map<uint32_t, sptr<WindowNode>> overlayWindowMap_;
|
||||
std::set<sptr<WindowNode>> avoidAreaListenerNodes_;
|
||||
std::map<uint32_t, std::map<AvoidAreaType, AvoidArea>> lastUpdatedAvoidArea_;
|
||||
DEFINE_VAR_DEFAULT_FUNC_SET(bool, FlagForProcessWindowChange, isForbidProcessingWindowChange, false)
|
||||
uint32_t lastSoftInputKeyboardAreaUpdatedWindowId_ { 0 };
|
||||
DEFINE_VAR_DEFAULT_FUNC_SET(bool, FlagForProcessWindowChange, isForbidProcessingWindowChange, false)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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> displayInfo,
|
||||
const std::map<DisplayId, sptr<DisplayInfo>>& displayInfoMap, DisplayStateChangeType type);
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
uint32_t ToOverrideBrightness(float brightness);
|
||||
void UpdateBrightness(uint32_t id, bool byRemoved);
|
||||
void HandleKeepScreenOn(const sptr<WindowNode>& node, bool requireLock);
|
||||
AvoidArea GetAvoidAreaByType(const sptr<WindowNode>& node, AvoidAreaType avoidAreaType);
|
||||
AvoidArea GetAvoidAreaByType(const sptr<WindowNode>& node, AvoidAreaType avoidAreaType) const;
|
||||
WMError MinimizeStructuredAppWindowsExceptSelf(const sptr<WindowNode>& node);
|
||||
void TraverseContainer(std::vector<sptr<WindowNode>>& windowNodes) const;
|
||||
uint64_t GetScreenId(DisplayId displayId) const;
|
||||
|
||||
@@ -59,7 +59,6 @@ public:
|
||||
void MinimizeWindowsByLauncher(std::vector<uint32_t> windowIds, bool isAnimated,
|
||||
sptr<RSIWindowAnimationFinishedCallback>& finishCallback) override;
|
||||
WMError UpdateAvoidAreaListener(uint32_t windowId, bool haveListener) override;
|
||||
|
||||
private:
|
||||
static inline BrokerDelegator<WindowManagerProxy> delegator_;
|
||||
};
|
||||
|
||||
@@ -75,11 +75,10 @@ void AvoidAreaController::AddOrRemoveOverlayWindowIfNeed(const sptr<WindowNode>&
|
||||
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<WindowNode>& keyboardNo
|
||||
const uint32_t callingWindowId = keyboardNode->GetCallingWindow();
|
||||
sptr<WindowNode> callingWindow = nullptr;
|
||||
sptr<WindowNode> focusWindow = nullptr;
|
||||
sptr<WindowNode> lastSoftInputKeyboardAreaUpdatedWindow = nullptr;
|
||||
sptr<WindowNode> 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<WindowNode>& 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<uint32_t>(AvoidAreaType::TYPE_SYSTEM);
|
||||
uint32_t end = static_cast<uint32_t>(AvoidAreaType::TYPE_KEYBOARD);
|
||||
for (int type = start; type <= end; type++) {
|
||||
AvoidArea systemAvoidArea = GetAvoidAreaByType(node, static_cast<AvoidAreaType>(type));
|
||||
bool res = UpdateAvoidAreaIfNeed(systemAvoidArea, node, static_cast<AvoidAreaType>(type));
|
||||
if (res && type == static_cast<uint32_t>(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<WindowNode>& no
|
||||
|
||||
AvoidArea AvoidAreaController::GetAvoidAreaKeyboardType(const sptr<WindowNode>& 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<WindowNode>&
|
||||
}
|
||||
Rect avoidAreaRect;
|
||||
AvoidPosType avoidPosType = CalculateOverlayRect(node, iter.second, avoidAreaRect);
|
||||
AvoidArea avoidArea;
|
||||
SetAvoidAreaRect(avoidArea, avoidAreaRect, avoidPosType);
|
||||
return avoidArea;
|
||||
}
|
||||
}
|
||||
return avoidArea;
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -616,7 +616,7 @@ WMError WindowController::SetWindowAnimationController(const sptr<RSIWindowAnima
|
||||
return RemoteAnimation::SetWindowAnimationController(controller);
|
||||
}
|
||||
|
||||
AvoidArea WindowController::GetAvoidAreaByType(uint32_t windowId, AvoidAreaType avoidAreaType)
|
||||
AvoidArea WindowController::GetAvoidAreaByType(uint32_t windowId, AvoidAreaType avoidAreaType) const
|
||||
{
|
||||
return windowRoot_->GetAvoidAreaByType(windowId, avoidAreaType);
|
||||
}
|
||||
|
||||
@@ -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<WindowNode> node = windowRoot_->GetWindowNode(windowId);
|
||||
if (node == nullptr) {
|
||||
WLOGFE("get window node failed. win %{public}u", windowId);
|
||||
|
||||
@@ -224,7 +224,6 @@ WMError WindowNodeContainer::UpdateWindowNode(sptr<WindowNode>& 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<WindowNode>&
|
||||
|
||||
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<OccupiedAreaChangeInfo> info = new OccupiedAreaChangeInfo(OccupiedAreaType::TYPE_INPUT, overlapRect);
|
||||
callingWindow->GetWindowToken()->UpdateOccupiedAreaChangeInfo(info);
|
||||
return;
|
||||
@@ -1082,7 +1081,7 @@ void WindowNodeContainer::TraverseWindowNode(sptr<WindowNode>& node, std::vector
|
||||
}
|
||||
}
|
||||
|
||||
AvoidArea WindowNodeContainer::GetAvoidAreaByType(const sptr<WindowNode>& node, AvoidAreaType avoidAreaType)
|
||||
AvoidArea WindowNodeContainer::GetAvoidAreaByType(const sptr<WindowNode>& node, AvoidAreaType avoidAreaType) const
|
||||
{
|
||||
if (CheckWindowNodeWhetherInWindowTree(node)) {
|
||||
return avoidController_->GetAvoidAreaByType(node, avoidAreaType);
|
||||
|
||||
@@ -72,7 +72,7 @@ sptr<WindowNodeContainer> 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> displayInfo = DisplayManagerServiceInner::GetInstance().GetDisplayById(displayId);
|
||||
return CreateWindowNodeContainer(displayInfo);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user