Forward port 'Swap volume buttons' (2/3)
[mikeioannina]: Adjust for 5.0 changes Change-Id: I5ed4ae2b7e69e2ada067ed1d3524b3d3fad30e2e
This commit is contained in:
parent
b87c456431
commit
437e236427
@ -116,9 +116,9 @@ static inline const char* toString(bool value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int32_t rotateValueUsingRotationMap(int32_t value, int32_t orientation,
|
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) {
|
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]) {
|
if (value == map[i][0]) {
|
||||||
return map[i][orientation];
|
return map[i][orientation];
|
||||||
}
|
}
|
||||||
@ -130,6 +130,16 @@ static int32_t rotateValueUsingRotationMap(int32_t value, int32_t orientation,
|
|||||||
static const int32_t keyCodeRotationMap[][4] = {
|
static const int32_t keyCodeRotationMap[][4] = {
|
||||||
// key codes enumerated counter-clockwise with the original (unrotated) key first
|
// key codes enumerated counter-clockwise with the original (unrotated) key first
|
||||||
// no rotation, 90 degree rotation, 180 degree rotation, 270 degree rotation
|
// 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_DOWN, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_LEFT },
|
||||||
{ AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN },
|
{ AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN },
|
||||||
{ AKEYCODE_DPAD_UP, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_RIGHT },
|
{ 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 =
|
static const size_t keyCodeRotationMapSize =
|
||||||
sizeof(keyCodeRotationMap) / sizeof(keyCodeRotationMap[0]);
|
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,
|
return rotateValueUsingRotationMap(keyCode, orientation,
|
||||||
keyCodeRotationMap, keyCodeRotationMapSize);
|
keyCodeRotationMap, keyCodeRotationMapSize, rotationMapOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rotateDelta(int32_t orientation, float* deltaX, float* deltaY) {
|
static void rotateDelta(int32_t orientation, float* deltaX, float* deltaY) {
|
||||||
@ -2131,10 +2141,16 @@ void KeyboardInputMapper::configure(nsecs_t when,
|
|||||||
mOrientation = DISPLAY_ORIENTATION_0;
|
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() {
|
void KeyboardInputMapper::configureParameters() {
|
||||||
mParameters.orientationAware = false;
|
mParameters.orientationAware = !getDevice()->isExternal();
|
||||||
getDevice()->getConfiguration().tryGetProperty(String8("keyboard.orientationAware"),
|
getDevice()->getConfiguration().tryGetProperty(String8("keyboard.orientationAware"),
|
||||||
mParameters.orientationAware);
|
mParameters.orientationAware);
|
||||||
|
|
||||||
@ -2214,7 +2230,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
|
|||||||
if (down) {
|
if (down) {
|
||||||
// Rotate key codes according to orientation if needed.
|
// Rotate key codes according to orientation if needed.
|
||||||
if (mParameters.orientationAware && mParameters.hasAssociatedDisplay) {
|
if (mParameters.orientationAware && mParameters.hasAssociatedDisplay) {
|
||||||
keyCode = rotateKeyCode(keyCode, mOrientation);
|
keyCode = rotateKeyCode(keyCode, mOrientation, mRotationMapOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add key down.
|
// Add key down.
|
||||||
|
@ -144,6 +144,9 @@ struct InputReaderConfiguration {
|
|||||||
// The presence of an external stylus has changed.
|
// The presence of an external stylus has changed.
|
||||||
CHANGE_EXTERNAL_STYLUS_PRESENCE = 1 << 7,
|
CHANGE_EXTERNAL_STYLUS_PRESENCE = 1 << 7,
|
||||||
|
|
||||||
|
// Volume keys rotation option changed.
|
||||||
|
CHANGE_VOLUME_KEYS_ROTATION = 1 << 7,
|
||||||
|
|
||||||
// All devices must be reopened.
|
// All devices must be reopened.
|
||||||
CHANGE_MUST_REOPEN = 1 << 31,
|
CHANGE_MUST_REOPEN = 1 << 31,
|
||||||
};
|
};
|
||||||
@ -231,6 +234,10 @@ struct InputReaderConfiguration {
|
|||||||
// True to show the location of touches on the touch screen as spots.
|
// True to show the location of touches on the touch screen as spots.
|
||||||
bool showTouches;
|
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)
|
// Ignore finger touches this long after the stylus has been used (including hover)
|
||||||
nsecs_t stylusPalmRejectionTime;
|
nsecs_t stylusPalmRejectionTime;
|
||||||
|
|
||||||
@ -251,7 +258,8 @@ struct InputReaderConfiguration {
|
|||||||
pointerGestureMovementSpeedRatio(0.8f),
|
pointerGestureMovementSpeedRatio(0.8f),
|
||||||
pointerGestureZoomSpeedRatio(0.3f),
|
pointerGestureZoomSpeedRatio(0.3f),
|
||||||
stylusPalmRejectionTime(50 * 10000000LL), // 50 ms
|
stylusPalmRejectionTime(50 * 10000000LL), // 50 ms
|
||||||
showTouches(false) { }
|
showTouches(false),
|
||||||
|
volumeKeysRotationMode(0) { }
|
||||||
|
|
||||||
bool getDisplayInfo(bool external, DisplayViewport* outViewport) const;
|
bool getDisplayInfo(bool external, DisplayViewport* outViewport) const;
|
||||||
void setDisplayInfo(bool external, const DisplayViewport& viewport);
|
void setDisplayInfo(bool external, const DisplayViewport& viewport);
|
||||||
@ -1130,7 +1138,8 @@ private:
|
|||||||
uint32_t mSource;
|
uint32_t mSource;
|
||||||
int32_t mKeyboardType;
|
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
|
Vector<KeyDown> mKeyDowns; // keys that are down
|
||||||
int32_t mMetaState;
|
int32_t mMetaState;
|
||||||
|
Loading…
Reference in New Issue
Block a user