Loading services/java/com/android/server/WindowManagerService.java +44 −17 Original line number Diff line number Diff line Loading @@ -3845,7 +3845,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } Object targetObj = mKeyWaiter.waitForNextEventTarget(null, qev, ev, true, false); ev, true, false, pid, uid); if (MEASURE_LATENCY) { lt.sample("3 Last dispatch finished ", System.nanoTime() - qev.whenNano); Loading Loading @@ -4065,7 +4065,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo TAG, "dispatchTrackball [" + ev.getAction() +"] <" + ev.getX() + ", " + ev.getY() + ">"); Object focusObj = mKeyWaiter.waitForNextEventTarget(null, qev, ev, false, false); ev, false, false, pid, uid); if (focusObj == null) { Log.w(TAG, "No focus window, dropping trackball: " + ev); if (qev != null) { Loading Loading @@ -4136,7 +4136,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo if (DEBUG_INPUT) Log.v(TAG, "Dispatch key: " + event); Object focusObj = mKeyWaiter.waitForNextEventTarget(event, null, null, false, false); null, false, false, pid, uid); if (focusObj == null) { Log.w(TAG, "No focus window, dropping: " + event); return INJECT_FAILED; Loading Loading @@ -4253,10 +4253,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo KeyEvent newEvent = new KeyEvent(downTime, eventTime, action, code, repeatCount, metaState, deviceId, scancode, KeyEvent.FLAG_FROM_SYSTEM); int result = dispatchKey(newEvent, Binder.getCallingPid(), Binder.getCallingUid()); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); final int result = dispatchKey(newEvent, pid, uid); if (sync) { mKeyWaiter.waitForNextEventTarget(null, null, null, false, true); mKeyWaiter.waitForNextEventTarget(null, null, null, false, true, pid, uid); } Binder.restoreCallingIdentity(ident); switch (result) { case INJECT_NO_PERMISSION: throw new SecurityException( Loading @@ -4277,10 +4281,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo * @return Returns true if event was dispatched, false if it was dropped for any reason */ public boolean injectPointerEvent(MotionEvent ev, boolean sync) { int result = dispatchPointer(null, ev, Binder.getCallingPid(), Binder.getCallingUid()); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); final int result = dispatchPointer(null, ev, pid, uid); if (sync) { mKeyWaiter.waitForNextEventTarget(null, null, null, false, true); mKeyWaiter.waitForNextEventTarget(null, null, null, false, true, pid, uid); } Binder.restoreCallingIdentity(ident); switch (result) { case INJECT_NO_PERMISSION: throw new SecurityException( Loading @@ -4301,10 +4309,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo * @return Returns true if event was dispatched, false if it was dropped for any reason */ public boolean injectTrackballEvent(MotionEvent ev, boolean sync) { int result = dispatchTrackball(null, ev, Binder.getCallingPid(), Binder.getCallingUid()); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); final int result = dispatchTrackball(null, ev, pid, uid); if (sync) { mKeyWaiter.waitForNextEventTarget(null, null, null, false, true); mKeyWaiter.waitForNextEventTarget(null, null, null, false, true, pid, uid); } Binder.restoreCallingIdentity(ident); switch (result) { case INJECT_NO_PERMISSION: throw new SecurityException( Loading Loading @@ -4413,7 +4425,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo */ Object waitForNextEventTarget(KeyEvent nextKey, QueuedEvent qev, MotionEvent nextMotion, boolean isPointerEvent, boolean failIfTimeout) { boolean failIfTimeout, int callingPid, int callingUid) { long startTime = SystemClock.uptimeMillis(); long keyDispatchingTimeout = 5 * 1000; long waitedFor = 0; Loading @@ -4431,7 +4443,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo ", mLastWin=" + mLastWin); if (targetIsNew) { Object target = findTargetWindow(nextKey, qev, nextMotion, isPointerEvent); isPointerEvent, callingPid, callingUid); if (target == SKIP_TARGET_TOKEN) { // The user has pressed a special key, and we are // dropping all pending events before it. Loading Loading @@ -4607,7 +4619,8 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } Object findTargetWindow(KeyEvent nextKey, QueuedEvent qev, MotionEvent nextMotion, boolean isPointerEvent) { MotionEvent nextMotion, boolean isPointerEvent, int callingPid, int callingUid) { mOutsideTouchTargets = null; if (nextKey != null) { Loading @@ -4616,9 +4629,16 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo final int repeatCount = nextKey.getRepeatCount(); final boolean down = nextKey.getAction() != KeyEvent.ACTION_UP; boolean dispatch = mKeyWaiter.checkShouldDispatchKey(keycode); if (!dispatch) { if (callingUid == 0 || mContext.checkPermission( android.Manifest.permission.INJECT_EVENTS, callingPid, callingUid) == PackageManager.PERMISSION_GRANTED) { mPolicy.interceptKeyTi(null, keycode, nextKey.getMetaState(), down, repeatCount); } Log.w(TAG, "Event timeout during app switch: dropping " + nextKey); return SKIP_TARGET_TOKEN; Loading @@ -4633,10 +4653,17 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo wakeupIfNeeded(focus, LocalPowerManager.BUTTON_EVENT); if (callingUid == 0 || (focus != null && callingUid == focus.mSession.mUid) || mContext.checkPermission( android.Manifest.permission.INJECT_EVENTS, callingPid, callingUid) == PackageManager.PERMISSION_GRANTED) { if (mPolicy.interceptKeyTi(focus, keycode, nextKey.getMetaState(), down, repeatCount)) { return CONSUMED_EVENT_TOKEN; } } return focus; Loading Loading
services/java/com/android/server/WindowManagerService.java +44 −17 Original line number Diff line number Diff line Loading @@ -3845,7 +3845,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } Object targetObj = mKeyWaiter.waitForNextEventTarget(null, qev, ev, true, false); ev, true, false, pid, uid); if (MEASURE_LATENCY) { lt.sample("3 Last dispatch finished ", System.nanoTime() - qev.whenNano); Loading Loading @@ -4065,7 +4065,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo TAG, "dispatchTrackball [" + ev.getAction() +"] <" + ev.getX() + ", " + ev.getY() + ">"); Object focusObj = mKeyWaiter.waitForNextEventTarget(null, qev, ev, false, false); ev, false, false, pid, uid); if (focusObj == null) { Log.w(TAG, "No focus window, dropping trackball: " + ev); if (qev != null) { Loading Loading @@ -4136,7 +4136,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo if (DEBUG_INPUT) Log.v(TAG, "Dispatch key: " + event); Object focusObj = mKeyWaiter.waitForNextEventTarget(event, null, null, false, false); null, false, false, pid, uid); if (focusObj == null) { Log.w(TAG, "No focus window, dropping: " + event); return INJECT_FAILED; Loading Loading @@ -4253,10 +4253,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo KeyEvent newEvent = new KeyEvent(downTime, eventTime, action, code, repeatCount, metaState, deviceId, scancode, KeyEvent.FLAG_FROM_SYSTEM); int result = dispatchKey(newEvent, Binder.getCallingPid(), Binder.getCallingUid()); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); final int result = dispatchKey(newEvent, pid, uid); if (sync) { mKeyWaiter.waitForNextEventTarget(null, null, null, false, true); mKeyWaiter.waitForNextEventTarget(null, null, null, false, true, pid, uid); } Binder.restoreCallingIdentity(ident); switch (result) { case INJECT_NO_PERMISSION: throw new SecurityException( Loading @@ -4277,10 +4281,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo * @return Returns true if event was dispatched, false if it was dropped for any reason */ public boolean injectPointerEvent(MotionEvent ev, boolean sync) { int result = dispatchPointer(null, ev, Binder.getCallingPid(), Binder.getCallingUid()); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); final int result = dispatchPointer(null, ev, pid, uid); if (sync) { mKeyWaiter.waitForNextEventTarget(null, null, null, false, true); mKeyWaiter.waitForNextEventTarget(null, null, null, false, true, pid, uid); } Binder.restoreCallingIdentity(ident); switch (result) { case INJECT_NO_PERMISSION: throw new SecurityException( Loading @@ -4301,10 +4309,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo * @return Returns true if event was dispatched, false if it was dropped for any reason */ public boolean injectTrackballEvent(MotionEvent ev, boolean sync) { int result = dispatchTrackball(null, ev, Binder.getCallingPid(), Binder.getCallingUid()); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); final long ident = Binder.clearCallingIdentity(); final int result = dispatchTrackball(null, ev, pid, uid); if (sync) { mKeyWaiter.waitForNextEventTarget(null, null, null, false, true); mKeyWaiter.waitForNextEventTarget(null, null, null, false, true, pid, uid); } Binder.restoreCallingIdentity(ident); switch (result) { case INJECT_NO_PERMISSION: throw new SecurityException( Loading Loading @@ -4413,7 +4425,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo */ Object waitForNextEventTarget(KeyEvent nextKey, QueuedEvent qev, MotionEvent nextMotion, boolean isPointerEvent, boolean failIfTimeout) { boolean failIfTimeout, int callingPid, int callingUid) { long startTime = SystemClock.uptimeMillis(); long keyDispatchingTimeout = 5 * 1000; long waitedFor = 0; Loading @@ -4431,7 +4443,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo ", mLastWin=" + mLastWin); if (targetIsNew) { Object target = findTargetWindow(nextKey, qev, nextMotion, isPointerEvent); isPointerEvent, callingPid, callingUid); if (target == SKIP_TARGET_TOKEN) { // The user has pressed a special key, and we are // dropping all pending events before it. Loading Loading @@ -4607,7 +4619,8 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo } Object findTargetWindow(KeyEvent nextKey, QueuedEvent qev, MotionEvent nextMotion, boolean isPointerEvent) { MotionEvent nextMotion, boolean isPointerEvent, int callingPid, int callingUid) { mOutsideTouchTargets = null; if (nextKey != null) { Loading @@ -4616,9 +4629,16 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo final int repeatCount = nextKey.getRepeatCount(); final boolean down = nextKey.getAction() != KeyEvent.ACTION_UP; boolean dispatch = mKeyWaiter.checkShouldDispatchKey(keycode); if (!dispatch) { if (callingUid == 0 || mContext.checkPermission( android.Manifest.permission.INJECT_EVENTS, callingPid, callingUid) == PackageManager.PERMISSION_GRANTED) { mPolicy.interceptKeyTi(null, keycode, nextKey.getMetaState(), down, repeatCount); } Log.w(TAG, "Event timeout during app switch: dropping " + nextKey); return SKIP_TARGET_TOKEN; Loading @@ -4633,10 +4653,17 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo wakeupIfNeeded(focus, LocalPowerManager.BUTTON_EVENT); if (callingUid == 0 || (focus != null && callingUid == focus.mSession.mUid) || mContext.checkPermission( android.Manifest.permission.INJECT_EVENTS, callingPid, callingUid) == PackageManager.PERMISSION_GRANTED) { if (mPolicy.interceptKeyTi(focus, keycode, nextKey.getMetaState(), down, repeatCount)) { return CONSUMED_EVENT_TOKEN; } } return focus; Loading