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