* Copyright (c) 2025 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.
*/
#ifndef OHOS_ROSEN_WINDOW_INPUT_REDISTRIBUTE_CLIENT_H
#define OHOS_ROSEN_WINDOW_INPUT_REDISTRIBUTE_CLIENT_H
#include "window.h"
namespace OHOS {
namespace Rosen {
constexpr uint32_t DEFAULT_REDISTRIBUTE_PRIORITY = 1000;
* @enum InputRedistributeIdentity
*
* @brief the identity identifier of the input event receiving module.
*/
enum class InputRedistributeIdentity : uint32_t {
IDENTITY_MEDIA_CONTROLLER = 1000,
IDENTITY_TOUCH_PREDICTOR = 1001,
IDENTITY_SENSEFLOW = 1002,
IDENTITY_CONTROL_DISPLAY_SEPARATION = 1003,
IDENTITY_INVALID,
};
* @enum InputRedistributeTiming
*
* @brief the timing of event redistribution: before or after the component.
*/
enum class InputRedistributeTiming : uint32_t {
REDISTRIBUTE_BEFORE_SEND_TO_COMPONENT = 0,
REDISTRIBUTE_AFTER_SEND_TO_COMPONENT,
REDISTRIBUTE_INVALID_TIMING,
};
* @enum InputAfterRedistributeBehavior
*
* @brief the module's behavior after receiving input,
* if return BEHAVIOR_INTERCEPT, it will not be distribute downwards.
*/
enum class InputAfterRedistributeBehavior : uint32_t {
BEHAVIOR_NORMAL = 0,
BEHAVIOR_INTERCEPT,
};
enum class InputEventType : uint32_t {
KEY_EVENT = 0,
POINTER_EVENT,
ALL,
INVALID,
};
class IInputEventRecipientCallback {
public:
IInputEventRecipientCallback() = default;
virtual ~IInputEventRecipientCallback() = default;
virtual InputAfterRedistributeBehavior OnInputEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent) = 0;
virtual InputAfterRedistributeBehavior OnInputEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent) = 0;
};
* Recipient info.
* @param identity identity identifier.
* @param timing the timing of event redistribution.
* @param type the type of input event.
* @param priority redistribute event priority of the identity.
* @param recipient recipient of the input event.
*/
struct IInputEventRecipientInfo {
InputRedistributeIdentity identity = InputRedistributeIdentity::IDENTITY_INVALID;
InputRedistributeTiming timing = InputRedistributeTiming::REDISTRIBUTE_INVALID_TIMING;
InputEventType type = InputEventType::INVALID;
uint32_t priority = DEFAULT_REDISTRIBUTE_PRIORITY;
std::shared_ptr<IInputEventRecipientCallback> recipient = nullptr;
};
* @class WindowInputRedistributeClient
*
* @brief Used by all module want receive input event.
*/
class WindowInputRedistributeClient {
public:
* Register the redistribution of input events.
* @param recipientInfo recipient info.
*/
static void RegisterInputEventRedistribute(const IInputEventRecipientInfo& recipientInfo);
* Unregister the redistribution of input events.
* @param recipientInfo recipient info.
*/
static void UnRegisterInputEventRedistribute(const IInputEventRecipientInfo& recipientInfo);
* Send key event.
* @param keyEvent keyEvent of Multi-Model Input.
*/
static void SendInputEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent);
* Send pointer event.
* @param pointerEvent pointerEvent of Multi-Model Input.
*/
static void SendInputEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent);
};
}
}
#endif