1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WINDOW_SCENE_HELPER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WINDOW_SCENE_HELPER_H
18 
19 #include "base/memory/ace_type.h"
20 #include "base/memory/referenced.h"
21 #include "core/components_ng/base/ui_node.h"
22 #include "core/components_ng/base/frame_node.h"
23 
24 namespace OHOS::Rosen {
25 class Session;
26 }
27 namespace OHOS::MMI {
28 class KeyEvent;
29 class PointerEvent;
30 }
31 
32 namespace OHOS::Ace::NG {
33 enum class WindowPatternType : uint32_t {
34     DEFAULT = 0,
35     SCREEN_SCENE,
36     TRANSFORM_SCENE, // no window session before transform scene
37     WINDOW_SCENE, // app window, sub window
38     SYSTEM_WINDOW_SCENE, // SCB system scene
39     PANEL_SCENE,
40     INPUT_SCENE,
41 };
42 
43 class WindowSceneHelper : public AceType {
44     DECLARE_ACE_TYPE(WindowSceneHelper, AceType);
45 
46 public:
47     WindowSceneHelper() = default;
48     ~WindowSceneHelper() override = default;
49 
50     static RefPtr<UINode> FindWindowScene(const RefPtr<FrameNode>& targetNode);
51 
52     static bool IsWindowScene(const RefPtr<FrameNode>& focusedFrameNode);
53 
54     static int32_t GetFocusSystemWindowId(const RefPtr<FrameNode>& focusedFrameNode);
55 
56     static int32_t GetWindowIdForWindowScene(const RefPtr<FrameNode>& windowSceneNode);
57 
58     static bool IsFocusWindowSceneCloseKeyboard(const RefPtr<FrameNode>& focusedFrameNode);
59 
60     static void IsWindowSceneCloseKeyboard(const RefPtr<FrameNode>& frameNode);
61 
62     static void IsCloseKeyboard(const RefPtr<FrameNode>& frameNode);
63 
64     static bool GetNeedKeyboardOnFocusFlag(const RefPtr<FrameNode> frameNode);
65 
66     static void InjectPointerEvent(const RefPtr<FrameNode>& node,
67         const std::shared_ptr<OHOS::MMI::PointerEvent>& pointerEvent);
68 
69     static bool InjectKeyEvent(const std::shared_ptr<OHOS::MMI::KeyEvent>& keyEvent, bool isPreIme = false);
70 
71     static bool IsWindowPattern(const RefPtr<FrameNode>& node);
72 
73     static bool HasWindowSession(const RefPtr<FrameNode>& node);
74 
75     static bool IsTransformScene(uint32_t type);
76 
77     static bool IsSystemWindowScene(uint32_t type);
78 
79     static bool IsPanelScene(uint32_t type);
80 
81     static bool IsScreenScene(uint32_t type);
82 };
83 } // namespace OHOS::Ace::NG
84 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WINDOW_SCENE_HELPER_H
85