Add new callback to customize input event handling

Bug: 63914027
Test: DragDropControllerTests
Change-Id: I7f606ffd7a803e7f884d236bbac9dc3be8da5de1
This commit is contained in:
Daichi Hirono
2018-02-01 10:59:48 +09:00
parent 76be79a7c9
commit 4a54517126
2 changed files with 13 additions and 4 deletions

View File

@@ -153,9 +153,9 @@ class DragDropController {
mDragState.mToken = dragToken;
final Display display = displayContent.getDisplay();
mDragState.register(display);
if (!mService.mInputManager.transferTouchFocus(callingWin.mInputChannel,
mDragState.getInputChannel())) {
if (!mCallback.get().registerInputChannel(
mDragState, display, mService.mInputManager,
callingWin.mInputChannel)) {
Slog.e(TAG_WM, "Unable to transfer touch focus");
return null;
}

View File

@@ -23,12 +23,14 @@ import android.graphics.Rect;
import android.graphics.Region;
import android.hardware.display.DisplayManagerInternal;
import android.os.IBinder;
import android.view.Display;
import android.view.IInputFilter;
import android.view.IWindow;
import android.view.InputChannel;
import android.view.MagnificationSpec;
import android.view.WindowInfo;
import android.view.animation.Animation;
import com.android.server.input.InputManagerService;
import com.android.server.policy.WindowManagerPolicy;
import java.util.List;
@@ -153,6 +155,13 @@ public abstract class WindowManagerInternal {
* An interface to customize drag and drop behaviors.
*/
public interface IDragDropCallback {
default boolean registerInputChannel(
DragState state, Display display, InputManagerService service,
InputChannel source) {
state.register(display);
return service.transferTouchFocus(source, state.getInputChannel());
}
/**
* Called when drag operation is starting.
*/