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 UpdateContentSize(napi_env env, napi_callback_info info); 38 static napi_value UpdatePiPControlStatus(napi_env env, napi_callback_info info); 39 static napi_value SetPiPControlEnabled(napi_env env, napi_callback_info info); 40 static napi_value RegisterCallback(napi_env env, napi_callback_info info); 41 static napi_value UnregisterCallback(napi_env env, napi_callback_info info); 42 private: 43 enum class ListenerType : uint32_t { 44 STATE_CHANGE_CB, 45 CONTROL_PANEL_ACTION_EVENT_CB, 46 CONTROL_EVENT_CB, 47 }; 48 49 napi_value OnStartPictureInPicture(napi_env env, napi_callback_info info); 50 napi_value OnStopPictureInPicture(napi_env env, napi_callback_info info); 51 napi_value OnSetAutoStartEnabled(napi_env env, napi_callback_info info); 52 napi_value OnUpdateContentSize(napi_env env, napi_callback_info info); 53 napi_value OnUpdatePiPControlStatus(napi_env env, napi_callback_info info); 54 napi_value OnSetPiPControlEnabled(napi_env env, napi_callback_info info); 55 napi_value OnRegisterCallback(napi_env env, napi_callback_info info); 56 napi_value OnUnregisterCallback(napi_env env, napi_callback_info info); 57 58 bool IfCallbackRegistered(napi_env env, const std::string& type, napi_value jsListenerObject); 59 WmErrorCode RegisterListenerWithType(napi_env env, const std::string& type, napi_value value); 60 WmErrorCode UnRegisterListenerWithType(napi_env env, const std::string& type, napi_value value); 61 WmErrorCode UnRegisterListener(const std::string& type, const sptr<JsPiPWindowListener>& pipWindowListener); 62 63 void ProcessStateChangeRegister(const sptr<JsPiPWindowListener>& listener); 64 void ProcessActionEventRegister(const sptr<JsPiPWindowListener>& listener); 65 void ProcessControlEventRegister(const sptr<JsPiPWindowListener>& listener); 66 void ProcessStateChangeUnRegister(const sptr<JsPiPWindowListener>& listener); 67 void ProcessActionEventUnRegister(const sptr<JsPiPWindowListener>& listener); 68 void ProcessControlEventUnRegister(const sptr<JsPiPWindowListener>& listener); 69 70 sptr<PictureInPictureController> pipController_ = nullptr; 71 std::map<std::string, ListenerType> listenerCodeMap_; 72 std::unordered_map<std::string, std::set<sptr<JsPiPWindowListener>>> jsCbMap_; 73 }; 74 } // namespace Rosen 75 } // namespace OHOS 76 77 #endif // OHOS_JS_PIP_CONTROLLER_H 78