consumeRawTouches的一些解析

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;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值