1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci#ifndef OHOS_ROSEN_WINDOW_INNER_MANAGER_H 17e0dac50fSopenharmony_ci#define OHOS_ROSEN_WINDOW_INNER_MANAGER_H 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include <refbase.h> 20e0dac50fSopenharmony_ci#include "event_handler.h" 21e0dac50fSopenharmony_ci#include "event_runner.h" 22e0dac50fSopenharmony_ci 23e0dac50fSopenharmony_ci#include "drag_controller.h" 24e0dac50fSopenharmony_ci#include "inner_window.h" 25e0dac50fSopenharmony_ci#include "pixel_map.h" 26e0dac50fSopenharmony_ci#include "wm_common.h" 27e0dac50fSopenharmony_ci#include "window_node.h" 28e0dac50fSopenharmony_ci#include "wm_single_instance.h" 29e0dac50fSopenharmony_ci 30e0dac50fSopenharmony_cienum class InnerWMRunningState { 31e0dac50fSopenharmony_ci STATE_NOT_START, 32e0dac50fSopenharmony_ci STATE_RUNNING, 33e0dac50fSopenharmony_ci}; 34e0dac50fSopenharmony_cinamespace OHOS { 35e0dac50fSopenharmony_cinamespace Rosen { 36e0dac50fSopenharmony_ciusing InnerTask = std::function<void()>; 37e0dac50fSopenharmony_ciusing EventRunner = OHOS::AppExecFwk::EventRunner; 38e0dac50fSopenharmony_ciusing EventHandler = OHOS::AppExecFwk::EventHandler; 39e0dac50fSopenharmony_ciusing EventPriority = OHOS::AppExecFwk::EventQueue::Priority; 40e0dac50fSopenharmony_ciclass WindowInnerManager : public RefBase { 41e0dac50fSopenharmony_ciWM_DECLARE_SINGLE_INSTANCE_BASE(WindowInnerManager); 42e0dac50fSopenharmony_cipublic: 43e0dac50fSopenharmony_ci void Start(bool enableRecentholder); 44e0dac50fSopenharmony_ci void Stop(); 45e0dac50fSopenharmony_ci void CreateInnerWindow(std::string name, DisplayId displayId, Rect rect, WindowType type, WindowMode mode); 46e0dac50fSopenharmony_ci void DestroyInnerWindow(DisplayId displayId, WindowType type); 47e0dac50fSopenharmony_ci void UpdateInnerWindow(DisplayId displayId, WindowType type, uint32_t width, uint32_t height); 48e0dac50fSopenharmony_ci void PostTask(InnerTask &&callback, std::string name = "WindowInnerManagerTask", 49e0dac50fSopenharmony_ci EventPriority priority = EventPriority::LOW); 50e0dac50fSopenharmony_ci 51e0dac50fSopenharmony_ci // asynchronously calls the functions of AbilityManager 52e0dac50fSopenharmony_ci void MinimizeAbility(const wptr<WindowNode>& node, bool isFromUser); 53e0dac50fSopenharmony_ci void TerminateAbility(const wptr<WindowNode>& node); 54e0dac50fSopenharmony_ci void CloseAbility(const wptr<WindowNode>& node); 55e0dac50fSopenharmony_ci void CompleteFirstFrameDrawing(const wptr<WindowNode>& node); 56e0dac50fSopenharmony_ci void UpdateMissionSnapShot(const wptr<WindowNode>& node, std::shared_ptr<Media::PixelMap> pixelMap); 57e0dac50fSopenharmony_ci 58e0dac50fSopenharmony_ci void ConsumePointerEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 59e0dac50fSopenharmony_ci void NotifyDisplayLimitRectChange(const std::map<DisplayId, Rect>& limitRectMap); 60e0dac50fSopenharmony_ci bool NotifyServerReadyToMoveOrDrag(uint32_t windowId, sptr<WindowProperty>& windowProperty, 61e0dac50fSopenharmony_ci sptr<MoveDragProperty>& moveDragProperty); 62e0dac50fSopenharmony_ci void NotifyWindowEndUpMovingOrDragging(uint32_t windowId); 63e0dac50fSopenharmony_ci void NotifyWindowRemovedOrDestroyed(uint32_t windowId); 64e0dac50fSopenharmony_ci pid_t GetPid(); 65e0dac50fSopenharmony_ci void SetInputEventConsumer(); 66e0dac50fSopenharmony_ci void StartWindowInfoReportLoop(); 67e0dac50fSopenharmony_ci void SetWindowRoot(const sptr<WindowRoot>& windowRoot); 68e0dac50fSopenharmony_ci 69e0dac50fSopenharmony_ciprotected: 70e0dac50fSopenharmony_ci WindowInnerManager(); 71e0dac50fSopenharmony_ci ~WindowInnerManager(); 72e0dac50fSopenharmony_ci 73e0dac50fSopenharmony_ciprivate: 74e0dac50fSopenharmony_ci bool Init(); 75e0dac50fSopenharmony_ci 76e0dac50fSopenharmony_ci pid_t pid_ = INVALID_PID; 77e0dac50fSopenharmony_ci bool isRecentHolderEnable_ = false; 78e0dac50fSopenharmony_ci sptr<MoveDragController> moveDragController_; 79e0dac50fSopenharmony_ci // event handle for inner window 80e0dac50fSopenharmony_ci std::shared_ptr<EventHandler> eventHandler_; 81e0dac50fSopenharmony_ci std::shared_ptr<EventRunner> eventLoop_; 82e0dac50fSopenharmony_ci InnerWMRunningState state_; 83e0dac50fSopenharmony_ci const std::string INNER_WM_THREAD_NAME = "InnerWindowManager"; 84e0dac50fSopenharmony_ci bool isReportTaskStart_ = false; 85e0dac50fSopenharmony_ci}; 86e0dac50fSopenharmony_ci} // namespace Rosen 87e0dac50fSopenharmony_ci} // namespace OHOS 88e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_WINDOW_INNER_MANAGER_H