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