1 /* 2 * Copyright (c) 2023-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_JS_PIP_CONTROLLER_H 17 #define OHOS_JS_PIP_CONTROLLER_H 18 19 #include <map> 20 #include <refbase.h> 21 #include "js_runtime_utils.h" 22 #include "picture_in_picture_controller.h" 23 #include "wm_common.h" 24 #include "js_pip_window_listener.h" 25 26 namespace OHOS { 27 namespace Rosen { 28 napi_value CreateJsPipControllerObject(napi_env env, sptr<PictureInPictureController>& pipController); 29 class JsPipController { 30 public: 31 explicit JsPipController(const sptr<PictureInPictureController>& pipController); 32 ~JsPipController(); 33 static void Finalizer(napi_env env, void* data, void* hint); 34 static napi_value StartPictureInPicture(napi_env env, napi_callback_info info); 35 static napi_value StopPictureInPicture(napi_env env, napi_callback_info info); 36 static napi_value SetAutoStartEnabled(napi_env env, napi_callback_info info); 37 static napi_value UpdateContentNode(napi_env env, napi_callback_info info); 38 static napi_value UpdateContentSize(napi_env env, napi_callback_info info); 39 static napi_value UpdatePiPControlStatus(napi_env env, napi_callback_info info); 40 static napi_value SetPiPControlEnabled(napi_env env, napi_callback_info info); 41 static napi_value GetPiPWindowInfo(napi_env env, napi_callback_info info); 42 static napi_value GetPiPSettingSwitch(napi_env env, napi_callback_info info); 43 static napi_value RegisterCallback(napi_env env, napi_callback_info info); 44 static napi_value UnregisterCallback(napi_env env, napi_callback_info info); 45 static napi_value PictureInPicturePossible(napi_env env, napi_callback_info info); 46 private: 47 enum class ListenerType : uint32_t { 48 STATE_CHANGE_CB, 49 CONTROL_PANEL_ACTION_EVENT_CB, 50 CONTROL_EVENT_CB, 51 SIZE_CHANGE_CB, 52 }; 53 54 napi_value OnStartPictureInPicture(napi_env env, napi_callback_info info); 55 napi_value OnStopPictureInPicture(napi_env env, napi_callback_info info); 56 napi_value OnSetAutoStartEnabled(napi_env env, napi_callback_info info); 57 napi_value OnUpdateContentNode(napi_env env, napi_callback_info info); 58 napi_value OnUpdateContentSize(napi_env env, napi_callback_info info); 59 napi_value OnUpdatePiPControlStatus(napi_env env, napi_callback_info info); 60 napi_value OnSetPiPControlEnabled(napi_env env, napi_callback_info info); 61 napi_value OnGetPiPWindowInfo(napi_env env, napi_callback_info info); 62 napi_value OnGetPiPSettingSwitch(napi_env env, napi_callback_info info); 63 napi_value OnRegisterCallback(napi_env env, napi_callback_info info); 64 napi_value OnUnregisterCallback(napi_env env, napi_callback_info info); 65 napi_value OnPictureInPicturePossible(napi_env env, napi_callback_info info); 66 67 bool IfCallbackRegistered(napi_env env, const std::string& type, napi_value jsListenerObject); 68 WmErrorCode RegisterListenerWithType(napi_env env, const std::string& type, napi_value value); 69 WmErrorCode UnRegisterListenerWithType(napi_env env, const std::string& type, napi_value value); 70 WmErrorCode UnRegisterListener(const std::string& type, const sptr<JsPiPWindowListener>& pipWindowListener); 71 72 void ProcessStateChangeRegister(const sptr<JsPiPWindowListener>& listener); 73 void ProcessActionEventRegister(const sptr<JsPiPWindowListener>& listener); 74 void ProcessControlEventRegister(const sptr<JsPiPWindowListener>& listener); 75 void ProcessSizeChangeRegister(const sptr<JsPiPWindowListener>& listener); 76 void ProcessStateChangeUnRegister(const sptr<JsPiPWindowListener>& listener); 77 void ProcessActionEventUnRegister(const sptr<JsPiPWindowListener>& listener); 78 void ProcessControlEventUnRegister(const sptr<JsPiPWindowListener>& listener); 79 void ProcessSizeChangeUnRegister(const sptr<JsPiPWindowListener>& listener); 80 81 sptr<PictureInPictureController> pipController_ = nullptr; 82 std::map<std::string, ListenerType> listenerCodeMap_; 83 std::unordered_map<std::string, std::set<sptr<JsPiPWindowListener>>> jsCbMap_; 84 }; 85 } // namespace Rosen 86 } // namespace OHOS 87 88 #endif // OHOS_JS_PIP_CONTROLLER_H 89