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