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

Commit 437e2364 authored by nadlabak's avatar nadlabak Committed by Steve Kondik
Browse files

Forward port 'Swap volume buttons' (2/3)

[mikeioannina]: Adjust for 5.0 changes

Change-Id: I5ed4ae2b7e69e2ada067ed1d3524b3d3fad30e2e
parent b87c4564
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -116,9 +116,9 @@ static inline const char* toString(bool value) {
}

static int32_t rotateValueUsingRotationMap(int32_t value, int32_t orientation,
        const int32_t map[][4], size_t mapSize) {
        const int32_t map[][4], size_t mapSize, int32_t rotationMapOffset) {
    if (orientation != DISPLAY_ORIENTATION_0) {
        for (size_t i = 0; i < mapSize; i++) {
        for (size_t i = rotationMapOffset; i < mapSize; i++) {
            if (value == map[i][0]) {
                return map[i][orientation];
            }
@@ -130,6 +130,16 @@ static int32_t rotateValueUsingRotationMap(int32_t value, int32_t orientation,
static const int32_t keyCodeRotationMap[][4] = {
        // key codes enumerated counter-clockwise with the original (unrotated) key first
        // no rotation,        90 degree rotation,  180 degree rotation, 270 degree rotation

        // volume keys - tablet
        { AKEYCODE_VOLUME_UP,   AKEYCODE_VOLUME_UP,   AKEYCODE_VOLUME_DOWN, AKEYCODE_VOLUME_DOWN },
        { AKEYCODE_VOLUME_DOWN, AKEYCODE_VOLUME_DOWN, AKEYCODE_VOLUME_UP,   AKEYCODE_VOLUME_UP },

        // volume keys - phone or hybrid
        { AKEYCODE_VOLUME_UP,   AKEYCODE_VOLUME_DOWN, AKEYCODE_VOLUME_DOWN, AKEYCODE_VOLUME_UP },
        { AKEYCODE_VOLUME_DOWN, AKEYCODE_VOLUME_UP,   AKEYCODE_VOLUME_UP,   AKEYCODE_VOLUME_DOWN },

        // dpad keys - common
        { AKEYCODE_DPAD_DOWN,   AKEYCODE_DPAD_RIGHT,  AKEYCODE_DPAD_UP,     AKEYCODE_DPAD_LEFT },
        { AKEYCODE_DPAD_RIGHT,  AKEYCODE_DPAD_UP,     AKEYCODE_DPAD_LEFT,   AKEYCODE_DPAD_DOWN },
        { AKEYCODE_DPAD_UP,     AKEYCODE_DPAD_LEFT,   AKEYCODE_DPAD_DOWN,   AKEYCODE_DPAD_RIGHT },
@@ -138,9 +148,9 @@ static const int32_t keyCodeRotationMap[][4] = {
static const size_t keyCodeRotationMapSize =
        sizeof(keyCodeRotationMap) / sizeof(keyCodeRotationMap[0]);

static int32_t rotateKeyCode(int32_t keyCode, int32_t orientation) {
static int32_t rotateKeyCode(int32_t keyCode, int32_t orientation, int32_t rotationMapOffset) {
    return rotateValueUsingRotationMap(keyCode, orientation,
            keyCodeRotationMap, keyCodeRotationMapSize);
            keyCodeRotationMap, keyCodeRotationMapSize, rotationMapOffset);
}

static void rotateDelta(int32_t orientation, float* deltaX, float* deltaY) {
@@ -2131,10 +2141,16 @@ void KeyboardInputMapper::configure(nsecs_t when,
            mOrientation = DISPLAY_ORIENTATION_0;
        }
    }
    if (!changes || (changes & InputReaderConfiguration::CHANGE_VOLUME_KEYS_ROTATION)) {
        // mode 0 (disabled) ~ offset 4
        // mode 1 (phone) ~ offset 2
        // mode 2 (tablet) ~ offset 0
        mRotationMapOffset = 4 - 2 * config->volumeKeysRotationMode;
    }
}

void KeyboardInputMapper::configureParameters() {
    mParameters.orientationAware = false;
    mParameters.orientationAware = !getDevice()->isExternal();
    getDevice()->getConfiguration().tryGetProperty(String8("keyboard.orientationAware"),
            mParameters.orientationAware);

@@ -2214,7 +2230,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
    if (down) {
        // Rotate key codes according to orientation if needed.
        if (mParameters.orientationAware && mParameters.hasAssociatedDisplay) {
            keyCode = rotateKeyCode(keyCode, mOrientation);
            keyCode = rotateKeyCode(keyCode, mOrientation, mRotationMapOffset);
        }

        // Add key down.
+12 −3
Original line number Diff line number Diff line
@@ -144,6 +144,9 @@ struct InputReaderConfiguration {
        // The presence of an external stylus has changed.
        CHANGE_EXTERNAL_STYLUS_PRESENCE = 1 << 7,

        // Volume keys rotation option changed.
        CHANGE_VOLUME_KEYS_ROTATION = 1 << 7,

        // All devices must be reopened.
        CHANGE_MUST_REOPEN = 1 << 31,
    };
@@ -231,6 +234,10 @@ struct InputReaderConfiguration {
    // True to show the location of touches on the touch screen as spots.
    bool showTouches;

    // Remap volume keys according to display rotation
    // 0 - disabled, 1 - phone or hybrid rotation mode, 2 - tablet rotation mode
    int volumeKeysRotationMode;

    // Ignore finger touches this long after the stylus has been used (including hover)
    nsecs_t stylusPalmRejectionTime;

@@ -251,7 +258,8 @@ struct InputReaderConfiguration {
            pointerGestureMovementSpeedRatio(0.8f),
            pointerGestureZoomSpeedRatio(0.3f),
            stylusPalmRejectionTime(50 * 10000000LL), // 50 ms
            showTouches(false) { }
            showTouches(false),
            volumeKeysRotationMode(0) { }

    bool getDisplayInfo(bool external, DisplayViewport* outViewport) const;
    void setDisplayInfo(bool external, const DisplayViewport& viewport);
@@ -1130,7 +1138,8 @@ private:
    uint32_t mSource;
    int32_t mKeyboardType;

    int32_t mOrientation; // orientation for dpad keys
    int32_t mRotationMapOffset; // determines if and how volume keys rotate
    int32_t mOrientation; // orientation for dpad and volume keys

    Vector<KeyDown> mKeyDowns; // keys that are down
    int32_t mMetaState;