diff --git a/frameworks/core/common/watch_dog.cpp b/frameworks/core/common/watch_dog.cpp index 2bc4e472b08fac2464f6756ba557286e936ecaa4..756860c6fefa6eaeddabdac4c7aeb34f247cc95c 100644 --- a/frameworks/core/common/watch_dog.cpp +++ b/frameworks/core/common/watch_dog.cpp @@ -417,6 +417,8 @@ void WatchDog::Register(int32_t instanceId, const RefPtr& taskExec watchers.uiWatcher->SetTaskExecutor(taskExecutor); if (!useUIAsJSThread) { watchers.jsWatcher->SetTaskExecutor(taskExecutor); + } else { + watchers.jsWatcher = nullptr; } const auto resExecutor = watchMap_.try_emplace(instanceId, watchers); if (!resExecutor.second) { diff --git a/frameworks/core/components/container_modal/container_modal_element.cpp b/frameworks/core/components/container_modal/container_modal_element.cpp index 04276331ae4ced75c6e90f785b9b3a83de605899..329b3abe37a431a22c16a96602b68ca630ea4b58 100644 --- a/frameworks/core/components/container_modal/container_modal_element.cpp +++ b/frameworks/core/components/container_modal/container_modal_element.cpp @@ -20,6 +20,7 @@ #include "core/components/container_modal/render_container_modal.h" #include "core/components/flex/flex_element.h" #include "core/components/flex/flex_item_element.h" +#include "core/gestures/tap_gesture.h" namespace OHOS::Ace { namespace { @@ -246,28 +247,52 @@ void ContainerModalElement::Update() } if (info.GetChangedTouches().begin()->GetGlobalLocation().GetY() <= TITLE_POPUP_DISTANCE) { containerElement->floatingTitleDisplay_->UpdateVisibleType(VisibleType::VISIBLE); + containerElement->controller_->ClearStopListeners(); containerElement->controller_->Forward(); } }); - // mouse move top to pop-up title bar. - containerBox->SetOnMouseId([week = WeakClaim(this)](MouseInfo& info) { - auto containerElement = week.Upgrade(); - if (!containerElement || !containerElement->CanShowFloatingTitle()) { + // mouse move top to pop up title bar and move other area to hide title bar. + containerBox->SetOnMouseId([weak = WeakClaim(this)](MouseInfo& info) { + auto containerElement = weak.Upgrade(); + if (!containerElement || info.GetAction() != MouseAction::MOVE) { return; } - if (info.GetAction() == MouseAction::MOVE && info.GetLocalLocation().GetY() <= TITLE_POPUP_DISTANCE) { + if (info.GetLocalLocation().GetY() <= TITLE_POPUP_DISTANCE && containerElement->CanShowFloatingTitle()) { containerElement->floatingTitleDisplay_->UpdateVisibleType(VisibleType::VISIBLE); + containerElement->controller_->ClearStopListeners(); containerElement->controller_->Forward(); } + if (info.GetLocalLocation().GetY() > TITLE_POPUP_DISTANCE && containerElement->CanHideFloatingTitle()) { + containerElement->controller_->AddStopListener([weak] { + auto container = weak.Upgrade(); + container->floatingTitleDisplay_->UpdateVisibleType(VisibleType::GONE); + }); + containerElement->controller_->Backward(); + } + }); + + // touch other area of screen to hide title bar. + auto tapGesture = AceType::MakeRefPtr(); + tapGesture->SetOnActionId([weak = WeakClaim(this)](GestureEvent& info) { + auto containerElement = weak.Upgrade(); + if (!containerElement || !containerElement->CanHideFloatingTitle()) { + return; + } + containerElement->controller_->AddStopListener([weak] { + auto container = weak.Upgrade(); + container->floatingTitleDisplay_->UpdateVisibleType(VisibleType::GONE); + }); + containerElement->controller_->Backward(); }); + containerBox->SetOnClick(tapGesture); } bool ContainerModalElement::CanShowFloatingTitle() { auto context = context_.Upgrade(); if (!context || !floatingTitleDisplay_ || !controller_) { - LOGI("Show floating title failed, context, floatingTitleDisplay_ or controller is null."); + LOGI("Show floating title failed, context, floatingTitleDisplay or controller is null."); return false; } auto mode = context->FireWindowGetModeCallBack(); @@ -276,13 +301,26 @@ bool ContainerModalElement::CanShowFloatingTitle() LOGI("Window is not full screen or split screen, can not show floating title."); return false; } - if (floatingTitleDisplay_->GetVisibleType() == VisibleType::VISIBLE) { + if (floatingTitleDisplay_->GetVisible()) { LOGI("Floating tittle is visible now, no need to show again."); return false; } return true; } +bool ContainerModalElement::CanHideFloatingTitle() +{ + if (!floatingTitleDisplay_ || !controller_) { + LOGI("Hide floating title failed, floatingTitleDisplay or controller is null."); + return false; + } + if (!floatingTitleDisplay_->GetVisible()) { + LOGI("Hide floating title failed, title is not visible."); + return false; + } + return true; +} + void ContainerModalElement::ChangeFloatingTitleIcon() { if (!floatingTitleBox_ || !titleChildrenRow_ || !floatingTitleChildrenRow_) { diff --git a/frameworks/core/components/container_modal/container_modal_element.h b/frameworks/core/components/container_modal/container_modal_element.h index 3431ff327ceb19235a78be92840c860683a89db3..7e2703688cab48669f27bb9f5134ee5dc6f97159 100644 --- a/frameworks/core/components/container_modal/container_modal_element.h +++ b/frameworks/core/components/container_modal/container_modal_element.h @@ -36,6 +36,7 @@ public: private: RefPtr GetStackElement() const; bool CanShowFloatingTitle(); + bool CanHideFloatingTitle(); void ChangeFloatingTitleIcon(); RefPtr controller_; RefPtr floatingTitleDisplay_; diff --git a/frameworks/core/components/side_bar/side_bar_container_component.cpp b/frameworks/core/components/side_bar/side_bar_container_component.cpp index e6e99b62505751729c4e97eb663b8540f9508e5b..07b72a956387793db139204c2a6cdb8ec8359f99 100644 --- a/frameworks/core/components/side_bar/side_bar_container_component.cpp +++ b/frameworks/core/components/side_bar/side_bar_container_component.cpp @@ -18,11 +18,9 @@ #include "base/geometry/dimension.h" #include "core/components/box/box_component.h" #include "core/components/display/display_component.h" -#include "core/components/gesture_listener/gesture_listener_component.h" #include "core/components/image/image_component.h" #include "core/components/side_bar/render_side_bar_container.h" #include "core/components/side_bar/side_bar_container_element.h" -#include "core/components/split_container/row_split_component.h" #include "core/gestures/tap_gesture.h" #include "core/pipeline/base/component.h" #include "frameworks/bridge/declarative_frontend/view_stack_processor.h"