/*
* Copyright (c) 2020-2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @addtogroup UI_DFX
* @{
*
* @brief Provides test and analysis capabilities, such as stimulating input events and viewing information about a
* Document Object Model (DOM) tree.
*
* @since 1.0
* @version 1.0
*/
/**
* @file event_injector.h
*
* @brief Declares functions for simulating input events.
*
* @since 1.0
* @version 1.0
*/
#ifndef GRAPHIC_LITE_EVENT_INJECTOR_H
#define GRAPHIC_LITE_EVENT_INJECTOR_H
#include "graphic_config.h"
#if ENABLE_DEBUG
#include "gfx_utils/heap_base.h"
#include "gfx_utils/input_event_info.h"
namespace OHOS {
/**
* @ Enumerates the event types.
*/
enum class EventDataType {
/** Point event */
POINT_TYPE,
/** Key event */
KEY_TYPE,
/** Other events */
OTHERS
};
class PointEventInjector;
class KeyEventInjector;
/**
* @brief Manages all types of simulated input events, registers and unregisters event injectors, and simulates
* input events.
*
* @since 1.0
* @version 1.0
*/
class EventInjector : public HeapBase {
public:
/**
* @brief Obtains a singleton EventInjector instance.
*
* @return Returns the EventInjector instance.
* @since 1.0
* @version 1.0
*/
static EventInjector* GetInstance();
/**
* @brief Registers an event injector of a specified type.
*
* @param type Indicates the event type. For details, see {@link EventDataType}.
* @return Returns true if the operation is successful; returns false otherwise.
* @since 1.0
* @version 1.0
*/
bool RegisterEventInjector(EventDataType type);
/**
* @brief Unregisters an event injector of a specified type.
*
* @param type Indicates the event type. For details, see {@link EventDataType}.
* @since 1.0
* @version 1.0
*/
void UnregisterEventInjector(EventDataType type);
/**
* @brief Checks whether the event injector of a specified type is registered.
*
* @param type Indicates the event type. For details, see {@link EventDataType}.
* @return Returns true if the device is registered; returns false otherwise.
* @since 1.0
* @version 1.0
*/
bool IsEventInjectorRegistered(EventDataType type) const;
/**
* @brief Uses a data array of a specified length to simulate an input event of a specified type.
*
* @param dataArray Indicates the pointer to the data array used for simulating the event.
* @param arrayLength Indicates the length of the data array.
* @param type Indicates the event type. For details, see {@link EventDataType}.
* @return Returns true if the operation is successful; returns false otherwise.
* @since 1.0
* @version 1.0
*/
bool SetInjectEvent(const DeviceData* dataArray, uint16_t arrayLength, EventDataType type);
/**
* @brief Stimulates a click event.
*
* @param clickPoint Indicates the coordinates of the click point.
* @return Returns true if the operation is successful; returns false otherwise.
* @since 3.0
* @version 5.0
*/
bool SetClickEvent(const Point& clickPoint);
/**
* @brief Stimulates a long press event.
*
* @param longPressPoint Indicates the coordinates of the long press point.
* @return Returns true if the operation is successful; returns false otherwise.
* @since 3.0
* @version 5.0
*/
bool SetLongPressEvent(const Point& longPressPoint);
/**
* @brief Stimulates a drag event that occurs between two points.
*
* @param startPoint Indicates the coordinates of the start point.
* @param endPoint Indicates the coordinates of the end point.
* @param dragTime Indicates the duration of dragging from the start point to the end point, in milliseconds.
* The value range is [2, 499] x {@link INDEV_READ_PERIOD}.
* The shorter the duration is, the faster the sliding is.
*
* @return Returns true if the operation is successful; returns false otherwise.
* @since 3.0
* @version 5.0
*/
bool SetDragEvent(const Point& startPoint, const Point& endPoint, uint32_t dragTime);
/**
* @brief Simulates a key event.
*
* @param keyId Indicates the key ID.
* @param state Indicates the key state. For details, see {@link InputDevice}.
* @return Returns true if the operation is successful; returns false otherwise.
* @since 3.0
* @version 5.0
*/
bool SetKeyEvent(uint16_t keyId, uint16_t state);
#if ENABLE_WINDOW
/**
* @brief Set id of mock window.
*
* @param windowId id of mock window
*
* @since 3.0
* @version 5.0
*/
void SetWindowId(uint8_t windowId);
#endif
private:
EventInjector() : pointEventInjector_(nullptr), keyEventInjector_(nullptr) {}
virtual ~EventInjector();
EventInjector(const EventInjector&) = delete;
EventInjector& operator=(const EventInjector&) = delete;
EventInjector(EventInjector&&) = delete;
EventInjector& operator=(EventInjector&&) = delete;
PointEventInjector* pointEventInjector_;
KeyEventInjector* keyEventInjector_;
};
} // namespace OHOS
#endif // ENABLE_DEBUG
#endif // GRAPHIC_LITE_EVENT_INJECTOR_H