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_ROSEN_SCREEN_SESSION_MANAGER_CLIENT_H 17 #define OHOS_ROSEN_SCREEN_SESSION_MANAGER_CLIENT_H 18 19 #include <map> 20 #include <mutex> 21 22 #include <common/rs_rect.h> 23 24 #include "display_change_listener.h" 25 #include "display_change_info.h" 26 #include "dm_common.h" 27 #include "session/screen/include/screen_session.h" 28 #include "interfaces/include/ws_common.h" 29 #include "wm_single_instance.h" 30 #include "zidl/screen_session_manager_client_stub.h" 31 #include "zidl/screen_session_manager_interface.h" 32 33 namespace OHOS::Rosen { 34 using ScreenInfoChangeClientListener = std::function<void(uint64_t)>; 35 class IScreenConnectionListener { 36 public: 37 virtual void OnScreenConnected(const sptr<ScreenSession>& screenSession) = 0; 38 virtual void OnScreenDisconnected(const sptr<ScreenSession>& screenSession) = 0; 39 }; 40 41 class ScreenSessionManagerClient : public ScreenSessionManagerClientStub { 42 WM_DECLARE_SINGLE_INSTANCE_BASE(ScreenSessionManagerClient) 43 44 public: 45 void RegisterScreenConnectionListener(IScreenConnectionListener* listener); 46 void RegisterDisplayChangeListener(const sptr<IDisplayChangeListener>& listener); 47 48 sptr<ScreenSession> GetScreenSession(ScreenId screenId) const; 49 std::map<ScreenId, ScreenProperty> GetAllScreensProperties() const; 50 FoldDisplayMode GetFoldDisplayMode() const; 51 52 void UpdateScreenRotationProperty(ScreenId screenId, const RRect& bounds, float rotation, 53 ScreenPropertyChangeType screenPropertyChangeType); 54 uint32_t GetCurvedCompressionArea(); 55 ScreenProperty GetPhyScreenProperty(ScreenId screenId); 56 void SetScreenPrivacyState(bool hasPrivate); 57 void SetPrivacyStateByDisplayId(DisplayId id, bool hasPrivate); 58 void SetScreenPrivacyWindowList(DisplayId id, std::vector<std::string> privacyWindowList); 59 void NotifyDisplayChangeInfoChanged(const sptr<DisplayChangeInfo>& info); 60 void OnDisplayStateChanged(DisplayId defaultDisplayId, sptr<DisplayInfo> displayInfo, 61 const std::map<DisplayId, sptr<DisplayInfo>>& displayInfoMap, DisplayStateChangeType type) override; 62 void OnScreenshot(DisplayId displayId) override; 63 void OnImmersiveStateChanged(bool& immersive) override; 64 void OnGetSurfaceNodeIdsFromMissionIdsChanged(std::vector<uint64_t>& missionIds, 65 std::vector<uint64_t>& surfaceNodeIds, bool isBlackList = false) override; 66 void OnUpdateFoldDisplayMode(FoldDisplayMode displayMode) override; 67 void UpdateAvailableArea(ScreenId screenId, DMRect area); 68 int32_t SetScreenOffDelayTime(int32_t delay); 69 void NotifyFoldToExpandCompletion(bool foldToExpand); 70 FoldStatus GetFoldStatus(); 71 std::shared_ptr<Media::PixelMap> GetScreenSnapshot(ScreenId screenId, float scaleX, float scaleY); 72 DeviceScreenConfig GetDeviceScreenConfig(); 73 sptr<ScreenSession> GetScreenSessionById(const ScreenId id); 74 ScreenId GetDefaultScreenId(); 75 bool IsFoldable(); 76 void SetVirtualPixelRatioSystem(ScreenId screenId, float virtualPixelRatio) override; 77 void UpdateDisplayHookInfo(int32_t uid, bool enable, const DMHookInfo& hookInfo); 78 79 void RegisterSwitchingToAnotherUserFunction(std::function<void()>&& func); 80 void SwitchingCurrentUser(); 81 void SwitchUserCallback(std::vector<int32_t> oldScbPids, int32_t currentScbPid) override; 82 83 void OnFoldStatusChangedReportUE(const std::vector<std::string>& screenFoldInfo) override; 84 85 void UpdateDisplayScale(ScreenId id, float scaleX, float scaleY, float pivotX, float pivotY, float translateX, 86 float translateY); 87 protected: 88 ScreenSessionManagerClient() = default; 89 virtual ~ScreenSessionManagerClient() = default; 90 91 private: 92 void ConnectToServer(); 93 bool CheckIfNeedCennectScreen(ScreenId screenId, ScreenId rsId, const std::string& name); 94 void OnScreenConnectionChanged(ScreenId screenId, ScreenEvent screenEvent, 95 ScreenId rsId, const std::string& name) override; 96 void OnPropertyChanged(ScreenId screenId, 97 const ScreenProperty& property, ScreenPropertyChangeReason reason) override; 98 void OnPowerStatusChanged(DisplayPowerEvent event, EventStatus status, 99 PowerStateChangeReason reason) override; 100 void OnSensorRotationChanged(ScreenId screenId, float sensorRotation) override; 101 void OnScreenOrientationChanged(ScreenId screenId, float screenOrientation) override; 102 void OnScreenRotationLockedChanged(ScreenId screenId, bool isLocked) override; 103 104 void SetDisplayNodeScreenId(ScreenId screenId, ScreenId displayNodeScreenId) override; 105 106 mutable std::mutex screenSessionMapMutex_; 107 std::map<ScreenId, sptr<ScreenSession>> screenSessionMap_; 108 std::function<void()> switchingToAnotherUserFunc_ = nullptr; 109 110 sptr<IScreenSessionManager> screenSessionManager_; 111 112 IScreenConnectionListener* screenConnectionListener_; 113 sptr<IDisplayChangeListener> displayChangeListener_; 114 FoldDisplayMode displayMode_ = FoldDisplayMode::UNKNOWN; 115 116 bool hasCheckFoldableStatus_ = false; 117 bool isFoldable_ = false; 118 }; 119 } // namespace OHOS::Rosen 120 121 #endif // OHOS_ROSEN_SCREEN_SESSION_MANAGER_CLIENT_STUB_H 122