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_