Merge "InputManager: Expose pilferPointers API" into tm-qpr-dev

This commit is contained in:
Prabir Pradhan
2022-11-15 17:47:30 +00:00
committed by Android (Google) Code Review
3 changed files with 42 additions and 0 deletions

View File

@@ -160,4 +160,9 @@ interface IInputManager {
void registerBatteryListener(int deviceId, IInputDeviceBatteryListener listener);
void unregisterBatteryListener(int deviceId, IInputDeviceBatteryListener listener);
@EnforcePermission("MONITOR_INPUT")
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = "
+ "android.Manifest.permission.MONITOR_INPUT)")
void pilferPointers(IBinder inputChannelToken);
}

View File

@@ -1818,6 +1818,34 @@ public final class InputManager {
}
}
/**
* Pilfer pointers from an input channel.
*
* Takes all the current pointer event streams that are currently being sent to the given
* input channel and generates appropriate cancellations for all other windows that are
* receiving these pointers.
*
* This API is intended to be used in conjunction with spy windows. When a spy window pilfers
* pointers, the foreground windows and all other spy windows that are receiving any of the
* pointers that are currently being dispatched to the pilfering window will have those pointers
* canceled. Only the pilfering window will continue to receive events for the affected pointers
* until the pointer is lifted.
*
* This method should be used with caution as unexpected pilfering can break fundamental user
* interactions.
*
* @see android.os.InputConfig#SPY
* @hide
*/
@RequiresPermission(Manifest.permission.MONITOR_INPUT)
public void pilferPointers(IBinder inputChannelToken) {
try {
mIm.pilferPointers(inputChannelToken);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* Removes a previously registered battery listener for an input device.
* @see #addInputDeviceBatteryListener(int, Executor, InputDeviceBatteryListener)

View File

@@ -18,6 +18,8 @@ package com.android.server.input;
import static android.view.KeyEvent.KEYCODE_UNKNOWN;
import android.Manifest;
import android.annotation.EnforcePermission;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManagerInternal;
@@ -2678,6 +2680,13 @@ public class InputManagerService extends IInputManager.Stub
mNative.cancelCurrentTouch();
}
@EnforcePermission(Manifest.permission.MONITOR_INPUT)
@Override
public void pilferPointers(IBinder inputChannelToken) {
Objects.requireNonNull(inputChannelToken);
mNative.pilferPointers(inputChannelToken);
}
@Override
public void registerBatteryListener(int deviceId, IInputDeviceBatteryListener listener) {
Objects.requireNonNull(listener);