• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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_ACCESSIBLE_ABILITY_CONNECTION_H_
17 #define OHOS_ACCESSIBLE_ABILITY_CONNECTION_H_
18 
19 #include <mutex>
20 #include <set>
21 #include <string>
22 #include <vector>
23 #include "ability_connect_callback_stub.h"
24 #include "accessible_ability_client_proxy.h"
25 #include "accessible_ability_channel_stub.h"
26 #include "accessibility_ability_info.h"
27 #include "common_event_manager.h"
28 
29 namespace OHOS {
30 namespace Accessibility {
31 #define UID_MASK 200000
32 
33 class AccessibilityAccountData;
34 class AccessibleAbilityManagerService;
35 class AccessibleAbilityConnection;
36 
37 class AccessibleAbilityChannelStubImpl : public AccessibleAbilityChannelStub {
38 public:
39     AccessibleAbilityChannelStubImpl(AccessibleAbilityConnection &connection);
40     ~AccessibleAbilityChannelStubImpl() = default;
41     bool SearchElementInfoByAccessibilityId(const int accessibilityWindowId, const long elementId,
42         const int requestId, const sptr<IAccessibilityElementOperatorCallback> &callback, const int mode) override;
43 
44     bool SearchElementInfosByText(const int accessibilityWindowId, const long elementId,
45         const std::string &text, const int requestId,
46         const sptr<IAccessibilityElementOperatorCallback> &callback) override;
47 
48     bool FindFocusedElementInfo(const int accessibilityWindowId, const long elementId,
49         const int focusType, const int requestId,
50         const sptr<IAccessibilityElementOperatorCallback> &callback) override;
51 
52     bool FocusMoveSearch(const int accessibilityWindowId, const long elementId, const int direction,
53         const int requestId, const sptr<IAccessibilityElementOperatorCallback> &callback) override;
54 
55     bool ExecuteAction(const int accessibilityWindowId, const long elementId, const int action,
56         std::map<std::string, std::string> &actionArguments, const int requestId,
57         const sptr<IAccessibilityElementOperatorCallback> &callback) override;
58 
59     std::vector<AccessibilityWindowInfo> GetWindows() override;
60 
61     bool ExecuteCommonAction(const int action) override;
62 
63     void SetOnKeyPressEventResult(const bool handled, const int sequence) override;
64 
65     float GetDisplayResizeScale(const int displayId) override;
66 
67     float GetDisplayResizeCenterX(const int displayId) override;
68 
69     float GetDisplayResizeCenterY(const int displayId) override;
70 
71     Rect GetDisplayResizeRect(const int displayId) override;
72 
73     bool ResetDisplayResize(const int displayId, bool animate) override;
74 
75     bool SetDisplayResizeScaleAndCenter(const int displayId, const float scale, const float centerX,
76         const float centerY, const bool animate) override;
77 
78     void SendSimulateGesture(const int requestId, const std::vector<GesturePathDefine> &gestureSteps) override;
79 
80 private:
81     AccessibleAbilityConnection& connection_;
82 };
83 
84 class AccessibleAbilityConnection : public AAFwk::AbilityConnectionStub {
85 public:
86     AccessibleAbilityConnection(const sptr<AccessibilityAccountData> &accountData, const int connectionId,
87         AccessibilityAbilityInfo &abilityInfo);
88 
89     virtual ~AccessibleAbilityConnection();
90 
91     virtual void OnAbilityConnectDone(const AppExecFwk::ElementName &element,
92                                       const sptr<IRemoteObject> &remoteObject,
93                                       int resultCode) override;
94 
95     virtual void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override;
96 
97     // For AccessibleAbilityClientProxy
98     void OnAccessibilityEvent(AccessibilityEventInfo &eventInfo);
99 
100     bool OnKeyPressEvent(const MMI::KeyEvent &keyEvent, const int sequence);
101 
102     void OnDisplayResized(const int displayId, const Rect &rect, const float scale, const float centerX,
103         const float centerY);
104 
105     void OnGestureSimulateResult(const int sequence, const bool completedSuccessfully);
106 
107     // Get Attribution
GetAbilityInfo()108     inline AccessibilityAbilityInfo& GetAbilityInfo()
109     {
110         return abilityInfo_;
111     }
112 
GetElementName()113     inline AppExecFwk::ElementName& GetElementName()
114     {
115         return elementName_;
116     }
117 
GetAccountData()118     inline wptr<AccessibilityAccountData> GetAccountData()
119     {
120         return accountData_;
121     }
122 
GetProxy()123     inline sptr<IAccessibleAbilityClient> GetProxy()
124     {
125         return proxy_;
126     }
127 
128     void Disconnect();
129 
130     void Connect(const AppExecFwk::ElementName &element);
131 
132     int GetChannelId();
133 
134 private:
135     class AccessibleAbilityConnectionDeathRecipient final : public IRemoteObject::DeathRecipient {
136     public:
AccessibleAbilityConnectionDeathRecipient(sptr<AccessibilityAccountData> accountData,AppExecFwk::ElementName & elementName)137         AccessibleAbilityConnectionDeathRecipient(sptr<AccessibilityAccountData> accountData,
138             AppExecFwk::ElementName& elementName)
139             : recipientAccountData_(accountData), recipientElementName_(elementName) {};
140         ~AccessibleAbilityConnectionDeathRecipient() = default;
141         DISALLOW_COPY_AND_MOVE(AccessibleAbilityConnectionDeathRecipient);
142 
143         void OnRemoteDied(const wptr<IRemoteObject>& remote);
144 
145         sptr<AccessibilityAccountData> recipientAccountData_;
146         AppExecFwk::ElementName& recipientElementName_;
147     };
148 
149     bool IsWantedEvent(int eventType);
150     bool IsAllowedListEvent(EventType eventType);
151 
152     int connectionId_ = -1;
153     sptr<IRemoteObject::DeathRecipient> deathRecipient_ = nullptr;
154     sptr<IAccessibleAbilityClient> proxy_ = nullptr;
155     sptr<AccessibleAbilityChannelStubImpl> stub_ = nullptr;
156     AccessibilityAbilityInfo abilityInfo_ {};
157     AppExecFwk::ElementName elementName_ {};
158     sptr<AccessibilityAccountData> accountData_ = nullptr;
159     static std::mutex mutex_;
160 };
161 } // namespace Accessibility
162 } // namespace OHOS
163 #endif // OHOS_ACCESSIBLE_ABILITY_CONNECTION_H_