am b21fb104
: Fix key repeat delay.
Merge commit 'b21fb104cc95fe7e5daf3b3626241e525c39a3f1' into gingerbread-plus-aosp * commit 'b21fb104cc95fe7e5daf3b3626241e525c39a3f1': Fix key repeat delay.
This commit is contained in:
@ -147,9 +147,12 @@ public:
|
|||||||
/* Notifies the system that an input channel recovered from ANR. */
|
/* Notifies the system that an input channel recovered from ANR. */
|
||||||
virtual void notifyInputChannelRecoveredFromANR(const sp<InputChannel>& inputChannel) = 0;
|
virtual void notifyInputChannelRecoveredFromANR(const sp<InputChannel>& inputChannel) = 0;
|
||||||
|
|
||||||
/* Gets the key repeat timeout or -1 if automatic key repeating is disabled. */
|
/* Gets the key repeat initial timeout or -1 if automatic key repeating is disabled. */
|
||||||
virtual nsecs_t getKeyRepeatTimeout() = 0;
|
virtual nsecs_t getKeyRepeatTimeout() = 0;
|
||||||
|
|
||||||
|
/* Gets the key repeat inter-key delay. */
|
||||||
|
virtual nsecs_t getKeyRepeatDelay() = 0;
|
||||||
|
|
||||||
/* Waits for key event input targets to become available.
|
/* Waits for key event input targets to become available.
|
||||||
* If the event is being injected, injectorPid and injectorUid should specify the
|
* If the event is being injected, injectorPid and injectorUid should specify the
|
||||||
* process id and used id of the injecting application, otherwise they should both
|
* process id and used id of the injecting application, otherwise they should both
|
||||||
|
@ -97,6 +97,7 @@ InputDispatcher::~InputDispatcher() {
|
|||||||
|
|
||||||
void InputDispatcher::dispatchOnce() {
|
void InputDispatcher::dispatchOnce() {
|
||||||
nsecs_t keyRepeatTimeout = mPolicy->getKeyRepeatTimeout();
|
nsecs_t keyRepeatTimeout = mPolicy->getKeyRepeatTimeout();
|
||||||
|
nsecs_t keyRepeatDelay = mPolicy->getKeyRepeatDelay();
|
||||||
|
|
||||||
bool skipPoll = false;
|
bool skipPoll = false;
|
||||||
nsecs_t currentTime;
|
nsecs_t currentTime;
|
||||||
@ -146,7 +147,7 @@ void InputDispatcher::dispatchOnce() {
|
|||||||
if (mInboundQueue.isEmpty()) {
|
if (mInboundQueue.isEmpty()) {
|
||||||
if (mKeyRepeatState.lastKeyEntry) {
|
if (mKeyRepeatState.lastKeyEntry) {
|
||||||
if (currentTime >= mKeyRepeatState.nextRepeatTime) {
|
if (currentTime >= mKeyRepeatState.nextRepeatTime) {
|
||||||
processKeyRepeatLockedInterruptible(currentTime, keyRepeatTimeout);
|
processKeyRepeatLockedInterruptible(currentTime, keyRepeatDelay);
|
||||||
skipPoll = true;
|
skipPoll = true;
|
||||||
} else {
|
} else {
|
||||||
if (mKeyRepeatState.nextRepeatTime < nextWakeupTime) {
|
if (mKeyRepeatState.nextRepeatTime < nextWakeupTime) {
|
||||||
@ -335,7 +336,7 @@ void InputDispatcher::processKeyLockedInterruptible(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InputDispatcher::processKeyRepeatLockedInterruptible(
|
void InputDispatcher::processKeyRepeatLockedInterruptible(
|
||||||
nsecs_t currentTime, nsecs_t keyRepeatTimeout) {
|
nsecs_t currentTime, nsecs_t keyRepeatDelay) {
|
||||||
KeyEntry* entry = mKeyRepeatState.lastKeyEntry;
|
KeyEntry* entry = mKeyRepeatState.lastKeyEntry;
|
||||||
|
|
||||||
// Search the inbound queue for a key up corresponding to this device.
|
// Search the inbound queue for a key up corresponding to this device.
|
||||||
@ -352,7 +353,7 @@ void InputDispatcher::processKeyRepeatLockedInterruptible(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Synthesize a key repeat after the repeat timeout expired.
|
// Synthesize a key repeat.
|
||||||
// Reuse the repeated key entry if it is otherwise unreferenced.
|
// Reuse the repeated key entry if it is otherwise unreferenced.
|
||||||
uint32_t policyFlags = entry->policyFlags & POLICY_FLAG_RAW_MASK;
|
uint32_t policyFlags = entry->policyFlags & POLICY_FLAG_RAW_MASK;
|
||||||
if (entry->refCount == 1) {
|
if (entry->refCount == 1) {
|
||||||
@ -375,7 +376,7 @@ void InputDispatcher::processKeyRepeatLockedInterruptible(
|
|||||||
entry->flags |= AKEY_EVENT_FLAG_LONG_PRESS;
|
entry->flags |= AKEY_EVENT_FLAG_LONG_PRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
mKeyRepeatState.nextRepeatTime = currentTime + keyRepeatTimeout;
|
mKeyRepeatState.nextRepeatTime = currentTime + keyRepeatDelay;
|
||||||
|
|
||||||
#if DEBUG_OUTBOUND_EVENT_DETAILS
|
#if DEBUG_OUTBOUND_EVENT_DETAILS
|
||||||
LOGD("processKeyRepeat - eventTime=%lld, deviceId=0x%x, source=0x%x, policyFlags=0x%x, "
|
LOGD("processKeyRepeat - eventTime=%lld, deviceId=0x%x, source=0x%x, policyFlags=0x%x, "
|
||||||
|
@ -275,6 +275,7 @@ public:
|
|||||||
nsecs_t& outNewTimeout);
|
nsecs_t& outNewTimeout);
|
||||||
virtual void notifyInputChannelRecoveredFromANR(const sp<InputChannel>& inputChannel);
|
virtual void notifyInputChannelRecoveredFromANR(const sp<InputChannel>& inputChannel);
|
||||||
virtual nsecs_t getKeyRepeatTimeout();
|
virtual nsecs_t getKeyRepeatTimeout();
|
||||||
|
virtual nsecs_t getKeyRepeatDelay();
|
||||||
virtual int32_t waitForKeyEventTargets(KeyEvent* keyEvent, uint32_t policyFlags,
|
virtual int32_t waitForKeyEventTargets(KeyEvent* keyEvent, uint32_t policyFlags,
|
||||||
int32_t injectorPid, int32_t injectorUid, Vector<InputTarget>& outTargets);
|
int32_t injectorPid, int32_t injectorUid, Vector<InputTarget>& outTargets);
|
||||||
virtual int32_t waitForMotionEventTargets(MotionEvent* motionEvent, uint32_t policyFlags,
|
virtual int32_t waitForMotionEventTargets(MotionEvent* motionEvent, uint32_t policyFlags,
|
||||||
@ -1011,6 +1012,10 @@ nsecs_t NativeInputManager::getKeyRepeatTimeout() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsecs_t NativeInputManager::getKeyRepeatDelay() {
|
||||||
|
return milliseconds_to_nanoseconds(50);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t NativeInputManager::getMaxEventsPerSecond() {
|
int32_t NativeInputManager::getMaxEventsPerSecond() {
|
||||||
if (mMaxEventsPerSecond < 0) {
|
if (mMaxEventsPerSecond < 0) {
|
||||||
JNIEnv* env = jniEnv();
|
JNIEnv* env = jniEnv();
|
||||||
|
Reference in New Issue
Block a user