• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 package com.android.server.input;
18 
19 import android.content.Context;
20 import android.hardware.display.DisplayViewport;
21 import android.hardware.input.InputSensorInfo;
22 import android.hardware.lights.Light;
23 import android.os.IBinder;
24 import android.os.MessageQueue;
25 import android.util.SparseArray;
26 import android.view.InputApplicationHandle;
27 import android.view.InputChannel;
28 import android.view.InputEvent;
29 import android.view.PointerIcon;
30 import android.view.VerifiedInputEvent;
31 
32 import com.android.internal.annotations.VisibleForTesting;
33 
34 import java.util.List;
35 
36 /**
37  * An interface for the native methods of InputManagerService. We use a public interface so that
38  * this can be mocked for testing by Mockito.
39  */
40 @VisibleForTesting
41 public interface NativeInputManagerService {
42 
start()43     void start();
44 
setDisplayViewports(DisplayViewport[] viewports)45     void setDisplayViewports(DisplayViewport[] viewports);
46 
getScanCodeState(int deviceId, int sourceMask, int scanCode)47     int getScanCodeState(int deviceId, int sourceMask, int scanCode);
48 
getKeyCodeState(int deviceId, int sourceMask, int keyCode)49     int getKeyCodeState(int deviceId, int sourceMask, int keyCode);
50 
getSwitchState(int deviceId, int sourceMask, int sw)51     int getSwitchState(int deviceId, int sourceMask, int sw);
52 
hasKeys(int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists)53     boolean hasKeys(int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists);
54 
getKeyCodeForKeyLocation(int deviceId, int locationKeyCode)55     int getKeyCodeForKeyLocation(int deviceId, int locationKeyCode);
56 
createInputChannel(String name)57     InputChannel createInputChannel(String name);
58 
createInputMonitor(int displayId, String name, int pid)59     InputChannel createInputMonitor(int displayId, String name, int pid);
60 
removeInputChannel(IBinder connectionToken)61     void removeInputChannel(IBinder connectionToken);
62 
pilferPointers(IBinder token)63     void pilferPointers(IBinder token);
64 
setInputFilterEnabled(boolean enable)65     void setInputFilterEnabled(boolean enable);
66 
setInTouchMode(boolean inTouchMode, int pid, int uid, boolean hasPermission)67     boolean setInTouchMode(boolean inTouchMode, int pid, int uid, boolean hasPermission);
68 
setMaximumObscuringOpacityForTouch(float opacity)69     void setMaximumObscuringOpacityForTouch(float opacity);
70 
setBlockUntrustedTouchesMode(int mode)71     void setBlockUntrustedTouchesMode(int mode);
72 
73     /**
74      * Inject an input event into the system.
75      *
76      * @param event         the input event to inject
77      * @param injectIntoUid true if the event should target windows owned by uid, false otherwise
78      * @param uid           the uid whose windows should be targeted, if any
79      * @param syncMode      {@link android.os.InputEventInjectionSync}
80      * @param timeoutMillis timeout to wait for input injection to complete, in milliseconds
81      * @param policyFlags   defined in {@link android.view.WindowManagerPolicyConstants}
82      * @return {@link android.os.InputEventInjectionResult}
83      */
injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, int syncMode, int timeoutMillis, int policyFlags)84     int injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, int syncMode,
85             int timeoutMillis, int policyFlags);
86 
verifyInputEvent(InputEvent event)87     VerifiedInputEvent verifyInputEvent(InputEvent event);
88 
toggleCapsLock(int deviceId)89     void toggleCapsLock(int deviceId);
90 
displayRemoved(int displayId)91     void displayRemoved(int displayId);
92 
setInputDispatchMode(boolean enabled, boolean frozen)93     void setInputDispatchMode(boolean enabled, boolean frozen);
94 
setSystemUiLightsOut(boolean lightsOut)95     void setSystemUiLightsOut(boolean lightsOut);
96 
setFocusedApplication(int displayId, InputApplicationHandle application)97     void setFocusedApplication(int displayId, InputApplicationHandle application);
98 
setFocusedDisplay(int displayId)99     void setFocusedDisplay(int displayId);
100 
transferTouchFocus(IBinder fromChannelToken, IBinder toChannelToken, boolean isDragDrop)101     boolean transferTouchFocus(IBinder fromChannelToken, IBinder toChannelToken,
102             boolean isDragDrop);
103 
104     /**
105      * Transfer the current touch gesture to the window identified by 'destChannelToken' positioned
106      * on display with id 'displayId'.
107      */
transferTouch(IBinder destChannelToken, int displayId)108     boolean transferTouch(IBinder destChannelToken, int displayId);
109 
setPointerSpeed(int speed)110     void setPointerSpeed(int speed);
111 
setPointerAcceleration(float acceleration)112     void setPointerAcceleration(float acceleration);
113 
setShowTouches(boolean enabled)114     void setShowTouches(boolean enabled);
115 
setInteractive(boolean interactive)116     void setInteractive(boolean interactive);
117 
reloadCalibration()118     void reloadCalibration();
119 
vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, int token)120     void vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, int token);
121 
vibrateCombined(int deviceId, long[] pattern, SparseArray<int[]> amplitudes, int repeat, int token)122     void vibrateCombined(int deviceId, long[] pattern, SparseArray<int[]> amplitudes,
123             int repeat, int token);
124 
cancelVibrate(int deviceId, int token)125     void cancelVibrate(int deviceId, int token);
126 
isVibrating(int deviceId)127     boolean isVibrating(int deviceId);
128 
getVibratorIds(int deviceId)129     int[] getVibratorIds(int deviceId);
130 
getBatteryCapacity(int deviceId)131     int getBatteryCapacity(int deviceId);
132 
getBatteryStatus(int deviceId)133     int getBatteryStatus(int deviceId);
134 
getLights(int deviceId)135     List<Light> getLights(int deviceId);
136 
getLightPlayerId(int deviceId, int lightId)137     int getLightPlayerId(int deviceId, int lightId);
138 
getLightColor(int deviceId, int lightId)139     int getLightColor(int deviceId, int lightId);
140 
setLightPlayerId(int deviceId, int lightId, int playerId)141     void setLightPlayerId(int deviceId, int lightId, int playerId);
142 
setLightColor(int deviceId, int lightId, int color)143     void setLightColor(int deviceId, int lightId, int color);
144 
reloadKeyboardLayouts()145     void reloadKeyboardLayouts();
146 
reloadDeviceAliases()147     void reloadDeviceAliases();
148 
dump()149     String dump();
150 
monitor()151     void monitor();
152 
isInputDeviceEnabled(int deviceId)153     boolean isInputDeviceEnabled(int deviceId);
154 
enableInputDevice(int deviceId)155     void enableInputDevice(int deviceId);
156 
disableInputDevice(int deviceId)157     void disableInputDevice(int deviceId);
158 
setPointerIconType(int iconId)159     void setPointerIconType(int iconId);
160 
reloadPointerIcons()161     void reloadPointerIcons();
162 
setCustomPointerIcon(PointerIcon icon)163     void setCustomPointerIcon(PointerIcon icon);
164 
requestPointerCapture(IBinder windowToken, boolean enabled)165     void requestPointerCapture(IBinder windowToken, boolean enabled);
166 
canDispatchToDisplay(int deviceId, int displayId)167     boolean canDispatchToDisplay(int deviceId, int displayId);
168 
notifyPortAssociationsChanged()169     void notifyPortAssociationsChanged();
170 
changeUniqueIdAssociation()171     void changeUniqueIdAssociation();
172 
notifyPointerDisplayIdChanged()173     void notifyPointerDisplayIdChanged();
174 
setDisplayEligibilityForPointerCapture(int displayId, boolean enabled)175     void setDisplayEligibilityForPointerCapture(int displayId, boolean enabled);
176 
setMotionClassifierEnabled(boolean enabled)177     void setMotionClassifierEnabled(boolean enabled);
178 
getSensorList(int deviceId)179     InputSensorInfo[] getSensorList(int deviceId);
180 
flushSensor(int deviceId, int sensorType)181     boolean flushSensor(int deviceId, int sensorType);
182 
enableSensor(int deviceId, int sensorType, int samplingPeriodUs, int maxBatchReportLatencyUs)183     boolean enableSensor(int deviceId, int sensorType, int samplingPeriodUs,
184             int maxBatchReportLatencyUs);
185 
disableSensor(int deviceId, int sensorType)186     void disableSensor(int deviceId, int sensorType);
187 
cancelCurrentTouch()188     void cancelCurrentTouch();
189 
190     /** Set the displayId on which the mouse cursor should be shown. */
setPointerDisplayId(int displayId)191     void setPointerDisplayId(int displayId);
192 
193     /** The native implementation of InputManagerService methods. */
194     class NativeImpl implements NativeInputManagerService {
195         /** Pointer to native input manager service object, used by native code. */
196         @SuppressWarnings({"unused", "FieldCanBeLocal"})
197         private final long mPtr;
198 
NativeImpl(InputManagerService service, Context context, MessageQueue messageQueue)199         NativeImpl(InputManagerService service, Context context, MessageQueue messageQueue) {
200             mPtr = init(service, context, messageQueue);
201         }
202 
init(InputManagerService service, Context context, MessageQueue messageQueue)203         private native long init(InputManagerService service, Context context,
204                 MessageQueue messageQueue);
205 
206         @Override
start()207         public native void start();
208 
209         @Override
setDisplayViewports(DisplayViewport[] viewports)210         public native void setDisplayViewports(DisplayViewport[] viewports);
211 
212         @Override
getScanCodeState(int deviceId, int sourceMask, int scanCode)213         public native int getScanCodeState(int deviceId, int sourceMask, int scanCode);
214 
215         @Override
getKeyCodeState(int deviceId, int sourceMask, int keyCode)216         public native int getKeyCodeState(int deviceId, int sourceMask, int keyCode);
217 
218         @Override
getSwitchState(int deviceId, int sourceMask, int sw)219         public native int getSwitchState(int deviceId, int sourceMask, int sw);
220 
221         @Override
hasKeys(int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists)222         public native boolean hasKeys(int deviceId, int sourceMask, int[] keyCodes,
223                 boolean[] keyExists);
224 
225         @Override
getKeyCodeForKeyLocation(int deviceId, int locationKeyCode)226         public native int getKeyCodeForKeyLocation(int deviceId, int locationKeyCode);
227 
228         @Override
createInputChannel(String name)229         public native InputChannel createInputChannel(String name);
230 
231         @Override
createInputMonitor(int displayId, String name, int pid)232         public native InputChannel createInputMonitor(int displayId, String name, int pid);
233 
234         @Override
removeInputChannel(IBinder connectionToken)235         public native void removeInputChannel(IBinder connectionToken);
236 
237         @Override
pilferPointers(IBinder token)238         public native void pilferPointers(IBinder token);
239 
240         @Override
setInputFilterEnabled(boolean enable)241         public native void setInputFilterEnabled(boolean enable);
242 
243         @Override
setInTouchMode(boolean inTouchMode, int pid, int uid, boolean hasPermission)244         public native boolean setInTouchMode(boolean inTouchMode, int pid, int uid,
245                 boolean hasPermission);
246 
247         @Override
setMaximumObscuringOpacityForTouch(float opacity)248         public native void setMaximumObscuringOpacityForTouch(float opacity);
249 
250         @Override
setBlockUntrustedTouchesMode(int mode)251         public native void setBlockUntrustedTouchesMode(int mode);
252 
253         @Override
injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, int syncMode, int timeoutMillis, int policyFlags)254         public native int injectInputEvent(InputEvent event, boolean injectIntoUid, int uid,
255                 int syncMode,
256                 int timeoutMillis, int policyFlags);
257 
258         @Override
verifyInputEvent(InputEvent event)259         public native VerifiedInputEvent verifyInputEvent(InputEvent event);
260 
261         @Override
toggleCapsLock(int deviceId)262         public native void toggleCapsLock(int deviceId);
263 
264         @Override
displayRemoved(int displayId)265         public native void displayRemoved(int displayId);
266 
267         @Override
setInputDispatchMode(boolean enabled, boolean frozen)268         public native void setInputDispatchMode(boolean enabled, boolean frozen);
269 
270         @Override
setSystemUiLightsOut(boolean lightsOut)271         public native void setSystemUiLightsOut(boolean lightsOut);
272 
273         @Override
setFocusedApplication(int displayId, InputApplicationHandle application)274         public native void setFocusedApplication(int displayId, InputApplicationHandle application);
275 
276         @Override
setFocusedDisplay(int displayId)277         public native void setFocusedDisplay(int displayId);
278 
279         @Override
transferTouchFocus(IBinder fromChannelToken, IBinder toChannelToken, boolean isDragDrop)280         public native boolean transferTouchFocus(IBinder fromChannelToken, IBinder toChannelToken,
281                 boolean isDragDrop);
282 
283         @Override
transferTouch(IBinder destChannelToken, int displayId)284         public native boolean transferTouch(IBinder destChannelToken, int displayId);
285 
286         @Override
setPointerSpeed(int speed)287         public native void setPointerSpeed(int speed);
288 
289         @Override
setPointerAcceleration(float acceleration)290         public native void setPointerAcceleration(float acceleration);
291 
292         @Override
setShowTouches(boolean enabled)293         public native void setShowTouches(boolean enabled);
294 
295         @Override
setInteractive(boolean interactive)296         public native void setInteractive(boolean interactive);
297 
298         @Override
reloadCalibration()299         public native void reloadCalibration();
300 
301         @Override
vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, int token)302         public native void vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat,
303                 int token);
304 
305         @Override
vibrateCombined(int deviceId, long[] pattern, SparseArray<int[]> amplitudes, int repeat, int token)306         public native void vibrateCombined(int deviceId, long[] pattern,
307                 SparseArray<int[]> amplitudes,
308                 int repeat, int token);
309 
310         @Override
cancelVibrate(int deviceId, int token)311         public native void cancelVibrate(int deviceId, int token);
312 
313         @Override
isVibrating(int deviceId)314         public native boolean isVibrating(int deviceId);
315 
316         @Override
getVibratorIds(int deviceId)317         public native int[] getVibratorIds(int deviceId);
318 
319         @Override
getBatteryCapacity(int deviceId)320         public native int getBatteryCapacity(int deviceId);
321 
322         @Override
getBatteryStatus(int deviceId)323         public native int getBatteryStatus(int deviceId);
324 
325         @Override
getLights(int deviceId)326         public native List<Light> getLights(int deviceId);
327 
328         @Override
getLightPlayerId(int deviceId, int lightId)329         public native int getLightPlayerId(int deviceId, int lightId);
330 
331         @Override
getLightColor(int deviceId, int lightId)332         public native int getLightColor(int deviceId, int lightId);
333 
334         @Override
setLightPlayerId(int deviceId, int lightId, int playerId)335         public native void setLightPlayerId(int deviceId, int lightId, int playerId);
336 
337         @Override
setLightColor(int deviceId, int lightId, int color)338         public native void setLightColor(int deviceId, int lightId, int color);
339 
340         @Override
reloadKeyboardLayouts()341         public native void reloadKeyboardLayouts();
342 
343         @Override
reloadDeviceAliases()344         public native void reloadDeviceAliases();
345 
346         @Override
dump()347         public native String dump();
348 
349         @Override
monitor()350         public native void monitor();
351 
352         @Override
isInputDeviceEnabled(int deviceId)353         public native boolean isInputDeviceEnabled(int deviceId);
354 
355         @Override
enableInputDevice(int deviceId)356         public native void enableInputDevice(int deviceId);
357 
358         @Override
disableInputDevice(int deviceId)359         public native void disableInputDevice(int deviceId);
360 
361         @Override
setPointerIconType(int iconId)362         public native void setPointerIconType(int iconId);
363 
364         @Override
reloadPointerIcons()365         public native void reloadPointerIcons();
366 
367         @Override
setCustomPointerIcon(PointerIcon icon)368         public native void setCustomPointerIcon(PointerIcon icon);
369 
370         @Override
requestPointerCapture(IBinder windowToken, boolean enabled)371         public native void requestPointerCapture(IBinder windowToken, boolean enabled);
372 
373         @Override
canDispatchToDisplay(int deviceId, int displayId)374         public native boolean canDispatchToDisplay(int deviceId, int displayId);
375 
376         @Override
notifyPortAssociationsChanged()377         public native void notifyPortAssociationsChanged();
378 
379         @Override
changeUniqueIdAssociation()380         public native void changeUniqueIdAssociation();
381 
382         @Override
notifyPointerDisplayIdChanged()383         public native void notifyPointerDisplayIdChanged();
384 
385         @Override
setDisplayEligibilityForPointerCapture(int displayId, boolean enabled)386         public native void setDisplayEligibilityForPointerCapture(int displayId, boolean enabled);
387 
388         @Override
setMotionClassifierEnabled(boolean enabled)389         public native void setMotionClassifierEnabled(boolean enabled);
390 
391         @Override
getSensorList(int deviceId)392         public native InputSensorInfo[] getSensorList(int deviceId);
393 
394         @Override
flushSensor(int deviceId, int sensorType)395         public native boolean flushSensor(int deviceId, int sensorType);
396 
397         @Override
enableSensor(int deviceId, int sensorType, int samplingPeriodUs, int maxBatchReportLatencyUs)398         public native boolean enableSensor(int deviceId, int sensorType, int samplingPeriodUs,
399                 int maxBatchReportLatencyUs);
400 
401         @Override
disableSensor(int deviceId, int sensorType)402         public native void disableSensor(int deviceId, int sensorType);
403 
404         @Override
cancelCurrentTouch()405         public native void cancelCurrentTouch();
406 
407         @Override
setPointerDisplayId(int displayId)408         public native void setPointerDisplayId(int displayId);
409     }
410 }
411