1 /* 2 * Copyright (c) 2025 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 #include "accessibility_manager.h" 17 18 #include <ctime> 19 #include <mutex> 20 #include <regex> 21 #include <thread> 22 23 #include "devicestatus_define.h" 24 #include "fi_log.h" 25 26 #undef LOG_TAG 27 #define LOG_TAG "AccessibilityManager" 28 29 namespace OHOS { 30 namespace Msdp { 31 namespace DeviceStatus { OnAbilityConnected()32void AccessibilityManager::AccessibleAbilityListenerImpl::OnAbilityConnected() 33 { 34 FI_HILOGI("Accessibility is OnAbilityConnected"); 35 std::lock_guard<std::mutex> guard(mutex_); 36 CHKPV(callback_); 37 callback_(ON_ABILITY_CONNECTED); 38 } 39 OnAbilityDisconnected()40void AccessibilityManager::AccessibleAbilityListenerImpl::OnAbilityDisconnected() 41 { 42 FI_HILOGI("Accessibility is OnAbilityDisconnected"); 43 std::lock_guard<std::mutex> guard(mutex_); 44 CHKPV(callback_); 45 callback_(ON_ABILITY_DISCONNECTED); 46 } 47 OnAccessibilityEvent(const Accessibility::AccessibilityEventInfo & eventInfo)48void AccessibilityManager::AccessibleAbilityListenerImpl::OnAccessibilityEvent 49 (const Accessibility::AccessibilityEventInfo &eventInfo) 50 { 51 CALL_DEBUG_ENTER; 52 std::lock_guard<std::mutex> guard(mutex_); 53 CHKPV(callback_); 54 if (eventInfo.GetEventType() == Accessibility::EventType::TYPE_VIEW_SCROLLED_EVENT) { 55 FI_HILOGD("trigger view scrolled"); 56 callback_(ON_ABILITY_SCROLLED_EVENT); 57 } 58 } 59 OnKeyPressEvent(const std::shared_ptr<MMI::KeyEvent> & keyEvent)60bool AccessibilityManager::AccessibleAbilityListenerImpl::OnKeyPressEvent 61 (const std::shared_ptr<MMI::KeyEvent> &keyEvent) 62 { 63 return true; 64 } 65 66 AccessibilityManager::AccessibilityManager() = default; 67 68 AccessibilityManager::~AccessibilityManager() = default; 69 AccessibilityConnect(AccessibilityCallback callback)70void AccessibilityManager::AccessibilityConnect(AccessibilityCallback callback) 71 { 72 CALL_DEBUG_ENTER; 73 std::lock_guard<std::mutex> guard(mutex_); 74 CHKPV(callback); 75 auto listener = std::make_shared<AccessibleAbilityListenerImpl>(callback); 76 if (listener == nullptr) { 77 FI_HILOGE("create accessible ability listener failed"); 78 } 79 80 auto accessibilityInstance = Accessibility::AccessibilityUITestAbility::GetInstance(); 81 CHKPV(accessibilityInstance); 82 83 auto ret = accessibilityInstance->RegisterAbilityListener(listener); 84 if (ret != RET_OK) { 85 FI_HILOGE("Accessibility register ablity listener failed on connect"); 86 return; 87 } 88 89 ret = accessibilityInstance->Connect(); 90 if (ret != RET_OK) { 91 FI_HILOGE("Accessibility Connect failed"); 92 } 93 } 94 AccessibilityDisconnect()95void AccessibilityManager::AccessibilityDisconnect() 96 { 97 std::lock_guard<std::mutex> guard(mutex_); 98 auto accessibilityInstance = Accessibility::AccessibilityUITestAbility::GetInstance(); 99 CHKPV(accessibilityInstance); 100 101 auto ret = accessibilityInstance->Disconnect(); 102 if (ret != RET_OK) { 103 FI_HILOGE("Accessibility disConnect failed"); 104 return; 105 } 106 } 107 } // namespace DeviceStatus 108 } // namespace Msdp 109 } // namespace OHOS