1a69a01cdSopenharmony_ci/* 2a69a01cdSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3a69a01cdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a69a01cdSopenharmony_ci * you may not use this file except in compliance with the License. 5a69a01cdSopenharmony_ci * You may obtain a copy of the License at 6a69a01cdSopenharmony_ci * 7a69a01cdSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a69a01cdSopenharmony_ci * 9a69a01cdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a69a01cdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a69a01cdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a69a01cdSopenharmony_ci * See the License for the specific language governing permissions and 13a69a01cdSopenharmony_ci * limitations under the License. 14a69a01cdSopenharmony_ci */ 15a69a01cdSopenharmony_ci 16a69a01cdSopenharmony_ci#include "event_monitor.h" 17a69a01cdSopenharmony_ci 18a69a01cdSopenharmony_civoid EventMonitor::SetOnAbilityConnectCallback(std::function<void()> onConnectCb) 19a69a01cdSopenharmony_ci{ 20a69a01cdSopenharmony_ci onConnectCallback_ = std::move(onConnectCb); 21a69a01cdSopenharmony_ci} 22a69a01cdSopenharmony_ci 23a69a01cdSopenharmony_civoid EventMonitor::SetOnAbilityDisConnectCallback(std::function<void()> onDisConnectCb) 24a69a01cdSopenharmony_ci{ 25a69a01cdSopenharmony_ci onDisConnectCallback_ = std::move(onDisConnectCb); 26a69a01cdSopenharmony_ci} 27a69a01cdSopenharmony_ci 28a69a01cdSopenharmony_civoid EventMonitor::OnAbilityConnected() 29a69a01cdSopenharmony_ci{ 30a69a01cdSopenharmony_ci if (onConnectCallback_ != nullptr) { 31a69a01cdSopenharmony_ci onConnectCallback_(); 32a69a01cdSopenharmony_ci } 33a69a01cdSopenharmony_ci} 34a69a01cdSopenharmony_ci 35a69a01cdSopenharmony_civoid EventMonitor::OnAbilityDisconnected() 36a69a01cdSopenharmony_ci{ 37a69a01cdSopenharmony_ci if (onDisConnectCallback_ != nullptr) { 38a69a01cdSopenharmony_ci onDisConnectCallback_(); 39a69a01cdSopenharmony_ci } 40a69a01cdSopenharmony_ci} 41a69a01cdSopenharmony_ci 42a69a01cdSopenharmony_civoid EventMonitor::OnAccessibilityEvent(const AccessibilityEventInfo &eventInfo) 43a69a01cdSopenharmony_ci{ 44a69a01cdSopenharmony_ci DEBUG_LOG_STR("OnAccessibilityEvent Start %s", std::to_string(eventInfo.GetEventType()).c_str()); 45a69a01cdSopenharmony_ci} 46a69a01cdSopenharmony_ci 47a69a01cdSopenharmony_ciuint64_t EventMonitor::GetLastEventMillis() 48a69a01cdSopenharmony_ci{ 49a69a01cdSopenharmony_ci if (lastEventMillis_.load() <= 0) { 50a69a01cdSopenharmony_ci lastEventMillis_.store(1); 51a69a01cdSopenharmony_ci } 52a69a01cdSopenharmony_ci return lastEventMillis_.load(); 53a69a01cdSopenharmony_ci} 54a69a01cdSopenharmony_ci 55a69a01cdSopenharmony_cibool EventMonitor::WaitEventIdle(uint32_t idleThresholdMs, uint32_t timeoutMs) 56a69a01cdSopenharmony_ci{ 57a69a01cdSopenharmony_ci const auto currentMs = 1; 58a69a01cdSopenharmony_ci if (lastEventMillis_.load() <= 0) { 59a69a01cdSopenharmony_ci lastEventMillis_.store(currentMs); 60a69a01cdSopenharmony_ci } 61a69a01cdSopenharmony_ci if (currentMs - lastEventMillis_.load() >= idleThresholdMs) { 62a69a01cdSopenharmony_ci return true; 63a69a01cdSopenharmony_ci } 64a69a01cdSopenharmony_ci static constexpr auto sliceMs = 10; 65a69a01cdSopenharmony_ci return WaitEventIdle(idleThresholdMs, timeoutMs - sliceMs); 66a69a01cdSopenharmony_ci}