E/InputReader( 952): lisa-consumeRawTouches
E/InputReader( 952): lisa-mCurrentVirtualKey.keyCode=0
E/InputReader( 952): lisa-middle
E/InputReader( 952): lisa-findVirtualKeyHit2
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=4, scanCode=158, left=50, top=1292, right=230, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=3, scanCode=102, left=275, top=1292, right=445, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=187, scanCode=580, left=490, top=1292, right=670, bottom=1392
E/InputReader( 952): lisa--return & virtualKey
E/InputReader( 952): lisa-if (virtualKey)
E/InputReader( 952): lisa- dispatchVirtualKey2
E/InputReader( 952): lisa-1- mCurrentVirtualKey.ignored=0
E/InputReader( 952): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 952): lisa-consumeRawTouches
E/InputReader( 952): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 952): lisa-mCurrentVirtualKey.down
E/InputReader( 952): lisa- after mCurrentVirtualKey.down
E/InputReader( 952): lisa-findVirtualKeyHit1
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=4, scanCode=158, left=50, top=1292, right=230, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=3, scanCode=102, left=275, top=1292, right=445, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=187, scanCode=580, left=490, top=1292, right=670, bottom=1392
E/InputReader( 952): lisa--return & virtualKey
E/InputReader( 952): lisa-return true;
E/InputReader( 952): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 952): lisa-consumeRawTouches
E/InputReader( 952): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 952): lisa-mCurrentVirtualKey.down
E/InputReader( 952): lisa-2- mCurrentVirtualKey.ignored=0
E/InputReader( 952): lisa- dispatchVirtualKey1
E/InputReader( 952): lisa- mCurrentVirtualKey.down=0
E/InputReader( 952): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 934): lisa-mCurrentVirtualKey.keyCode=187 //下一次点击屏幕上除了virtualkey之外的区域,keycode不变直到点击到virtualkey
E/InputReader( 934): lisa-middle
E/InputReader( 934): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 934): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 934): lisa-middle
E/InputReader( 934): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 934): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 934): lisa-middle
E/InputReader( 934): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
bool TouchInputMapper::consumeRawTouches(nsecs_t when, uint32_t policyFlags) {
// Check for release of a virtual key.
ALOGE("lisa-mCurrentVirtualKey.keyCode=%d",mCurrentVirtualKey.keyCode);
if (mCurrentVirtualKey.down) { //从同一个vortualkey 第二次报上来开始走这边
ALOGE("lisa-mCurrentVirtualKey.down ");
if (mCurrentRawPointerData.touchingIdBits.isEmpty()) {//同一个vortualkey 最后抬起来的时候走这边
// Pointer went up while virtual key was down.
mCurrentVirtualKey.down = false;
ALOGE("lisa-2- mCurrentVirtualKey.ignored=%d ",mCurrentVirtualKey.ignored);
if (!mCurrentVirtualKey.ignored) {
ALOGE("lisa- dispatchVirtualKey1 ");
dispatchVirtualKey(when, policyFlags, //上报key已经抬起
AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
}
ALOGE("lisa- mCurrentVirtualKey.down=%d ",mCurrentVirtualKey.down);
return true;
}
ALOGE("lisa- after mCurrentVirtualKey.down ");
if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
ALOGE("lisa-findVirtualKeyHit1 ");
const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
if (virtualKey && virtualKey->keyCode == mCurrentVirtualKey.keyCode) { //同一个virtualkey且不是抬起的动作则直接跳过
// Pointer is still within the space of the virtual key.
ALOGE("lisa-return true; ");
return true;
}
}
ALOGE("lisa-after findVirtualKeyHit1 ");
//ALOGE("lisa-mCurrentVirtualKey.keyCode=%d",mCurrentVirtualKey.keyCode);
if ((mCurrentRawPointerData.touchingIdBits.count() == 2
&& (mCurrentVirtualKey.keyCode == 4 || mCurrentVirtualKey.keyCode == 187))) {
//ALOGE("lisa-mCurrentVirtualKey.keyCode=%d",mCurrentVirtualKey.keyCode);
//virtualkey home position
const VirtualKey& virtualKey = mVirtualKeys[1];
//debug get record_pointer(x,y)
//ALOGD("record_pointer.x = %d", record_pointer.x);
//ALOGD("record_pointer.y = %d", record_pointer.y);
if (record_pointer.x >= virtualKey.hitLeft && record_pointer.y >= virtualKey.hitTop) {
if (record_pointer.x <= virtualKey.hitRight && record_pointer.y <= virtualKey.hitBottom) {
//debug hit virtualkey home ?
//ALOGD("hitLeft = %d", virtualKey.hitLeft);
//ALOGD("hitRight = %d", virtualKey.hitRight);
//ALOGD("home before = %d", home);
home = true;
ALOGD("home after = %d", home);
}
}
switch (mCurrentVirtualKey.keyCode) {
case 4:
ALOGE("lisa-case 4: ");
if (!recent) {
if (!home) {
ALOGD("second(187) = %d", mCurrentVirtualKey.keyCode);
mCurrentVirtualKey.down = true;
mCurrentVirtualKey.downTime = when;
mCurrentVirtualKey.keyCode = 187;
mCurrentVirtualKey.scanCode = 580;
mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey(
when, getDevice(), mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_DOWN,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
recent = false;
back = true;
}
}
if (recent) {
//match postDelayed time 1s
start = clock();
do {
finish = clock();
//ALOGD("case4 finish = %d", finish);
//ALOGD("case4 start = %d", start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
//ALOGD("case4 duration =%f", duration);
}while(duration < 3);
ALOGD("case 4 duration < 3 = %f", duration);
mCurrentVirtualKey.down = false;
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
recent = false;
}
break;
case 187:
ALOGE("lisa-case 187: ");
if (!back) {
if (!home) {
ALOGD("second(4) = %d", mCurrentVirtualKey.keyCode);
mCurrentVirtualKey.down = true;
mCurrentVirtualKey.downTime = when;
mCurrentVirtualKey.keyCode = 4;
mCurrentVirtualKey.scanCode = 158;
mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey(
when, getDevice(), mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_DOWN,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
back = false;
recent = true;
}
}
if (back) {
match postDelayed time 1s
start = clock();
do {
finish = clock();
//ALOGD("case187 finish = %d", finish);
//ALOGD("case187 start = %d", start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
//ALOGD("case187 duration =%f", duration);
}while(duration < 3);
ALOGD("case187 duration < 3 = %f", duration);
mCurrentVirtualKey.down = false;
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
back = false;
}
break;
}
}
//asus_jeffery_hsu---
}
ALOGE("lisa-middle ");
if (mLastRawPointerData.touchingIdBits.isEmpty()
&& !mCurrentRawPointerData.touchingIdBits.isEmpty()) {//从同一个vortualkey 只有第一次报上来开始走这边
// Pointer just went down. Check for virtual key press or off-screen touches.
uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
if (!isPointInsideSurface(pointer.x, pointer.y)) {
// If exactly one pointer went down, check for virtual key hit.
// Otherwise we will drop the entire stroke.
if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
ALOGE("lisa-findVirtualKeyHit2 ");
const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
if (virtualKey) {
ALOGE("lisa-if (virtualKey) ");
mCurrentVirtualKey.down = true; //这里设置了dowm然后同一个virtualkey的第二个上报才能走上面的那个dowm
mCurrentVirtualKey.downTime = when;
mCurrentVirtualKey.keyCode = virtualKey->keyCode;
mCurrentVirtualKey.scanCode = virtualKey->scanCode;
mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey( //设置了ignored
when, getDevice(), virtualKey->keyCode, virtualKey->scanCode);
if (!mCurrentVirtualKey.ignored) {
ALOGE("lisa- dispatchVirtualKey2 ");
dispatchVirtualKey(when, policyFlags, //上报key按下
AKEY_EVENT_ACTION_DOWN,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
ALOGE("lisa-1- mCurrentVirtualKey.ignored=%d ",mCurrentVirtualKey.ignored);
}
}
}
return true;
}
}
// Disable all virtual key touches that happen within a short time interval of the
// most recent touch within the screen area. The idea is to filter out stray
// virtual key presses when interacting with the touch screen.
//
// Problems we're trying to solve:
//
// 1. While scrolling a list or dragging the window shade, the user swipes down into a
// virtual key area that is implemented by a separate touch panel and accidentally
// triggers a virtual key.
//
// 2. While typing in the on screen keyboard, the user taps slightly outside the screen
// area and accidentally triggers a virtual key. This often happens when virtual keys
// are layed out below the screen near to where the on screen keyboard's space bar
// is displayed.
if (mConfig.virtualKeyQuietTime > 0 && !mCurrentRawPointerData.touchingIdBits.isEmpty()) {
mContext->disableVirtualKeysUntil(when + mConfig.virtualKeyQuietTime);
}
return false;
}
const TouchInputMapper::VirtualKey* TouchInputMapper::findVirtualKeyHit(
int32_t x, int32_t y) {
size_t numVirtualKeys = mVirtualKeys.size();
for (size_t i = 0; i < numVirtualKeys; i++) {
const VirtualKey& virtualKey = mVirtualKeys[i];
//#if DEBUG_VIRTUAL_KEYS
ALOGE("lisa--VirtualKeys: Hit test (%d, %d): keyCode=%d, scanCode=%d, "
"left=%d, top=%d, right=%d, bottom=%d",
x, y,
virtualKey.keyCode, virtualKey.scanCode,
virtualKey.hitLeft, virtualKey.hitTop,
virtualKey.hitRight, virtualKey.hitBottom);
//#endif
if (virtualKey.isHit(x, y)) { //判断当前的数组里的那个key是有效的key
ALOGE("lisa--return & virtualKey");
return & virtualKey;
}
}
return NULL;
}
inline bool isHit(int32_t x, int32_t y) const {
return x >= hitLeft && x <= hitRight && y >= hitTop && y <= hitBottom;
}
E/InputReader( 952): lisa-mCurrentVirtualKey.keyCode=0
E/InputReader( 952): lisa-middle
E/InputReader( 952): lisa-findVirtualKeyHit2
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=4, scanCode=158, left=50, top=1292, right=230, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=3, scanCode=102, left=275, top=1292, right=445, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=187, scanCode=580, left=490, top=1292, right=670, bottom=1392
E/InputReader( 952): lisa--return & virtualKey
E/InputReader( 952): lisa-if (virtualKey)
E/InputReader( 952): lisa- dispatchVirtualKey2
E/InputReader( 952): lisa-1- mCurrentVirtualKey.ignored=0
E/InputReader( 952): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 952): lisa-consumeRawTouches
E/InputReader( 952): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 952): lisa-mCurrentVirtualKey.down
E/InputReader( 952): lisa- after mCurrentVirtualKey.down
E/InputReader( 952): lisa-findVirtualKeyHit1
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=4, scanCode=158, left=50, top=1292, right=230, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=3, scanCode=102, left=275, top=1292, right=445, bottom=1392
E/InputReader( 952): lisa--VirtualKeys: Hit test (604, 1343): keyCode=187, scanCode=580, left=490, top=1292, right=670, bottom=1392
E/InputReader( 952): lisa--return & virtualKey
E/InputReader( 952): lisa-return true;
E/InputReader( 952): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 952): lisa-consumeRawTouches
E/InputReader( 952): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 952): lisa-mCurrentVirtualKey.down
E/InputReader( 952): lisa-2- mCurrentVirtualKey.ignored=0
E/InputReader( 952): lisa- dispatchVirtualKey1
E/InputReader( 952): lisa- mCurrentVirtualKey.down=0
E/InputReader( 952): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 934): lisa-mCurrentVirtualKey.keyCode=187 //下一次点击屏幕上除了virtualkey之外的区域,keycode不变直到点击到virtualkey
E/InputReader( 934): lisa-middle
E/InputReader( 934): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 934): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 934): lisa-middle
E/InputReader( 934): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
E/InputReader( 934): lisa-mCurrentVirtualKey.keyCode=187
E/InputReader( 934): lisa-middle
E/InputReader( 934): lisa-else (mDeviceMode == DEVICE_MODE_POINTER)
bool TouchInputMapper::consumeRawTouches(nsecs_t when, uint32_t policyFlags) {
// Check for release of a virtual key.
ALOGE("lisa-mCurrentVirtualKey.keyCode=%d",mCurrentVirtualKey.keyCode);
if (mCurrentVirtualKey.down) { //从同一个vortualkey 第二次报上来开始走这边
ALOGE("lisa-mCurrentVirtualKey.down ");
if (mCurrentRawPointerData.touchingIdBits.isEmpty()) {//同一个vortualkey 最后抬起来的时候走这边
// Pointer went up while virtual key was down.
mCurrentVirtualKey.down = false;
ALOGE("lisa-2- mCurrentVirtualKey.ignored=%d ",mCurrentVirtualKey.ignored);
if (!mCurrentVirtualKey.ignored) {
ALOGE("lisa- dispatchVirtualKey1 ");
dispatchVirtualKey(when, policyFlags, //上报key已经抬起
AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
}
ALOGE("lisa- mCurrentVirtualKey.down=%d ",mCurrentVirtualKey.down);
return true;
}
ALOGE("lisa- after mCurrentVirtualKey.down ");
if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
ALOGE("lisa-findVirtualKeyHit1 ");
const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
if (virtualKey && virtualKey->keyCode == mCurrentVirtualKey.keyCode) { //同一个virtualkey且不是抬起的动作则直接跳过
// Pointer is still within the space of the virtual key.
ALOGE("lisa-return true; ");
return true;
}
}
ALOGE("lisa-after findVirtualKeyHit1 ");
//ALOGE("lisa-mCurrentVirtualKey.keyCode=%d",mCurrentVirtualKey.keyCode);
if ((mCurrentRawPointerData.touchingIdBits.count() == 2
&& (mCurrentVirtualKey.keyCode == 4 || mCurrentVirtualKey.keyCode == 187))) {
//ALOGE("lisa-mCurrentVirtualKey.keyCode=%d",mCurrentVirtualKey.keyCode);
//virtualkey home position
const VirtualKey& virtualKey = mVirtualKeys[1];
//debug get record_pointer(x,y)
//ALOGD("record_pointer.x = %d", record_pointer.x);
//ALOGD("record_pointer.y = %d", record_pointer.y);
if (record_pointer.x >= virtualKey.hitLeft && record_pointer.y >= virtualKey.hitTop) {
if (record_pointer.x <= virtualKey.hitRight && record_pointer.y <= virtualKey.hitBottom) {
//debug hit virtualkey home ?
//ALOGD("hitLeft = %d", virtualKey.hitLeft);
//ALOGD("hitRight = %d", virtualKey.hitRight);
//ALOGD("home before = %d", home);
home = true;
ALOGD("home after = %d", home);
}
}
switch (mCurrentVirtualKey.keyCode) {
case 4:
ALOGE("lisa-case 4: ");
if (!recent) {
if (!home) {
ALOGD("second(187) = %d", mCurrentVirtualKey.keyCode);
mCurrentVirtualKey.down = true;
mCurrentVirtualKey.downTime = when;
mCurrentVirtualKey.keyCode = 187;
mCurrentVirtualKey.scanCode = 580;
mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey(
when, getDevice(), mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_DOWN,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
recent = false;
back = true;
}
}
if (recent) {
//match postDelayed time 1s
start = clock();
do {
finish = clock();
//ALOGD("case4 finish = %d", finish);
//ALOGD("case4 start = %d", start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
//ALOGD("case4 duration =%f", duration);
}while(duration < 3);
ALOGD("case 4 duration < 3 = %f", duration);
mCurrentVirtualKey.down = false;
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
recent = false;
}
break;
case 187:
ALOGE("lisa-case 187: ");
if (!back) {
if (!home) {
ALOGD("second(4) = %d", mCurrentVirtualKey.keyCode);
mCurrentVirtualKey.down = true;
mCurrentVirtualKey.downTime = when;
mCurrentVirtualKey.keyCode = 4;
mCurrentVirtualKey.scanCode = 158;
mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey(
when, getDevice(), mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_DOWN,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
back = false;
recent = true;
}
}
if (back) {
match postDelayed time 1s
start = clock();
do {
finish = clock();
//ALOGD("case187 finish = %d", finish);
//ALOGD("case187 start = %d", start);
duration = (double)(finish - start) / CLOCKS_PER_SEC;
//ALOGD("case187 duration =%f", duration);
}while(duration < 3);
ALOGD("case187 duration < 3 = %f", duration);
mCurrentVirtualKey.down = false;
dispatchVirtualKey(when, policyFlags,
AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
back = false;
}
break;
}
}
//asus_jeffery_hsu---
}
ALOGE("lisa-middle ");
if (mLastRawPointerData.touchingIdBits.isEmpty()
&& !mCurrentRawPointerData.touchingIdBits.isEmpty()) {//从同一个vortualkey 只有第一次报上来开始走这边
// Pointer just went down. Check for virtual key press or off-screen touches.
uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
if (!isPointInsideSurface(pointer.x, pointer.y)) {
// If exactly one pointer went down, check for virtual key hit.
// Otherwise we will drop the entire stroke.
if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
ALOGE("lisa-findVirtualKeyHit2 ");
const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
if (virtualKey) {
ALOGE("lisa-if (virtualKey) ");
mCurrentVirtualKey.down = true; //这里设置了dowm然后同一个virtualkey的第二个上报才能走上面的那个dowm
mCurrentVirtualKey.downTime = when;
mCurrentVirtualKey.keyCode = virtualKey->keyCode;
mCurrentVirtualKey.scanCode = virtualKey->scanCode;
mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey( //设置了ignored
when, getDevice(), virtualKey->keyCode, virtualKey->scanCode);
if (!mCurrentVirtualKey.ignored) {
ALOGE("lisa- dispatchVirtualKey2 ");
dispatchVirtualKey(when, policyFlags, //上报key按下
AKEY_EVENT_ACTION_DOWN,
AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
ALOGE("lisa-1- mCurrentVirtualKey.ignored=%d ",mCurrentVirtualKey.ignored);
}
}
}
return true;
}
}
// Disable all virtual key touches that happen within a short time interval of the
// most recent touch within the screen area. The idea is to filter out stray
// virtual key presses when interacting with the touch screen.
//
// Problems we're trying to solve:
//
// 1. While scrolling a list or dragging the window shade, the user swipes down into a
// virtual key area that is implemented by a separate touch panel and accidentally
// triggers a virtual key.
//
// 2. While typing in the on screen keyboard, the user taps slightly outside the screen
// area and accidentally triggers a virtual key. This often happens when virtual keys
// are layed out below the screen near to where the on screen keyboard's space bar
// is displayed.
if (mConfig.virtualKeyQuietTime > 0 && !mCurrentRawPointerData.touchingIdBits.isEmpty()) {
mContext->disableVirtualKeysUntil(when + mConfig.virtualKeyQuietTime);
}
return false;
}
const TouchInputMapper::VirtualKey* TouchInputMapper::findVirtualKeyHit(
int32_t x, int32_t y) {
size_t numVirtualKeys = mVirtualKeys.size();
for (size_t i = 0; i < numVirtualKeys; i++) {
const VirtualKey& virtualKey = mVirtualKeys[i];
//#if DEBUG_VIRTUAL_KEYS
ALOGE("lisa--VirtualKeys: Hit test (%d, %d): keyCode=%d, scanCode=%d, "
"left=%d, top=%d, right=%d, bottom=%d",
x, y,
virtualKey.keyCode, virtualKey.scanCode,
virtualKey.hitLeft, virtualKey.hitTop,
virtualKey.hitRight, virtualKey.hitBottom);
//#endif
if (virtualKey.isHit(x, y)) { //判断当前的数组里的那个key是有效的key
ALOGE("lisa--return & virtualKey");
return & virtualKey;
}
}
return NULL;
}
inline bool isHit(int32_t x, int32_t y) const {
return x >= hitLeft && x <= hitRight && y >= hitTop && y <= hitBottom;
}