Merge "Pass BTN_GEAR_DOWN and BTN_GEAR_UP to apps" into rvc-dev

This commit is contained in:
TreeHugger Robot 2020-05-16 01:13:57 +00:00 committed by Android (Google) Code Review
commit 692c65bfb6
5 changed files with 37 additions and 2 deletions

View file

@ -1318,7 +1318,7 @@ status_t EventHub::openDeviceLocked(const char* devicePath) {
// joystick and gamepad buttons which are handled like keyboards for the most part.
bool haveKeyboardKeys =
containsNonZeroByte(device->keyBitmask, 0, sizeof_bit_array(BTN_MISC)) ||
containsNonZeroByte(device->keyBitmask, sizeof_bit_array(KEY_OK),
containsNonZeroByte(device->keyBitmask, sizeof_bit_array(BTN_WHEEL),
sizeof_bit_array(KEY_MAX + 1));
bool haveGamepadButtons = containsNonZeroByte(device->keyBitmask, sizeof_bit_array(BTN_MISC),
sizeof_bit_array(BTN_MOUSE)) ||

View file

@ -233,7 +233,7 @@ void KeyboardInputMapper::process(const RawEvent* rawEvent) {
}
bool KeyboardInputMapper::isKeyboardOrGamepadKey(int32_t scanCode) {
return scanCode < BTN_MOUSE || scanCode >= KEY_OK ||
return scanCode < BTN_MOUSE || scanCode >= BTN_WHEEL ||
(scanCode >= BTN_MISC && scanCode < BTN_MOUSE) ||
(scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI);
}

View file

@ -1848,6 +1848,28 @@ TEST_F(InputReaderIntegrationTest, SendsEventsToInputListener) {
ASSERT_LE(prevTimestamp, keyArgs.eventTime);
}
/**
* The Steam controller sends BTN_GEAR_DOWN and BTN_GEAR_UP for the two "paddle" buttons
* on the back. In this test, we make sure that BTN_GEAR_DOWN / BTN_WHEEL and BTN_GEAR_UP
* are passed to the listener.
*/
static_assert(BTN_GEAR_DOWN == BTN_WHEEL);
TEST_F(InputReaderIntegrationTest, SendsGearDownAndUpToInputListener) {
std::unique_ptr<UinputSteamController> controller = createUinputDevice<UinputSteamController>();
ASSERT_NO_FATAL_FAILURE(mFakePolicy->assertInputDevicesChanged());
NotifyKeyArgs keyArgs;
controller->pressAndReleaseKey(BTN_GEAR_DOWN);
ASSERT_NO_FATAL_FAILURE(mTestListener->assertNotifyKeyWasCalled(&keyArgs)); // ACTION_DOWN
ASSERT_NO_FATAL_FAILURE(mTestListener->assertNotifyKeyWasCalled(&keyArgs)); // ACTION_UP
ASSERT_EQ(BTN_GEAR_DOWN, keyArgs.scanCode);
controller->pressAndReleaseKey(BTN_GEAR_UP);
ASSERT_NO_FATAL_FAILURE(mTestListener->assertNotifyKeyWasCalled(&keyArgs)); // ACTION_DOWN
ASSERT_NO_FATAL_FAILURE(mTestListener->assertNotifyKeyWasCalled(&keyArgs)); // ACTION_UP
ASSERT_EQ(BTN_GEAR_UP, keyArgs.scanCode);
}
// --- TouchProcessTest ---
class TouchIntegrationTest : public InputReaderIntegrationTest {
protected:

View file

@ -125,6 +125,9 @@ void UinputHomeKey::pressAndReleaseHomeKey() {
pressAndReleaseKey(KEY_HOME);
}
// --- UinputSteamController
UinputSteamController::UinputSteamController() : UinputKeyboard({BTN_GEAR_DOWN, BTN_GEAR_UP}) {}
// --- UinputTouchScreen ---
UinputTouchScreen::UinputTouchScreen(const Rect* size)
: UinputDevice(UinputTouchScreen::DEVICE_NAME), mSize(*size) {}

View file

@ -108,6 +108,16 @@ private:
UinputHomeKey();
};
// A joystick device that sends a BTN_GEAR_DOWN / BTN_WHEEL key.
class UinputSteamController : public UinputKeyboard {
public:
template <class D, class... Ts>
friend std::unique_ptr<D> createUinputDevice(Ts... args);
private:
UinputSteamController();
};
// --- UinputTouchScreen ---
// A touch screen device with specific size.
class UinputTouchScreen : public UinputDevice {