1 
2 /*
3  * Copyright (c) 2023 Huawei Device Co., Ltd.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ENTRANCE_ACE_VIEW_OHOS_H
18 #define FOUNDATION_ACE_ADAPTER_PREVIEW_ENTRANCE_ACE_VIEW_OHOS_H
19 
20 #include <memory>
21 
22 #include "adapter/preview/entrance/ace_resource_register.h"
23 #include "adapter/preview/external/multimodalinput/pointer_event.h"
24 #include "base/utils/noncopyable.h"
25 #include "core/common/ace_view.h"
26 #include "core/event/key_event_recognizer.h"
27 #include "core/common/thread_model_impl.h"
28 
29 namespace OHOS::Ace::Platform {
30 using ReleaseCallback = std::function<void()>;
31 
32 class AceViewPreview : public AceView {
33     DECLARE_ACE_TYPE(AceViewPreview, AceView);
34 
35 public:
36     AceViewPreview(int32_t instanceId, std::unique_ptr<ThreadModelImpl> threadModelImpl);
37     ~AceViewPreview() override = default;
38     static AceViewPreview* CreateView(
39         int32_t instanceId, bool useCurrentEventRunner = false, bool usePlatformThread = false);
40 
Launch()41     void Launch() override {}
GetInstanceId()42     int32_t GetInstanceId() const override
43     {
44         return instanceId_;
45     }
46 
RegisterTouchEventCallback(TouchEventCallback && callback)47     void RegisterTouchEventCallback(TouchEventCallback&& callback) override
48     {
49         ACE_DCHECK(callback);
50         touchEventCallback_ = std::move(callback);
51     }
52 
RegisterKeyEventCallback(KeyEventCallback && callback)53     void RegisterKeyEventCallback(KeyEventCallback&& callback) override
54     {
55         ACE_DCHECK(callback);
56         keyEventCallback_ = std::move(callback);
57     }
58 
RegisterMouseEventCallback(MouseEventCallback && callback)59     void RegisterMouseEventCallback(MouseEventCallback&& callback) override
60     {
61         ACE_DCHECK(callback);
62         mouseEventCallback_ = std::move(callback);
63     }
64 
RegisterAxisEventCallback(AxisEventCallback && callback)65     void RegisterAxisEventCallback(AxisEventCallback&& callback) override
66     {
67         ACE_DCHECK(callback);
68         axisEventCallback_ = std::move(callback);
69     }
70 
RegisterRotationEventCallback(RotationEventCallBack && callback)71     void RegisterRotationEventCallback(RotationEventCallBack&& callback) override
72     {
73         ACE_DCHECK(callback);
74         rotationEventCallBack_ = std::move(callback);
75     }
76 
RegisterDragEventCallback(DragEventCallBack && callback)77     void RegisterDragEventCallback(DragEventCallBack&& callback) override {}
78 
RegisterCardViewPositionCallback(CardViewPositionCallBack && callback)79     void RegisterCardViewPositionCallback(CardViewPositionCallBack&& callback) override
80     {
81         ACE_DCHECK(callback);
82         cardViewPositionCallBack_ = std::move(callback);
83     }
84 
RegisterCardViewAccessibilityParamsCallback(CardViewAccessibilityParamsCallback && callback)85     void RegisterCardViewAccessibilityParamsCallback(CardViewAccessibilityParamsCallback&& callback) override
86     {
87         ACE_DCHECK(callback);
88         cardViewAccessibilityParamsCallback_ = std::move(callback);
89     }
90 
RegisterViewChangeCallback(ViewChangeCallback && callback)91     void RegisterViewChangeCallback(ViewChangeCallback&& callback) override
92     {
93         ACE_DCHECK(callback);
94         viewChangeCallback_ = std::move(callback);
95     }
96 
RegisterViewPositionChangeCallback(ViewPositionChangeCallback && callback)97     void RegisterViewPositionChangeCallback(ViewPositionChangeCallback&& callback) override {}
98 
RegisterDensityChangeCallback(DensityChangeCallback && callback)99     void RegisterDensityChangeCallback(DensityChangeCallback&& callback) override
100     {
101         ACE_DCHECK(callback);
102         densityChangeCallback_ = std::move(callback);
103     }
104 
RegisterTransformHintChangeCallback(TransformHintChangeCallback && callback)105     void RegisterTransformHintChangeCallback(TransformHintChangeCallback&& callback) override {}
106 
RegisterSystemBarHeightChangeCallback(SystemBarHeightChangeCallback && callback)107     void RegisterSystemBarHeightChangeCallback(SystemBarHeightChangeCallback&& callback) override
108     {
109         ACE_DCHECK(callback);
110         systemBarHeightChangeCallback_ = std::move(callback);
111     }
112 
RegisterSurfaceDestroyCallback(SurfaceDestroyCallback && callback)113     void RegisterSurfaceDestroyCallback(SurfaceDestroyCallback&& callback) override
114     {
115         ACE_DCHECK(callback);
116         surfaceDestroyCallback_ = std::move(callback);
117     }
118 
RegisterIdleCallback(IdleCallback && callback)119     void RegisterIdleCallback(IdleCallback&& callback) override
120     {
121         ACE_DCHECK(callback);
122         idleCallback_ = std::move(callback);
123     }
124 
NotifyDensityChanged(double density)125     void NotifyDensityChanged(double density) const
126     {
127         CHECK_NULL_VOID(densityChangeCallback_);
128         densityChangeCallback_(density);
129     }
130 
NotifySystemBarHeightChanged(double statusBar,double navigationBar)131     void NotifySystemBarHeightChanged(double statusBar, double navigationBar) const
132     {
133         CHECK_NULL_VOID(systemBarHeightChangeCallback_);
134         systemBarHeightChangeCallback_(statusBar, navigationBar);
135     }
136 
NotifySurfaceDestroyed()137     void NotifySurfaceDestroyed() const
138     {
139         CHECK_NULL_VOID(surfaceDestroyCallback_);
140         surfaceDestroyCallback_();
141     }
142 
HandleKeyEvent(const KeyEvent & keyEvent)143     bool HandleKeyEvent(const KeyEvent& keyEvent) override
144     {
145         return keyEventCallback_ && keyEventCallback_(keyEvent);
146     }
147 
GetPlatformResRegister()148     const RefPtr<PlatformResRegister>& GetPlatformResRegister() const override
149     {
150         return resRegister_;
151     }
152 
Dump(const std::vector<std::string> & params)153     bool Dump(const std::vector<std::string>& params) override
154     {
155         return false;
156     }
157 
ProcessIdleEvent(int64_t deadline)158     void ProcessIdleEvent(int64_t deadline)
159     {
160         CHECK_NULL_VOID(idleCallback_);
161         idleCallback_(deadline);
162     }
163 
GetViewType()164     ViewType GetViewType() const override
165     {
166         return AceView::ViewType::SURFACE_VIEW;
167     }
168 
GetPlatformWindow()169     std::unique_ptr<PlatformWindow> GetPlatformWindow() override
170     {
171         return nullptr;
172     }
173 
GetNativeWindowById(uint64_t textureId)174     const void* GetNativeWindowById(uint64_t textureId) override
175     {
176         return nullptr;
177     }
178 
GetThreadModelImpl()179     ThreadModelImpl* GetThreadModelImpl() const
180     {
181         return threadModelImpl_.get();
182     }
183 
184     void NotifySurfaceChanged(
185         int32_t width, int32_t height, WindowSizeChangeReason type = WindowSizeChangeReason::UNDEFINED,
186         const std::shared_ptr<Rosen::RSTransaction>& rsTransaction = nullptr);
187 
188     bool HandleMouseEvent(const MouseEvent& mouseEvent);
189     bool HandleAxisEvent(const AxisEvent& axisEvent);
190     bool HandleTouchEvent(const TouchEvent& touchEvent) override;
191     std::unique_ptr<DrawDelegate> GetDrawDelegate() override;
192 
193 private:
194     int32_t instanceId_ = 0;
195     RefPtr<PlatformResRegister> resRegister_ = Referenced::MakeRefPtr<AceResourceRegister>();
196 
197     TouchEventCallback touchEventCallback_;
198     MouseEventCallback mouseEventCallback_;
199     AxisEventCallback axisEventCallback_;
200     RotationEventCallBack rotationEventCallBack_;
201     CardViewPositionCallBack cardViewPositionCallBack_;
202     CardViewAccessibilityParamsCallback cardViewAccessibilityParamsCallback_;
203     ViewChangeCallback viewChangeCallback_;
204     DensityChangeCallback densityChangeCallback_;
205     SystemBarHeightChangeCallback systemBarHeightChangeCallback_;
206     SurfaceDestroyCallback surfaceDestroyCallback_;
207     IdleCallback idleCallback_;
208     KeyEventCallback keyEventCallback_;
209     KeyEventRecognizer keyEventRecognizer_;
210     std::unique_ptr<ThreadModelImpl> threadModelImpl_;
211 
212     ACE_DISALLOW_COPY_AND_MOVE(AceViewPreview);
213 };
214 } // namespace OHOS::Ace::Platform
215 
216 #endif // FOUNDATION_ACE_ADAPTER_PREVIEW_ENTRANCE_ACE_VIEW_OHOS_H
217