Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e2ffbb0 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou Committed by Android Build Coastguard Worker
Browse files

Revert "InputMapper refactor: Configure empty InputDevice"

Revert submission 23316821

Reason for revert: breaks touch on some devices b/284203485

Reverted changes: /q/submissionid:23316821
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c96ed759fb428c7b982c921611e5da05040e3cea)
Merged-In: Id957e51b53e48b874302b24b612554f3024aa87b
Change-Id: Id957e51b53e48b874302b24b612554f3024aa87b
parent 3fd805e8
Loading
Loading
Loading
Loading
+30 −31
Original line number Original line Diff line number Diff line
@@ -151,22 +151,21 @@ void InputDevice::addEmptyEventHubDevice(int32_t eventHubId) {
        return;
        return;
    }
    }
    std::unique_ptr<InputDeviceContext> contextPtr(new InputDeviceContext(*this, eventHubId));
    std::unique_ptr<InputDeviceContext> contextPtr(new InputDeviceContext(*this, eventHubId));
    mDevices.insert(
    std::vector<std::unique_ptr<InputMapper>> mappers;
            {eventHubId,

             std::make_pair<std::unique_ptr<InputDeviceContext>,
    mDevices.insert({eventHubId, std::make_pair(std::move(contextPtr), std::move(mappers))});
                            std::vector<std::unique_ptr<InputMapper>>>(std::move(contextPtr), {})});
}
}


void InputDevice::populateMappers(int32_t eventHubId,
void InputDevice::addEventHubDevice(int32_t eventHubId,
                                    const InputReaderConfiguration& readerConfig) {
                                    const InputReaderConfiguration& readerConfig) {
    auto targetDevice = mDevices.find(eventHubId);
    if (mDevices.find(eventHubId) != mDevices.end()) {
    LOG_ALWAYS_FATAL_IF(targetDevice == mDevices.end(),
        return;
                        "InputDevice::populateMappers(): missing device with eventHubId %d ",
    }
                        eventHubId);
    std::unique_ptr<InputDeviceContext> contextPtr(new InputDeviceContext(*this, eventHubId));
    // create and add mappers to device
    std::vector<std::unique_ptr<InputMapper>> mappers = createMappers(*contextPtr, readerConfig);
    InputDeviceContext& context = *targetDevice->second.first;

    std::vector<std::unique_ptr<InputMapper>> mappers = createMappers(context, readerConfig);
    // insert the context into the devices set
    targetDevice->second.second = std::move(mappers);
    mDevices.insert({eventHubId, std::make_pair(std::move(contextPtr), std::move(mappers))});
    // Must change generation to flag this device as changed
    // Must change generation to flag this device as changed
    bumpGeneration();
    bumpGeneration();
}
}
@@ -441,29 +440,29 @@ int32_t InputDevice::getState(uint32_t sourceMask, int32_t code, GetStateFunc ge
}
}


std::vector<std::unique_ptr<InputMapper>> InputDevice::createMappers(
std::vector<std::unique_ptr<InputMapper>> InputDevice::createMappers(
        InputDeviceContext& context, const InputReaderConfiguration& readerConfig) {
        InputDeviceContext& contextPtr, const InputReaderConfiguration& readerConfig) {
    ftl::Flags<InputDeviceClass> classes = context.getDeviceClasses();
    ftl::Flags<InputDeviceClass> classes = contextPtr.getDeviceClasses();
    std::vector<std::unique_ptr<InputMapper>> mappers;
    std::vector<std::unique_ptr<InputMapper>> mappers;


    // Switch-like devices.
    // Switch-like devices.
    if (classes.test(InputDeviceClass::SWITCH)) {
    if (classes.test(InputDeviceClass::SWITCH)) {
        mappers.push_back(createInputMapper<SwitchInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<SwitchInputMapper>(contextPtr, readerConfig));
    }
    }


    // Scroll wheel-like devices.
    // Scroll wheel-like devices.
    if (classes.test(InputDeviceClass::ROTARY_ENCODER)) {
    if (classes.test(InputDeviceClass::ROTARY_ENCODER)) {
        mappers.push_back(createInputMapper<RotaryEncoderInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<RotaryEncoderInputMapper>(contextPtr, readerConfig));
    }
    }


    // Vibrator-like devices.
    // Vibrator-like devices.
    if (classes.test(InputDeviceClass::VIBRATOR)) {
    if (classes.test(InputDeviceClass::VIBRATOR)) {
        mappers.push_back(createInputMapper<VibratorInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<VibratorInputMapper>(contextPtr, readerConfig));
    }
    }


    // Battery-like devices or light-containing devices.
    // Battery-like devices or light-containing devices.
    // PeripheralController will be created with associated EventHub device.
    // PeripheralController will be created with associated EventHub device.
    if (classes.test(InputDeviceClass::BATTERY) || classes.test(InputDeviceClass::LIGHT)) {
    if (classes.test(InputDeviceClass::BATTERY) || classes.test(InputDeviceClass::LIGHT)) {
        mController = std::make_unique<PeripheralController>(context);
        mController = std::make_unique<PeripheralController>(contextPtr);
    }
    }


    // Keyboard-like devices.
    // Keyboard-like devices.
@@ -483,13 +482,13 @@ std::vector<std::unique_ptr<InputMapper>> InputDevice::createMappers(
    }
    }


    if (keyboardSource != 0) {
    if (keyboardSource != 0) {
        mappers.push_back(createInputMapper<KeyboardInputMapper>(context, readerConfig,
        mappers.push_back(createInputMapper<KeyboardInputMapper>(contextPtr, readerConfig,
                                                                 keyboardSource, keyboardType));
                                                                 keyboardSource, keyboardType));
    }
    }


    // Cursor-like devices.
    // Cursor-like devices.
    if (classes.test(InputDeviceClass::CURSOR)) {
    if (classes.test(InputDeviceClass::CURSOR)) {
        mappers.push_back(createInputMapper<CursorInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<CursorInputMapper>(contextPtr, readerConfig));
    }
    }


    // Touchscreens and touchpad devices.
    // Touchscreens and touchpad devices.
@@ -497,31 +496,31 @@ std::vector<std::unique_ptr<InputMapper>> InputDevice::createMappers(
            sysprop::InputProperties::enable_touchpad_gestures_library().value_or(true);
            sysprop::InputProperties::enable_touchpad_gestures_library().value_or(true);
    // TODO(b/272518665): Fix the new touchpad stack for Sony DualShock 4 (5c4, 9cc) touchpads, or
    // TODO(b/272518665): Fix the new touchpad stack for Sony DualShock 4 (5c4, 9cc) touchpads, or
    // at least load this setting from the IDC file.
    // at least load this setting from the IDC file.
    const InputDeviceIdentifier identifier = context.getDeviceIdentifier();
    const InputDeviceIdentifier identifier = contextPtr.getDeviceIdentifier();
    const bool isSonyDualShock4Touchpad = identifier.vendor == 0x054c &&
    const bool isSonyDualShock4Touchpad = identifier.vendor == 0x054c &&
            (identifier.product == 0x05c4 || identifier.product == 0x09cc);
            (identifier.product == 0x05c4 || identifier.product == 0x09cc);
    if (ENABLE_TOUCHPAD_GESTURES_LIBRARY && classes.test(InputDeviceClass::TOUCHPAD) &&
    if (ENABLE_TOUCHPAD_GESTURES_LIBRARY && classes.test(InputDeviceClass::TOUCHPAD) &&
        classes.test(InputDeviceClass::TOUCH_MT) && !isSonyDualShock4Touchpad) {
        classes.test(InputDeviceClass::TOUCH_MT) && !isSonyDualShock4Touchpad) {
        mappers.push_back(createInputMapper<TouchpadInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<TouchpadInputMapper>(contextPtr, readerConfig));
    } else if (classes.test(InputDeviceClass::TOUCH_MT)) {
    } else if (classes.test(InputDeviceClass::TOUCH_MT)) {
        mappers.push_back(std::make_unique<MultiTouchInputMapper>(context, readerConfig));
        mappers.push_back(std::make_unique<MultiTouchInputMapper>(contextPtr, readerConfig));
    } else if (classes.test(InputDeviceClass::TOUCH)) {
    } else if (classes.test(InputDeviceClass::TOUCH)) {
        mappers.push_back(std::make_unique<SingleTouchInputMapper>(context, readerConfig));
        mappers.push_back(std::make_unique<SingleTouchInputMapper>(contextPtr, readerConfig));
    }
    }


    // Joystick-like devices.
    // Joystick-like devices.
    if (classes.test(InputDeviceClass::JOYSTICK)) {
    if (classes.test(InputDeviceClass::JOYSTICK)) {
        mappers.push_back(createInputMapper<JoystickInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<JoystickInputMapper>(contextPtr, readerConfig));
    }
    }


    // Motion sensor enabled devices.
    // Motion sensor enabled devices.
    if (classes.test(InputDeviceClass::SENSOR)) {
    if (classes.test(InputDeviceClass::SENSOR)) {
        mappers.push_back(createInputMapper<SensorInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<SensorInputMapper>(contextPtr, readerConfig));
    }
    }


    // External stylus-like devices.
    // External stylus-like devices.
    if (classes.test(InputDeviceClass::EXTERNAL_STYLUS)) {
    if (classes.test(InputDeviceClass::EXTERNAL_STYLUS)) {
        mappers.push_back(createInputMapper<ExternalStylusInputMapper>(context, readerConfig));
        mappers.push_back(createInputMapper<ExternalStylusInputMapper>(contextPtr, readerConfig));
    }
    }
    return mappers;
    return mappers;
}
}
+1 −3
Original line number Original line Diff line number Diff line
@@ -334,9 +334,7 @@ std::shared_ptr<InputDevice> InputReader::createDeviceLocked(
        device = std::make_shared<InputDevice>(&mContext, deviceId, bumpGenerationLocked(),
        device = std::make_shared<InputDevice>(&mContext, deviceId, bumpGenerationLocked(),
                                               identifier);
                                               identifier);
    }
    }
    device->addEmptyEventHubDevice(eventHubId);
    device->addEventHubDevice(eventHubId, mConfig);
    auto unused = device->configure(systemTime(SYSTEM_TIME_MONOTONIC), mConfig, /*changes=*/{});
    device->populateMappers(eventHubId, mConfig);
    return device;
    return device;
}
}


+2 −2
Original line number Original line Diff line number Diff line
@@ -81,7 +81,7 @@ public:


    void dump(std::string& dump, const std::string& eventHubDevStr);
    void dump(std::string& dump, const std::string& eventHubDevStr);
    void addEmptyEventHubDevice(int32_t eventHubId);
    void addEmptyEventHubDevice(int32_t eventHubId);
    void populateMappers(int32_t eventHubId, const InputReaderConfiguration& readerConfig);
    void addEventHubDevice(int32_t eventHubId, const InputReaderConfiguration& readerConfig);
    void removeEventHubDevice(int32_t eventHubId);
    void removeEventHubDevice(int32_t eventHubId);
    [[nodiscard]] std::list<NotifyArgs> configure(nsecs_t when,
    [[nodiscard]] std::list<NotifyArgs> configure(nsecs_t when,
                                                  const InputReaderConfiguration& readerConfig,
                                                  const InputReaderConfiguration& readerConfig,
@@ -203,7 +203,7 @@ private:
    int32_t getState(uint32_t sourceMask, int32_t code, GetStateFunc getStateFunc);
    int32_t getState(uint32_t sourceMask, int32_t code, GetStateFunc getStateFunc);


    std::vector<std::unique_ptr<InputMapper>> createMappers(
    std::vector<std::unique_ptr<InputMapper>> createMappers(
            InputDeviceContext& context, const InputReaderConfiguration& readerConfig);
            InputDeviceContext& contextPtr, const InputReaderConfiguration& readerConfig);


    PropertyMap mConfiguration;
    PropertyMap mConfiguration;


+1 −4
Original line number Original line Diff line number Diff line
@@ -2584,10 +2584,7 @@ TEST_F(InputDeviceTest, DumpDoesNotCrash) {
    mFakeEventHub->addDevice(TEST_EVENTHUB_ID, "Test EventHub device", InputDeviceClass::BATTERY);
    mFakeEventHub->addDevice(TEST_EVENTHUB_ID, "Test EventHub device", InputDeviceClass::BATTERY);
    InputDevice device(mReader->getContext(), /*id=*/1, /*generation=*/2, /*identifier=*/{});
    InputDevice device(mReader->getContext(), /*id=*/1, /*generation=*/2, /*identifier=*/{});
    device.addEmptyEventHubDevice(TEST_EVENTHUB_ID);
    device.addEventHubDevice(TEST_EVENTHUB_ID, mFakePolicy->getReaderConfiguration());
    auto unused = device.configure(systemTime(SYSTEM_TIME_MONOTONIC),
                                   mFakePolicy->getReaderConfiguration(), /*changes=*/{});
    device.populateMappers(TEST_EVENTHUB_ID, mFakePolicy->getReaderConfiguration());
    device.removeEventHubDevice(TEST_EVENTHUB_ID);
    device.removeEventHubDevice(TEST_EVENTHUB_ID);
    std::string dumpStr, eventHubDevStr;
    std::string dumpStr, eventHubDevStr;
    device.dump(dumpStr, eventHubDevStr);
    device.dump(dumpStr, eventHubDevStr);