长按endcall键(power)作为app_switch任务键,按下即生效而非抬起

PhoneWindowManager.java

 case KeyEvent.KEYCODE_ENDCALL: {
  
                if("com.freeme.factory.input.KeyboardTest".equals(getCurrentActivityName())){
                    break;
                } else if (getCurrentActivityName().contains("com.freeme.factory")) {
                    return 0;
                }
 

                    result &= ~ACTION_PASS_TO_USER;//1
                    if (down) {
                        interceptPowerKeyDown(event, interactiveAndOn);//*/on off screen
                        interceptFn3KeyDown(false);//*/add long press 1
                        TelecomManager telecomManager = getTelecommService();
                        boolean hungUp = false;
                        if (telecomManager != null) {
                            hungUp = telecomManager.endCall();
                        }
                        if (interactive && !hungUp) {
                            mEndCallKeyHandled = false;
                            mDownTime = event.getEventTime();
                        } else {
                            mEndCallKeyHandled = true;
                        }
                    } else {
                      interceptPowerKeyUp(event, canceled);
                      interceptFn3KeyUp(true);//*/addlong press  2
                       long upTime=event.getEventTime();
                        if (!mEndCallKeyHandled) {
                           if(upTime -mDownTime < 1000){
                           Instrumentation inst = new Instrumentation();
                           inst.sendKeyDownUpSync(KeyEvent.KEYCODE_POWER);
                           }
                   
                        
                        }
                    }
                  //*/

                break;
            }

长按走KEYCODE_APP_SWITCH,在按下的时候就执行,而非抬起的时候才执行

写在拦截方法外围即可:

//*/
    boolean mFn3KeyHandled;
    private final Runnable mFn3LongPress = new Runnable() {
        @Override
        public void run() {
             Instrumentation inst = new Instrumentation();
             inst.sendKeyDownUpSync(KeyEvent.KEYCODE_APP_SWITCH);
             android.util.Log.d("TOP", "================ KEYCODE_APP_SWITCH ==================");
             mFn3KeyHandled = true;
        }
    };
    private void interceptFn3KeyDown(boolean handled) {
        Log.d(TAG, "interceptFn3KeyDown, handled = " + handled);
        mFn3KeyHandled = handled;
        if (!mFn3KeyHandled) {
            mHandler.postDelayed(mFn3LongPress, 1000);
        }
    }
    private boolean interceptFn3KeyUp(boolean canceled) {
        if (!mFn3KeyHandled) {
            mHandler.removeCallbacks(mFn3LongPress);
            return !canceled;
        }
        return false;
    }
    //*/

你可能感兴趣的:(java,android)