Move device specific logic to VirtualInputDevice and its subclasses.

Only keep virtual input device setup code and move device specific logic
to VirtualInputDevice and its subclasses. The benefits are threefold:

1) Better encapsulation: we used to have all input event injection logic
   in inputController JNI code, it's hard to tell the capability of each
   device type. For example, writeKeyEvent() doesn't have any indication
   of which device it's writing into. If a fd representing a mouse is
   passed in then the key event might be written to a mouse device.

2) No need to manually close the file descripters. We can now depend on
   the destructor of unique_fd.

3) We can get rid of the errorprone static map introduced in ag/21078609
   which keeps record of active pointers on touchscreen.

Test: atest VirtualInputTest VirtualMouseTest VirtualKeyboardTest
VirtualTouchscreenTest VirtualDpadTest InputControllerTest

Bug: 267515782

Change-Id: Ic5f246544172a431090f427457265bbf8d63bd70
Merged-In: Ic5f246544172a431090f427457265bbf8d63bd70
3 files changed