1 /* 2 * Copyright (c) 2024 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 FOUNDATION_DM_SCREEN_MANAGER_H 17 #define FOUNDATION_DM_SCREEN_MANAGER_H 18 19 #include <refbase.h> 20 #include "dm_common.h" 21 #include "wm_single_instance.h" 22 #include "screen_info.h" 23 24 namespace OHOS::Rosen { 25 class ScreenManagerLite : public RefBase { 26 WM_DECLARE_SINGLE_INSTANCE_BASE(ScreenManagerLite); 27 friend class DMSDeathRecipientLite; 28 public: 29 /* 30 * used by powermgr 31 */ 32 class IScreenListener : public virtual RefBase { 33 public: 34 /** 35 * @brief Notify when a new screen is connected. 36 */ 37 virtual void OnConnect(ScreenId) = 0; 38 39 /** 40 * @brief Notify when a screen is disconnected. 41 */ 42 virtual void OnDisconnect(ScreenId) = 0; 43 44 /** 45 * @brief Notify when state of the screen is changed. 46 */ 47 virtual void OnChange(ScreenId) = 0; 48 }; 49 50 class IScreenModeChangeListener : public virtual RefBase { 51 public: 52 53 /** 54 * @brief Notify when state of the screenMode is changed. 55 */ 56 virtual void NotifyScreenModeChange(const std::vector<sptr<ScreenInfo>>&) = 0; 57 }; 58 59 /** 60 * @brief Register screen mode change listener. 61 * 62 * @param listener IScreenModeChangeListener. 63 * @return DM_OK means register success, others means register failed. 64 */ 65 DMError RegisterScreenModeChangeListener(sptr<IScreenModeChangeListener> listener); 66 67 /** 68 * @brief Unregister screen listener. 69 * 70 * @param listener IScreenModeChangeListener. 71 * @return DM_OK means unregister success, others means unregister failed. 72 */ 73 DMError UnregisterScreenModeChangeListener(sptr<IScreenModeChangeListener> listener); 74 75 /** 76 * @brief Register screen listener. 77 * 78 * @param listener IScreenListener. 79 * @return DM_OK means register success, others means register failed. 80 */ 81 DMError RegisterScreenListener(sptr<IScreenListener> listener); 82 83 /** 84 * @brief Unregister screen listener. 85 * 86 * @param listener IScreenListener. 87 * @return DM_OK means unregister success, others means unregister failed. 88 */ 89 DMError UnregisterScreenListener(sptr<IScreenListener> listener); 90 91 /** 92 * @brief Set the screen power state on the specified screen. 93 * 94 * @param screenId Screen id. 95 * @param state Screen power state. 96 * @param reason Reason for power state change. 97 * @return True means set success, false means set failed. 98 */ 99 bool SetSpecifiedScreenPower(ScreenId screenId, ScreenPowerState state, PowerStateChangeReason reason); 100 101 /** 102 * @brief Set the screen power states for all screens. 103 * 104 * @param state Screen power state. 105 * @param reason Reason for power state change. 106 * @return True means set success, false means set failed. 107 */ 108 bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason); 109 110 /** 111 * @brief Get screen power state. 112 * 113 * @param screenId Screen id. 114 * @return Power state of screen. 115 */ 116 ScreenPowerState GetScreenPower(ScreenId screenId); 117 private: 118 ScreenManagerLite(); 119 ~ScreenManagerLite(); 120 void OnRemoteDied(); 121 122 class Impl; 123 sptr<Impl> pImpl_; 124 }; 125 } // namespace OHOS::Rosen 126 127 #endif // FOUNDATION_DM_SCREEN_MANAGER_H