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 OHOS_WINDOW_SCENE_JS_SCENE_SESSION_MANAGER_H
17 #define OHOS_WINDOW_SCENE_JS_SCENE_SESSION_MANAGER_H
18 
19 #include <map>
20 
21 #include "interfaces/include/ws_common.h"
22 #include <native_engine/native_engine.h>
23 #include <native_engine/native_value.h>
24 #include "interfaces/kits/napi/scene_session_manager/js_scene_utils.h"
25 #include "root_scene.h"
26 #include "session/host/include/scene_session.h"
27 #include "ability_info.h"
28 #include "task_scheduler.h"
29 #include "session_manager/include/scene_session_manager.h"
30 
31 namespace OHOS::Rosen {
32 enum class ListenerFunctionType : uint32_t {
33     CREATE_SYSTEM_SESSION_CB,
34     CREATE_KEYBOARD_SESSION_CB,
35     RECOVER_SCENE_SESSION_CB,
36     STATUS_BAR_ENABLED_CHANGE_CB,
37     OUTSIDE_DOWN_EVENT_CB,
38     SHIFT_FOCUS_CB,
39     CALLING_WINDOW_ID_CHANGE_CB,
40     START_UI_ABILITY_ERROR,
41     GESTURE_NAVIGATION_ENABLED_CHANGE_CB,
42     ABILITY_MANAGER_COLLABORATOR_REGISTERED_CB,
43     CLOSE_TARGET_FLOAT_WINDOW_CB,
44     START_PIP_FAILED_CB,
45     NOTIFY_APP_USE_CONTROL_LIST_CB
46 };
47 
48 class JsSceneSessionManager final {
49 public:
50     explicit JsSceneSessionManager(napi_env env);
51     ~JsSceneSessionManager() = default;
52 
53     static napi_value Init(napi_env env, napi_value exportObj);
54     static void Finalizer(napi_env env, void* data, void* hint);
55 
56     static napi_value GetRootSceneSession(napi_env env, napi_callback_info info);
57     static napi_value RequestSceneSession(napi_env env, napi_callback_info info);
58     static napi_value UpdateSceneSessionWant(napi_env env, napi_callback_info info);
59     static napi_value RequestSceneSessionActivation(napi_env env, napi_callback_info info);
60     static napi_value RequestSceneSessionBackground(napi_env env, napi_callback_info info);
61     static napi_value RequestSceneSessionDestruction(napi_env env, napi_callback_info info);
62     static napi_value NotifyForegroundInteractiveStatus(napi_env env, napi_callback_info info);
63     static napi_value IsSceneSessionValid(napi_env env, napi_callback_info info);
64     static napi_value RequestSceneSessionByCall(napi_env env, napi_callback_info info);
65     static napi_value StartAbilityBySpecified(napi_env env, napi_callback_info info);
66     static napi_value StartUIAbilityBySCB(napi_env env, napi_callback_info info);
67     static napi_value ChangeUIAbilityVisibilityBySCB(napi_env env, napi_callback_info info);
68     static napi_value RegisterCallback(napi_env env, napi_callback_info info);
69     static napi_value GetWindowSceneConfig(napi_env env, napi_callback_info info);
70     static napi_value GetSystemConfig(napi_env env, napi_callback_info info);
71     static napi_value UpdateRotateAnimationConfig(napi_env env, napi_callback_info info);
72     static napi_value ProcessBackEvent(napi_env env, napi_callback_info info);
73     static napi_value CheckSceneZOrder(napi_env env, napi_callback_info info);
74     static napi_value UpdateFocus(napi_env env, napi_callback_info info);
75     static napi_value InitUserInfo(napi_env env, napi_callback_info info);
76     static napi_value GetSessionSnapshotFilePath(napi_env env, napi_callback_info info);
77     static napi_value SetVmaCacheStatus(napi_env env, napi_callback_info info);
78     static napi_value InitWithRenderServiceAdded(napi_env env, napi_callback_info info);
79     static napi_value GetAllWindowVisibilityInfos(napi_env env, napi_callback_info info);
80     static napi_value GetAllAbilityInfos(napi_env env, napi_callback_info info);
81     static napi_value GetBatchAbilityInfos(napi_env env, napi_callback_info info);
82     static napi_value GetAbilityInfo(napi_env env, napi_callback_info info);
83     static napi_value PrepareTerminate(napi_env env, napi_callback_info info);
84     static napi_value PerfRequestEx(napi_env env, napi_callback_info info);
85     static napi_value UpdateWindowMode(napi_env env, napi_callback_info info);
86     static napi_value GetRootSceneUIContext(napi_env env, napi_callback_info info);
87     static napi_value SendTouchEvent(napi_env env, napi_callback_info info);
88     static napi_value AddWindowDragHotArea(napi_env env, napi_callback_info info);
89     static napi_value PreloadInLakeApp(napi_env env, napi_callback_info info);
90     static napi_value RequestFocusStatus(napi_env env, napi_callback_info info);
91     static napi_value RequestAllAppSessionUnfocus(napi_env env, napi_callback_info info);
92     static napi_value SetScreenLocked(napi_env env, napi_callback_info info);
93     static napi_value SetUserAuthPassed(napi_env env, napi_callback_info info);
94     static napi_value UpdateTitleInTargetPos(napi_env env, napi_callback_info info);
95     static napi_value UpdateMaximizeMode(napi_env env, napi_callback_info info);
96     static napi_value ReportData(napi_env env, napi_callback_info info);
97     static napi_value GetRssData(napi_env env, napi_callback_info info);
98     static napi_value RegisterRssData(napi_env env, napi_callback_info info);
99     static napi_value UnregisterRssData(napi_env env, napi_callback_info info);
100     static napi_value SetStatusBarDefaultVisibilityPerDisplay(napi_env env, napi_callback_info info);
101     static napi_value NotifyStatusBarShowStatus(napi_env env, napi_callback_info info);
102     static napi_value NotifyAINavigationBarShowStatus(napi_env env, napi_callback_info info);
103     static napi_value NotifySessionRecoverStatus(napi_env env, napi_callback_info info);
104     static napi_value UpdateSessionDisplayId(napi_env env, napi_callback_info info);
105     static napi_value NotifyStackEmpty(napi_env env, napi_callback_info info);
106     static napi_value NotifySwitchingUser(napi_env env, napi_callback_info info);
107     static napi_value SetSystemAnimatedScenes(napi_env env, napi_callback_info info);
108     static napi_value GetSessionSnapshotPixelMap(napi_env env, napi_callback_info info);
109     static napi_value GetSessionSnapshotPixelMapSync(napi_env env, napi_callback_info info);
110     static napi_value SetAppDragResizeType(napi_env env, napi_callback_info info);
111     static napi_value GetCustomDecorHeight(napi_env env, napi_callback_info info);
112     static napi_value NotifyEnterRecentTask(napi_env env, napi_callback_info info);
113     static napi_value UpdateDisplayHookInfo(napi_env env, napi_callback_info info);
114     static napi_value UpdateAppHookDisplayInfo(napi_env env, napi_callback_info info);
115     static napi_value InitScheduleUtils(napi_env env, napi_callback_info info);
116     static napi_value SetAppForceLandscapeConfig(napi_env env, napi_callback_info info);
117     static napi_value SwitchFreeMultiWindow(napi_env env, napi_callback_info info);
118     static napi_value GetFreeMultiWindowConfig(napi_env env, napi_callback_info info);
119     static napi_value GetIsLayoutFullScreen(napi_env env, napi_callback_info info);
120     static napi_value IsScbCoreEnabled(napi_env env, napi_callback_info info);
121     static napi_value RemoveAppInfo(napi_env env, napi_callback_info info);
122     static napi_value GetWindowPid(napi_env env, napi_callback_info info);
123     static napi_value SetIsWindowRectAutoSave(napi_env env, napi_callback_info info);
124     static napi_value NotifyAboveLockScreen(napi_env env, napi_callback_info info);
125 
126 private:
127     napi_value OnRegisterCallback(napi_env env, napi_callback_info info);
128     napi_value OnGetRootSceneSession(napi_env env, napi_callback_info info);
129     napi_value OnRequestSceneSession(napi_env env, napi_callback_info info);
130     napi_value OnUpdateSceneSessionWant(napi_env env, napi_callback_info info);
131     napi_value OnRequestSceneSessionActivation(napi_env env, napi_callback_info info);
132     napi_value OnRequestSceneSessionBackground(napi_env env, napi_callback_info info);
133     napi_value OnRequestSceneSessionDestruction(napi_env env, napi_callback_info info);
134     napi_value OnNotifyForegroundInteractiveStatus(napi_env env, napi_callback_info info);
135     napi_value OnIsSceneSessionValid(napi_env env, napi_callback_info info);
136     napi_value OnRequestSceneSessionByCall(napi_env env, napi_callback_info info);
137     napi_value OnStartAbilityBySpecified(napi_env env, napi_callback_info info);
138     napi_value OnStartUIAbilityBySCB(napi_env env, napi_callback_info info);
139     napi_value OnChangeUIAbilityVisibilityBySCB(napi_env env, napi_callback_info info);
140     napi_value OnGetWindowSceneConfig(napi_env env, napi_callback_info info);
141     napi_value OnGetSystemConfig(napi_env env, napi_callback_info info);
142     napi_value OnUpdateRotateAnimationConfig(napi_env env, napi_callback_info info);
143     napi_value OnProcessBackEvent(napi_env env, napi_callback_info info);
144     napi_value OnCheckSceneZOrder(napi_env env, napi_callback_info info);
145     napi_value OnUpdateFocus(napi_env env, napi_callback_info info);
146     napi_value OnInitUserInfo(napi_env env, napi_callback_info info);
147     napi_value OnGetSessionSnapshotFilePath(napi_env env, napi_callback_info info);
148     napi_value OnSetVmaCacheStatus(napi_env env, napi_callback_info info);
149     napi_value OnInitWithRenderServiceAdded(napi_env env, napi_callback_info info);
150     napi_value OnGetAllWindowVisibilityInfos(napi_env env, napi_callback_info info);
151     napi_value OnGetAllAbilityInfos(napi_env env, napi_callback_info info);
152     napi_value OnGetBatchAbilityInfos(napi_env env, napi_callback_info info);
153     napi_value OnGetAbilityInfo(napi_env env, napi_callback_info info);
154     napi_value OnPrepareTerminate(napi_env env, napi_callback_info info);
155     napi_value OnPerfRequestEx(napi_env env, napi_callback_info info);
156     napi_value OnUpdateWindowMode(napi_env env, napi_callback_info info);
157     napi_value OnGetRootSceneUIContext(napi_env env, napi_callback_info info);
158     napi_value OnSendTouchEvent(napi_env env, napi_callback_info info);
159     napi_value OnAddWindowDragHotArea(napi_env env, napi_callback_info info);
160     napi_value OnPreloadInLakeApp(napi_env env, napi_callback_info info);
161     napi_value OnRequestFocusStatus(napi_env env, napi_callback_info info);
162     napi_value OnRequestAllAppSessionUnfocus(napi_env env, napi_callback_info info);
163     napi_value OnSetScreenLocked(napi_env env, napi_callback_info info);
164     napi_value OnSetUserAuthPassed(napi_env env, napi_callback_info info);
165     napi_value OnUpdateMaximizeMode(napi_env env, napi_callback_info info);
166     napi_value OnReportData(napi_env env, napi_callback_info info);
167     napi_value OnGetRssData(napi_env env, napi_callback_info info);
168     napi_value OnRegisterRssData(napi_env env, napi_callback_info info);
169     napi_value OnUnregisterRssData(napi_env env, napi_callback_info info);
170     napi_value OnNotifySessionRecoverStatus(napi_env env, napi_callback_info info);
171     napi_value OnUpdateSessionDisplayId(napi_env env, napi_callback_info info);
172     napi_value OnNotifyStackEmpty(napi_env env, napi_callback_info info);
173     napi_value OnNotifySwitchingUser(napi_env env, napi_callback_info info);
174     napi_value OnSetStatusBarDefaultVisibilityPerDisplay(napi_env env, napi_callback_info info);
175     napi_value OnNotifyStatusBarShowStatus(napi_env env, napi_callback_info info);
176     napi_value OnNotifyAINavigationBarShowStatus(napi_env env, napi_callback_info info);
177     napi_value OnUpdateTitleInTargetPos(napi_env env, napi_callback_info info);
178     napi_value OnSetSystemAnimatedScenes(napi_env env, napi_callback_info info);
179     napi_value OnGetSessionSnapshotPixelMap(napi_env env, napi_callback_info info);
180     napi_value OnGetSessionSnapshotPixelMapSync(napi_env env, napi_callback_info info);
181     napi_value OnSetAppDragResizeType(napi_env env, napi_callback_info info);
182     napi_value OnGetCustomDecorHeight(napi_env env, napi_callback_info info);
183     napi_value OnSwitchFreeMultiWindow(napi_env env, napi_callback_info info);
184     napi_value OnGetFreeMultiWindowConfig(napi_env env, napi_callback_info info);
185     napi_value OnGetIsLayoutFullScreen(napi_env env, napi_callback_info info);
186     napi_value OnNotifyEnterRecentTask(napi_env env, napi_callback_info info);
187     napi_value OnUpdateDisplayHookInfo(napi_env env, napi_callback_info info);
188     napi_value OnUpdateAppHookDisplayInfo(napi_env env, napi_callback_info info);
189     napi_value OnInitScheduleUtils(napi_env env, napi_callback_info info);
190     napi_value OnSetAppForceLandscapeConfig(napi_env env, napi_callback_info info);
191     napi_value OnIsScbCoreEnabled(napi_env env, napi_callback_info info);
192     napi_value OnRemoveAppInfo(napi_env env, napi_callback_info info);
193     napi_value OnGetWindowPid(napi_env env, napi_callback_info info);
194     napi_value OnSetIsWindowRectAutoSave(napi_env env, napi_callback_info info);
195     napi_value OnNotifyAboveLockScreen(napi_env env, napi_callback_info info);
196 
197     void OnRootSceneBackEvent();
198     void OnStatusBarEnabledUpdate(bool enable, const std::string& bundleName);
199     void OnGestureNavigationEnabledUpdate(bool enable, const std::string& bundleName, GestureBackType type);
200     void OnCreateSystemSession(const sptr<SceneSession>& sceneSession);
201     void OnCreateKeyboardSession(const sptr<SceneSession>& keyboardSession, const sptr<SceneSession>& panelSession);
202     void OnRecoverSceneSession(const sptr<SceneSession>& sceneSession, const SessionInfo& sessionInfo);
203     void OnOutsideDownEvent(int32_t x, int32_t y);
204     void OnStartUIAbilityError(const uint32_t errorCode);
205     void OnShiftFocus(int32_t persistentId);
206     void OnCallingSessionIdChange(uint32_t callingSessionId);
207     void ProcessCreateSystemSessionRegister();
208     void ProcessCreateKeyboardSessionRegister();
209     void ProcessRecoverSceneSessionRegister();
210     void ProcessStatusBarEnabledChangeListener();
211     void ProcessGestureNavigationEnabledChangeListener();
212     void ProcessStartUIAbilityErrorRegister();
213     void ProcessOutsideDownEvent();
214     void ProcessShiftFocus();
215     void ProcessCallingSessionIdChangeRegister();
216     void ProcessRegisterCallback(ListenerFunctionType listenerFunctionType);
217     bool IsCallbackRegistered(napi_env env, const std::string& type, napi_value jsListenerObject);
218     void RegisterDumpRootSceneElementInfoListener();
219     void RegisterVirtualPixelRatioChangeListener();
220     void SetIsClearSession(napi_env env, napi_value jsSceneSessionObj, sptr<SceneSession>& sceneSession);
221     void OnCloseTargetFloatWindow(const std::string& bundleName);
222     void ProcessCloseTargetFloatWindow();
223     std::shared_ptr<NativeReference> GetJSCallback(const std::string& functionName);
224     void ProcessAbilityManagerCollaboratorRegistered();
225     void OnAbilityManagerCollaboratorRegistered();
226     void RegisterRootSceneCallbacksOnSSManager();
227     void RegisterSSManagerCallbacksOnRootScene();
228     void OnNotifyAppUseControlList(
229         ControlAppType type, int32_t userId, const std::vector<AppUseControlInfo>& controlList);
230     void RegisterNotifyAppUseControlListCallback();
231 
232     /*
233      * PiP Window
234      */
235     void OnStartPiPFailed();
236     void ProcessStartPiPFailedRegister();
237 
238     napi_env env_;
239     std::shared_mutex jsCbMapMutex_;
240     std::map<std::string, std::shared_ptr<NativeReference>> jsCbMap_;
241 
242     sptr<RootScene> rootScene_;
243     std::shared_ptr<MainThreadScheduler> taskScheduler_;
244 };
245 } // namespace OHOS::Rosen
246 
247 #endif // OHOS_WINDOW_SCENE_JS_SCENE_SESSION_MANAGER_H