1 /* 2 * Copyright (c) 2021-2022 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 "screen.h" 21 #include "dm_common.h" 22 #include "screen_group.h" 23 #include "wm_single_instance.h" 24 #include "wm_single_instance.h" 25 26 namespace OHOS::Rosen { 27 class ScreenManager : public RefBase { 28 WM_DECLARE_SINGLE_INSTANCE_BASE(ScreenManager); 29 friend class DMSDeathRecipient; 30 public: 31 class IScreenListener : public virtual RefBase { 32 public: 33 /** 34 * @brief Notify when a new screen is connected. 35 */ 36 virtual void OnConnect(ScreenId) = 0; 37 38 /** 39 * @brief Notify when a screen is disconnected. 40 */ 41 virtual void OnDisconnect(ScreenId) = 0; 42 43 /** 44 * @brief Notify when state of the screen is changed. 45 */ 46 virtual void OnChange(ScreenId) = 0; 47 }; 48 49 class IScreenGroupListener : public virtual RefBase { 50 public: 51 /** 52 * @brief Notify when state of the screenGroup is changed. 53 */ 54 virtual void OnChange(const std::vector<ScreenId>&, ScreenGroupChangeEvent) = 0; 55 }; 56 57 class IVirtualScreenGroupListener : public virtual RefBase { 58 public: 59 struct ChangeInfo { 60 ScreenGroupChangeEvent event; 61 std::string trigger; 62 std::vector<ScreenId> ids; 63 }; 64 /** 65 * @brief Notify when an event related to screen mirror occurs. 66 * 67 * @param info Change info of screen mirror. 68 */ OnMirrorChange(const ChangeInfo & info)69 virtual void OnMirrorChange([[maybe_unused]]const ChangeInfo& info) {} 70 }; 71 72 /** 73 * @brief Get the screen object by screen id. 74 * 75 * @param screenId Screen id. 76 * @return Screen object. 77 */ 78 sptr<Screen> GetScreenById(ScreenId screenId); 79 80 /** 81 * @brief Get the screen group object by groupId. 82 * 83 * @param groupId Screen group id. 84 * @return ScreenGroup object. 85 */ 86 sptr<ScreenGroup> GetScreenGroup(ScreenId groupId); 87 88 /** 89 * @brief Get all screens object. 90 * 91 * @param screens All screen objects. 92 * @return DM_OK means get success, others means get failed. 93 */ 94 DMError GetAllScreens(std::vector<sptr<Screen>>& screens); 95 96 /** 97 * @brief Make screens as expand-screen. 98 * 99 * @param options Option of expand. 100 * @param screenGroupId Screen group id. 101 * @return DM_OK means make expand success, others means make expand failed. 102 */ 103 DMError MakeExpand(const std::vector<ExpandOption>& options, ScreenId& screenGroupId); 104 105 /** 106 * @brief Make screens as mirror-screen 107 * 108 * @param mainScreenId Main screen id. 109 * @param mirrorScreenId Mirror screen ids. 110 * @param screenGroupId Screen group id. 111 * @return DM_OK means make mirror success, others means make mirror failed. 112 */ 113 DMError MakeMirror(ScreenId mainScreenId, std::vector<ScreenId> mirrorScreenId, ScreenId& screenGroupId); 114 115 /** 116 * @brief Stop expand screens. 117 * 118 * @param expandScreenIds Expand screen ids. 119 * @return DM_OK means stop expand success, others means stop expand failed. 120 */ 121 DMError StopExpand(const std::vector<ScreenId>& expandScreenIds); 122 123 /** 124 * @brief Stop mirror screens. 125 * 126 * @param mirrorScreenIds Mirror screen ids. 127 * @return DM_OK means stop mirror success, others means stop mirror failed. 128 */ 129 DMError StopMirror(const std::vector<ScreenId>& mirrorScreenIds); 130 131 /** 132 * @brief Remove virtual screen from group. 133 * 134 * @param screens Screen ids. 135 * @return DM_OK means remove success, others means remove failed. 136 */ 137 DMError RemoveVirtualScreenFromGroup(std::vector<ScreenId> screens); 138 139 /** 140 * @brief Create virtual screen. 141 * 142 * @param option Indicates the options of the virtual screen. 143 * @return Screen id. 144 */ 145 ScreenId CreateVirtualScreen(VirtualScreenOption option); 146 147 /** 148 * @brief Destroy virtual screen. 149 * 150 * @param screenId Indicates the screen id of the virtual screen. 151 * @return DM_OK means destroy success, others means destroy failed. 152 */ 153 DMError DestroyVirtualScreen(ScreenId screenId); 154 155 /** 156 * @brief Set surface for the virtual screen. 157 * 158 * @param screenId Screen id. 159 * @param surface Surface object. 160 * @return DM_OK means set success, others means set failed. 161 */ 162 DMError SetVirtualScreenSurface(ScreenId screenId, sptr<Surface> surface); 163 164 /** 165 * @brief Set the screen power states for all screens. 166 * 167 * @param state Screen power state. 168 * @param reason Reason for power state change. 169 * @return True means set success, false means set failed. 170 */ 171 bool SetScreenPowerForAll(ScreenPowerState state, PowerStateChangeReason reason); 172 173 /** 174 * @brief Get screen power state. 175 * 176 * @param screenId Screen id. 177 * @return Power state of screen. 178 */ 179 ScreenPowerState GetScreenPower(ScreenId screenId); 180 181 /** 182 * @brief Set screen rotation lock status. 183 * 184 * @param isLocked True means forbide to rotate screen, false means the opposite. 185 * @return DM_OK means set success, others means set failed. 186 */ 187 DMError SetScreenRotationLocked(bool isLocked); 188 189 /** 190 * @brief Get screen rotation lock status. 191 * 192 * @param isLocked Query the rotation lock status. 193 * @return DM_OK means query success, others means query failed. 194 */ 195 DMError IsScreenRotationLocked(bool& isLocked); 196 197 /** 198 * @brief Register screen listener. 199 * 200 * @param listener IScreenListener. 201 * @return DM_OK means register success, others means register failed. 202 */ 203 DMError RegisterScreenListener(sptr<IScreenListener> listener); 204 205 /** 206 * @brief Unregister screen listener. 207 * 208 * @param listener IScreenListener. 209 * @return DM_OK means unregister success, others means unregister failed. 210 */ 211 DMError UnregisterScreenListener(sptr<IScreenListener> listener); 212 213 /** 214 * @brief Register screen group listener. 215 * 216 * @param listener IScreenGroupListener. 217 * @return DM_OK means register success, others means register failed. 218 */ 219 DMError RegisterScreenGroupListener(sptr<IScreenGroupListener> listener); 220 221 /** 222 * @brief Unregister screen group listener. 223 * 224 * @param listener IScreenGroupListener. 225 * @return DM_OK means unregister success, others means unregister failed. 226 */ 227 DMError UnregisterScreenGroupListener(sptr<IScreenGroupListener> listener); 228 229 /** 230 * @brief Register virtual screen group listener. 231 * 232 * @param listener IVirtualScreenGroupListener. 233 * @return DM_OK means register success, others means register failed. 234 */ 235 DMError RegisterVirtualScreenGroupListener(sptr<IVirtualScreenGroupListener> listener); 236 237 /** 238 * @brief Unregister virtual screen group listener. 239 * 240 * @param listener IVirtualScreenGroupListener. 241 * @return DM_OK means unregister success, others means unregister failed. 242 */ 243 DMError UnregisterVirtualScreenGroupListener(sptr<IVirtualScreenGroupListener> listener); 244 private: 245 ScreenManager(); 246 ~ScreenManager(); 247 void OnRemoteDied(); 248 249 class Impl; 250 sptr<Impl> pImpl_; 251 }; 252 } // namespace OHOS::Rosen 253 254 #endif // FOUNDATION_DM_SCREEN_MANAGER_H