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_WINDOW_EXTENSION_SESSION_IMPL_H 17 #define OHOS_ROSEN_WINDOW_EXTENSION_SESSION_IMPL_H 18 19 #include "window_session_impl.h" 20 21 #include <optional> 22 23 #include "accessibility_element_info.h" 24 #include "extension_data_handler.h" 25 #include "extension/extension_business_info.h" 26 27 namespace OHOS { 28 namespace Rosen { 29 struct AccessibilityChildTreeInfo { 30 uint32_t windowId = 0; 31 int32_t treeId = -1; 32 int64_t accessibilityId = -1; 33 }; 34 35 class WindowExtensionSessionImpl : public WindowSessionImpl { 36 public: 37 explicit WindowExtensionSessionImpl(const sptr<WindowOption>& option); 38 ~WindowExtensionSessionImpl(); 39 40 WMError Create(const std::shared_ptr<AbilityRuntime::Context>& context, 41 const sptr<Rosen::ISession>& iSession, const std::string& identityToken = "") override; 42 WMError MoveTo(int32_t x, int32_t y, bool isMoveToGlobal = false, 43 MoveConfiguration moveConfiguration = {}) override; 44 WMError Resize(uint32_t width, uint32_t height, const RectAnimationConfig& rectAnimationConfig = {}) override; 45 WMError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) override; 46 WMError TransferExtensionData(const AAFwk::WantParams& wantParams) override; 47 WSError NotifyTransferComponentData(const AAFwk::WantParams& wantParams) override; 48 void RegisterTransferComponentDataListener(const NotifyTransferComponentDataFunc& func) override; 49 WSErrorCode NotifyTransferComponentDataSync( 50 const AAFwk::WantParams& wantParams, AAFwk::WantParams& reWantParams) override; 51 void RegisterTransferComponentDataForResultListener( 52 const NotifyTransferComponentDataForResultFunc& func) override; 53 void TriggerBindModalUIExtension() override; 54 std::shared_ptr<IDataHandler> GetExtensionDataHandler() const override; 55 WSError SendExtensionData(MessageParcel& data, MessageParcel& reply, MessageOption& option) override; 56 WindowMode GetWindowMode() const override; 57 WMError SetWindowMode(WindowMode mode) override; 58 59 /* 60 * Window Privacy 61 */ 62 WMError SetPrivacyMode(bool isPrivacyMode) override; 63 WMError HidePrivacyContentForHost(bool needHide) override; 64 65 WMError NapiSetUIContent(const std::string& contentInfo, napi_env env, napi_value storage, 66 BackupAndRestoreType type, sptr<IRemoteObject> token, AppExecFwk::Ability* ability) override; 67 WMError NapiSetUIContentByName(const std::string& contentName, napi_env env, napi_value storage, 68 BackupAndRestoreType type, sptr<IRemoteObject> token, AppExecFwk::Ability* ability) override; SetUniqueVirtualPixelRatio(bool useUniqueDensity,float virtualPixelRatio)69 void SetUniqueVirtualPixelRatio(bool useUniqueDensity, float virtualPixelRatio) override {} 70 WSError UpdateRect(const WSRect& rect, SizeChangeReason reason, 71 const SceneAnimationConfig& config = { nullptr, ROTATE_ANIMATION_DURATION }, 72 const std::map<AvoidAreaType, AvoidArea>& avoidAreas = {}) override; 73 74 WMError GetAvoidAreaByType(AvoidAreaType type, AvoidArea& avoidArea, const Rect& rect = Rect::EMPTY_RECT, 75 int32_t apiVersion = API_VERSION_INVALID) override; 76 WSError NotifyAccessibilityHoverEvent(float pointX, float pointY, int32_t sourceType, int32_t eventType, 77 int64_t timeMs) override; 78 WSError NotifyAccessibilityChildTreeRegister( 79 uint32_t windowId, int32_t treeId, int64_t accessibilityId) override; 80 WSError NotifyAccessibilityChildTreeUnregister() override; 81 WSError NotifyAccessibilityDumpChildInfo( 82 const std::vector<std::string>& params, std::vector<std::string>& info) override; 83 WMError TransferAccessibilityEvent(const Accessibility::AccessibilityEventInfo& info, 84 int64_t uiExtensionIdLevel) override; 85 WMError Destroy(bool needNotifyServer, bool needClearListener = true) override; 86 87 WMError RegisterAvoidAreaChangeListener(const sptr<IAvoidAreaChangedListener>& listener) override; 88 WMError UnregisterAvoidAreaChangeListener(const sptr<IAvoidAreaChangedListener>& listener) override; 89 void ConsumePointerEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent) override; 90 91 void NotifyFocusActiveEvent(bool isFocusActive) override; 92 void NotifyFocusStateEvent(bool focusState) override; 93 void NotifyBackpressedEvent(bool& isConsumed) override; 94 void NotifyKeyEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent, bool& isConsumed, 95 bool notifyInputMethod = true) override; 96 void NotifySessionForeground(uint32_t reason, bool withAnimation) override; 97 void NotifySessionBackground(uint32_t reason, bool withAnimation, bool isFromInnerkits) override; 98 void NotifyOccupiedAreaChangeInfo(sptr<OccupiedAreaChangeInfo> info, 99 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr) override; 100 WMError RegisterOccupiedAreaChangeListener(const sptr<IOccupiedAreaChangeListener>& listener) override; 101 WMError UnregisterOccupiedAreaChangeListener(const sptr<IOccupiedAreaChangeListener>& listener) override; 102 void UpdateConfiguration(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 103 void UpdateConfigurationForSpecified(const std::shared_ptr<AppExecFwk::Configuration>& configuration, 104 const std::shared_ptr<Global::Resource::ResourceManager>& resourceManager) override; 105 static void UpdateConfigurationForAll(const std::shared_ptr<AppExecFwk::Configuration>& configuration, 106 const std::vector<std::shared_ptr<AbilityRuntime::Context>>& ignoreWindowContexts = {}); 107 WMError Show(uint32_t reason = 0, bool withAnimation = false, bool withFocus = true) override; 108 WMError Hide(uint32_t reason, bool withAnimation, bool isFromInnerkits) override; 109 WSError NotifyDensityFollowHost(bool isFollowHost, float densityValue) override; 110 float GetVirtualPixelRatio(const sptr<DisplayInfo>& displayInfo) override; 111 WMError HideNonSecureWindows(bool shouldHide) override; 112 WMError SetWaterMarkFlag(bool isEnable) override; 113 Rect GetHostWindowRect(int32_t hostWindowId) override; 114 115 /* 116 * Free Multi Window 117 */ 118 bool GetFreeMultiWindowModeEnabledState() override; 119 120 bool PreNotifyKeyEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent) override; 121 void NotifyExtensionTimeout(int32_t errorCode) override; 122 int32_t GetRealParentId() const override; 123 WindowType GetParentWindowType() const override; 124 void NotifyModalUIExtensionMayBeCovered(bool byLoadContent) override; 125 WSError UpdateSessionViewportConfig(const SessionViewportConfig& config) override; 126 void NotifyExtensionEventAsync(uint32_t notifyEvent) override; 127 WSError NotifyDumpInfo(const std::vector<std::string>& params, std::vector<std::string>& info) override; 128 129 /* 130 * PC Window 131 */ 132 bool IsPcWindow() const override; 133 bool IsPcOrPadFreeMultiWindowMode() const override; 134 135 /* 136 * Window Property 137 */ 138 static void UpdateConfigurationSyncForAll(const std::shared_ptr<AppExecFwk::Configuration>& configuration); 139 void UpdateConfigurationSync(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 140 CrossAxisState GetCrossAxisState() override; 141 142 protected: 143 NotifyTransferComponentDataFunc notifyTransferComponentDataFunc_; 144 NotifyTransferComponentDataForResultFunc notifyTransferComponentDataForResultFunc_; 145 146 private: 147 void InputMethodKeyEventResultCallback(const std::shared_ptr<MMI::KeyEvent>& keyEvent, bool consumed, 148 std::shared_ptr<std::promise<bool>> isConsumedPromise, std::shared_ptr<bool> isTimeout); 149 void AddExtensionWindowStageToSCB(bool isConstrainedModal = false); 150 void RemoveExtensionWindowStageFromSCB(bool isConstrainedModal = false); 151 void CheckAndAddExtWindowFlags(); 152 void CheckAndRemoveExtWindowFlags(); 153 WMError UpdateExtWindowFlags(const ExtensionWindowFlags& flags, const ExtensionWindowFlags& actions); 154 void UpdateRectForRotation(const Rect& wmRect, const Rect& preRect, WindowSizeChangeReason wmReason, 155 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr, 156 const std::map<AvoidAreaType, AvoidArea>& avoidAreas = {}); 157 void UpdateRectForOtherReason(const Rect& wmRect, WindowSizeChangeReason wmReason, 158 const std::map<AvoidAreaType, AvoidArea>& avoidAreas = {}); 159 WMError GetSystemViewportConfig(SessionViewportConfig& config); 160 void UpdateSystemViewportConfig(); 161 void UpdateExtensionDensity(SessionViewportConfig& config); 162 void NotifyDisplayInfoChange(const SessionViewportConfig& config); 163 WSError UpdateSessionViewportConfigInner(const SessionViewportConfig& config); 164 void UpdateAccessibilityTreeInfo(); 165 void ArkUIFrameworkSupport(); 166 WMError CheckHideNonSecureWindowsPermission(bool shouldHide); 167 void ReportModalUIExtensionMayBeCovered(bool byLoadContent) const; 168 WMError SetUIContentInner(const std::string& contentInfo, napi_env env, napi_value storage, 169 sptr<IRemoteObject> token, AppExecFwk::Ability* ability, bool initByName = false); 170 void RegisterDataConsumer(); 171 void RegisterConsumer(Extension::Businesscode code, 172 const std::function<WMError(AAFwk::Want&& data, std::optional<AAFwk::Want>& reply)>& func); 173 WMError OnCrossAxisStateChange(AAFwk::Want&& data, std::optional<AAFwk::Want>& reply); 174 175 std::shared_ptr<Extension::DataHandler> dataHandler_; 176 std::unordered_map<uint32_t, DataConsumeCallback> dataConsumers_; // Read only after init 177 sptr<IRemoteObject> abilityToken_ { nullptr }; 178 std::atomic<bool> isDensityFollowHost_ { false }; 179 std::optional<std::atomic<float>> hostDensityValue_ = std::nullopt; 180 sptr<IOccupiedAreaChangeListener> occupiedAreaChangeListener_; 181 std::optional<std::atomic<bool>> focusState_ = std::nullopt; 182 std::optional<AccessibilityChildTreeInfo> accessibilityChildTreeInfo_ = std::nullopt; 183 ExtensionWindowFlags extensionWindowFlags_ { 0 }; 184 bool modalUIExtensionMayBeCovered_ { false }; 185 bool modalUIExtensionSelfLoadContent_ { false }; 186 float lastDensity_ { 0.0f }; 187 int32_t lastOrientation_ { 0 }; 188 }; 189 } // namespace Rosen 190 } // namespace OHOS 191 192 #endif // OHOS_ROSEN_WINDOW_EXTENSION_SESSION_IMPL_H 193