From de7885073f4d59b1c3dbeae1b0a4824cb72861d5 Mon Sep 17 00:00:00 2001 From: Prabir Pradhan Date: Wed, 22 Dec 2021 00:26:07 -0800 Subject: Move InputFeature flag definitions to AIDL (1/2) We convert the InputFeatures flags into AIDL enums that will have values generated in both native and java code so that the value only has to be defined once. Bug: 162194035 Test: build, presubmit Change-Id: I28bd51a4affe705155c08c273a902d86665c63b9 --- libs/gui/Android.bp | 1 + libs/gui/include/gui/WindowInfo.h | 26 ++++++++++---- libs/input/android/os/IInputConstants.aidl | 56 ++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp index c5dec19582..9488c0a160 100644 --- a/libs/gui/Android.bp +++ b/libs/gui/Android.bp @@ -66,6 +66,7 @@ cc_library_static { host_supported: true, srcs: [ ":guiconstants_aidl", + ":inputconstants_aidl", "android/gui/DisplayInfo.aidl", "android/gui/FocusRequest.aidl", "android/gui/InputApplicationInfo.aidl", diff --git a/libs/gui/include/gui/WindowInfo.h b/libs/gui/include/gui/WindowInfo.h index 027371744d..9fe64c2ea5 100644 --- a/libs/gui/include/gui/WindowInfo.h +++ b/libs/gui/include/gui/WindowInfo.h @@ -17,6 +17,7 @@ #pragma once #include +#include #include #include #include @@ -131,14 +132,25 @@ struct WindowInfo : public Parcelable { ftl_last = FIRST_SYSTEM_WINDOW + 15 }; + // This is a conversion of os::IInputConstants::InputFeature to an enum backed by an unsigned + // type. This indicates that they are flags, so it can be used with ftl/enum.h. enum class Feature : uint32_t { - DISABLE_TOUCH_PAD_GESTURES = 1u << 0, - NO_INPUT_CHANNEL = 1u << 1, - DISABLE_USER_ACTIVITY = 1u << 2, - DROP_INPUT = 1u << 3, - DROP_INPUT_IF_OBSCURED = 1u << 4, - SPY = 1u << 5, - INTERCEPTS_STYLUS = 1u << 6, + // clang-format off + DISABLE_TOUCH_PAD_GESTURES = + static_cast(os::IInputConstants::InputFeature::DISABLE_POINTER_GESTURES), + NO_INPUT_CHANNEL = + static_cast(os::IInputConstants::InputFeature::NO_INPUT_CHANNEL), + DISABLE_USER_ACTIVITY = + static_cast(os::IInputConstants::InputFeature::DISABLE_USER_ACTIVITY), + DROP_INPUT = + static_cast(os::IInputConstants::InputFeature::DROP_INPUT), + DROP_INPUT_IF_OBSCURED = + static_cast(os::IInputConstants::InputFeature::DROP_INPUT_IF_OBSCURED), + SPY = + static_cast(os::IInputConstants::InputFeature::SPY), + INTERCEPTS_STYLUS = + static_cast(os::IInputConstants::InputFeature::INTERCEPTS_STYLUS), + // clang-format on }; /* These values are filled in by the WM and passed through SurfaceFlinger diff --git a/libs/input/android/os/IInputConstants.aidl b/libs/input/android/os/IInputConstants.aidl index 474a1e410d..bfd92948ca 100644 --- a/libs/input/android/os/IInputConstants.aidl +++ b/libs/input/android/os/IInputConstants.aidl @@ -53,4 +53,60 @@ interface IInputConstants * set of flags, including in input/Input.h and in android/input.h. */ const int INPUT_EVENT_FLAG_IS_ACCESSIBILITY_EVENT = 0x800; + + @Backing(type="int") + enum InputFeature { + /** + * When this window has focus, disable touch pad pointer gesture processing. + * The window will receive raw position updates from the touch pad instead + * of pointer movements and synthetic touch events. + */ + DISABLE_POINTER_GESTURES = 0x00000001, + + /** + * Does not construct an input channel for this window. The channel will therefore + * be incapable of receiving input. + */ + NO_INPUT_CHANNEL = 0x00000002, + + /** + * When this window has focus, does not call user activity for all input events so + * the application will have to do it itself. Should only be used by + * the keyguard and phone app. + * + * Should only be used by the keyguard and phone app. + */ + DISABLE_USER_ACTIVITY = 0x00000004, + + /** + * Internal flag used to indicate that input should be dropped on this window. + */ + DROP_INPUT = 0x00000008, + + /** + * Internal flag used to indicate that input should be dropped on this window if this window + * is obscured. + */ + DROP_INPUT_IF_OBSCURED = 0x00000010, + + /** + * An input spy window. This window will receive all pointer events within its touchable + * area, but will will not stop events from being sent to other windows below it in z-order. + * An input event will be dispatched to all spy windows above the top non-spy window at the + * event's coordinates. + */ + SPY = 0x00000020, + + /** + * When used with the window flag {@link #FLAG_NOT_TOUCHABLE}, this window will continue + * to receive events from a stylus device within its touchable region. All other pointer + * events, such as from a mouse or touchscreen, will be dispatched to the windows behind it. + * + * This input feature has no effect when the window flag {@link #FLAG_NOT_TOUCHABLE} is + * not set. + * + * The window must be a trusted overlay to use this input feature. + */ + INTERCEPTS_STYLUS = 0x00000040, + } } -- cgit v1.2.3-59-g8ed1b