• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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