1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _UI_INPUT_INPUTDISPATCHER_INPUTDISPATCHERINTERFACE_H 18 #define _UI_INPUT_INPUTDISPATCHER_INPUTDISPATCHERINTERFACE_H 19 20 #include <InputListener.h> 21 #include <input/ISetInputWindowsListener.h> 22 23 namespace android { 24 25 class InputApplicationHandle; 26 class InputChannel; 27 class InputWindowHandle; 28 29 /* 30 * Constants used to report the outcome of input event injection. 31 */ 32 enum { 33 /* (INTERNAL USE ONLY) Specifies that injection is pending and its outcome is unknown. */ 34 INPUT_EVENT_INJECTION_PENDING = -1, 35 36 /* Injection succeeded. */ 37 INPUT_EVENT_INJECTION_SUCCEEDED = 0, 38 39 /* Injection failed because the injector did not have permission to inject 40 * into the application with input focus. */ 41 INPUT_EVENT_INJECTION_PERMISSION_DENIED = 1, 42 43 /* Injection failed because there were no available input targets. */ 44 INPUT_EVENT_INJECTION_FAILED = 2, 45 46 /* Injection failed due to a timeout. */ 47 INPUT_EVENT_INJECTION_TIMED_OUT = 3 48 }; 49 50 /* Notifies the system about input events generated by the input reader. 51 * The dispatcher is expected to be mostly asynchronous. */ 52 class InputDispatcherInterface : public virtual RefBase, public InputListenerInterface { 53 protected: InputDispatcherInterface()54 InputDispatcherInterface() {} ~InputDispatcherInterface()55 virtual ~InputDispatcherInterface() {} 56 57 public: 58 /* Dumps the state of the input dispatcher. 59 * 60 * This method may be called on any thread (usually by the input manager). */ 61 virtual void dump(std::string& dump) = 0; 62 63 /* Called by the heatbeat to ensures that the dispatcher has not deadlocked. */ 64 virtual void monitor() = 0; 65 66 /* Runs a single iteration of the dispatch loop. 67 * Nominally processes one queued event, a timeout, or a response from an input consumer. 68 * 69 * This method should only be called on the input dispatcher thread. 70 */ 71 virtual void dispatchOnce() = 0; 72 73 /* Injects an input event and optionally waits for sync. 74 * The synchronization mode determines whether the method blocks while waiting for 75 * input injection to proceed. 76 * Returns one of the INPUT_EVENT_INJECTION_XXX constants. 77 * 78 * This method may be called on any thread (usually by the input manager). 79 */ 80 virtual int32_t injectInputEvent(const InputEvent* event, int32_t injectorPid, 81 int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis, 82 uint32_t policyFlags) = 0; 83 84 /* Sets the list of input windows. 85 * 86 * This method may be called on any thread (usually by the input manager). 87 */ 88 virtual void setInputWindows( 89 const std::vector<sp<InputWindowHandle> >& inputWindowHandles, int32_t displayId, 90 const sp<ISetInputWindowsListener>& setInputWindowsListener = nullptr) = 0; 91 92 /* Sets the focused application on the given display. 93 * 94 * This method may be called on any thread (usually by the input manager). 95 */ 96 virtual void setFocusedApplication( 97 int32_t displayId, const sp<InputApplicationHandle>& inputApplicationHandle) = 0; 98 99 /* Sets the focused display. 100 * 101 * This method may be called on any thread (usually by the input manager). 102 */ 103 virtual void setFocusedDisplay(int32_t displayId) = 0; 104 105 /* Sets the input dispatching mode. 106 * 107 * This method may be called on any thread (usually by the input manager). 108 */ 109 virtual void setInputDispatchMode(bool enabled, bool frozen) = 0; 110 111 /* Sets whether input event filtering is enabled. 112 * When enabled, incoming input events are sent to the policy's filterInputEvent 113 * method instead of being dispatched. The filter is expected to use 114 * injectInputEvent to inject the events it would like to have dispatched. 115 * It should include POLICY_FLAG_FILTERED in the policy flags during injection. 116 */ 117 virtual void setInputFilterEnabled(bool enabled) = 0; 118 119 /* Transfers touch focus from one window to another window. 120 * 121 * Returns true on success. False if the window did not actually have touch focus. 122 */ 123 virtual bool transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) = 0; 124 125 /* Registers input channels that may be used as targets for input events. 126 * 127 * This method may be called on any thread (usually by the input manager). 128 */ 129 virtual status_t registerInputChannel(const sp<InputChannel>& inputChannel, 130 int32_t displayId) = 0; 131 132 /* Registers input channels to be used to monitor input events. 133 * 134 * Each monitor must target a specific display and will only receive input events sent to that 135 * display. If the monitor is a gesture monitor, it will only receive pointer events on the 136 * targeted display. 137 * 138 * This method may be called on any thread (usually by the input manager). 139 */ 140 virtual status_t registerInputMonitor(const sp<InputChannel>& inputChannel, int32_t displayId, 141 bool gestureMonitor) = 0; 142 143 /* Unregister input channels that will no longer receive input events. 144 * 145 * This method may be called on any thread (usually by the input manager). 146 */ 147 virtual status_t unregisterInputChannel(const sp<InputChannel>& inputChannel) = 0; 148 149 /* Allows an input monitor steal the current pointer stream away from normal input windows. 150 * 151 * This method may be called on any thread (usually by the input manager). 152 */ 153 virtual status_t pilferPointers(const sp<IBinder>& token) = 0; 154 }; 155 156 } // namespace android 157 158 #endif // _UI_INPUT_INPUTDISPATCHER_INPUTDISPATCHERINTERFACE_H 159