android 长按上下键执行左右功能(释放执行),关闭按键灯

diff --git a/alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 089e3f31e3…a7c0fc8c8e 100755
— a/alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -3657,13 +3657,53 @@ public class PhoneWindowManager implements WindowManagerPolicy {
final int flags = event.getFlags();
final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
final boolean canceled = event.isCanceled();

  •    Log.d("MMI", "PhoneWindowManager interceptKeyBeforeDispatching interceptKeyTi keyCode = " + keyCode);
    
  •    android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeDispatching event = " + event);
    
  •    android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeDispatching interceptKeyTi keyCode = " + keyCode);
    
  •    android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeDispatching repeatCount = " + repeatCount);
    
  •    android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeDispatching mLauncherKeyEvent = " + mLauncherKeyEvent);
       //MMI_Buttons_Light @{
    
  •    if (down && (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_P1
    
  •        || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_BACK)) {
    
  •        setButtonsLightEnabled(down);
    
  •    }
    
  •    //if (down && (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_P1
    
  •    //    || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_BACK)) {
    
  •    //    //setButtonsLightEnabled(down);
    
  •    //}
       //MMI_Buttons_Light @}
    
  •    //MMI_Launcher_Buttons @{
    
  •    //if (repeatCount == 0 && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •    //    if (down && mLauncherKeyEvent == false) {
    
  •    //        return 0;
    
  •    //    } else if (!down && mLauncherKeyEvent == true) {
    
  •    //        mLauncherKeyEvent = false;
    
  •    //        return 0;
    
  •    //}
    
  •    //}
    
  •    //if (!down && repeatCount == 0 && mLauncherKeyEvent == false && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •    //    if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
    
  •    //        mLauncherKeyEvent = true;
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP);
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP);
    
  •    //        //mLauncherKeyEvent = false;
    
  •    //    } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
    
  •    //        mLauncherKeyEvent = true;
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN);
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);
    
  •    //        //mLauncherKeyEvent = false;
    
  •    //    }
    
  •    //    //return 0;
    
  •    //}
    
  •    //if (down && repeatCount == 3 && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •    //    if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT);
    
  •    //    } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT);
    
  •    //        keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT);
    
  •    //    }
    
  •    //    return 0;
    
  •    //}
    
  •    //MMI_Launcher_Buttons @}
    
  •    /// M: Add more log at WMS
       if (DEBUG_INPUT || mWindowManagerDebugger.WMS_DEBUG_ENG) {
           Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
    

@@ -6330,6 +6370,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
setHdmiPlugged(!mHdmiPlugged);
}

  • private boolean getLauncher3KeyEventLocked() {

  •    ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
    
  •    if (manager != null) {
    
  •        //ActivityManager.RunningTaskInfo info = manager.getRunningTasks(1).get(0);
    
  •        //E InputManager-JNI: An exception was thrown by callback 'interceptKeyBeforeQueueing'.
    
  •        //E InputManager-JNI: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    
  •        List<ActivityManager.RunningTaskInfo> info = manager.getRunningTasks(1);
    
  •        if (!info.isEmpty() || info.size() > 0) {
    
  •            String pn = info.get(0).topActivity.getPackageName();
    
  •            if (pn != null && pn.equals("com.android.launcher3")) {
    
  •                return true;
    
  •            }
    
  •        }
    
  •    }
    
  •    return false;
    
  • }

    /// chenxs: add for key test in FactoryMode @{
    private boolean getKeyEventLocked() {
    @@ -6353,6 +6409,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    /// chenxs: add for volume knob @{
    private boolean mVolKnobLastDown;
    /// chenxs @}

  • private boolean mLauncherKeyEvent = false;

  • private long mStartTime = 0;

  • private long mCurrentTime = 0;

    /** {@inheritDoc} */
    @Override
    @@ -6366,6 +6425,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
    final boolean canceled = event.isCanceled();
    final int keyCode = event.getKeyCode();

  •    final int repeatCount = event.getRepeatCount();
    
       final boolean isInjected = (policyFlags & WindowManagerPolicy.FLAG_INJECTED) != 0;
    

@@ -6385,7 +6445,52 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}

     android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeQueueing event = " + event);
  •    android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeQueueing repeatCount = " + repeatCount);
    
  •    android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeQueueing mLauncherKeyEvent = " + mLauncherKeyEvent);
    
  •    //MMI_Launcher_Buttons @{
    
  •    //if (down && repeatCount == 0 && mLauncherKeyEvent == false && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •    //    return 0;
    
  •    //}
    
  •    //if (!down && repeatCount == 0 && mLauncherKeyEvent == true && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •    //    mLauncherKeyEvent = false;
    
  •    //    return 0;
    
  •    //}
    
  •    if (repeatCount == 0 && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •        if (down && mLauncherKeyEvent == false) {
    
  •            mStartTime = System.currentTimeMillis(); //  / 1000
    
  •            return 0;
    
  •        } else if (!down && mLauncherKeyEvent == true) {
    
  •            mLauncherKeyEvent = false;
    
  •            mStartTime = 0;
    
  •            mCurrentTime = 0;
    
  •            return 0;
    
  •        }
    
  •    }
    
  •    if (!down && repeatCount == 0 && mLauncherKeyEvent == false && getLauncher3KeyEventLocked() && (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
    
  •        mCurrentTime = System.currentTimeMillis(); //  / 1000
    
  •        android.util.Log.d("MMI", "PhoneWindowManager interceptKeyBeforeQueueing mStartTime = " + mStartTime + ", mCurrentTime = " + mCurrentTime);
    
  •        if (mCurrentTime - mStartTime < 1200 && keyCode == KeyEvent.KEYCODE_DPAD_UP) {
    
  •            mLauncherKeyEvent = true;
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP);
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP);
    
  •            //mLauncherKeyEvent = false;
    
  •        } else if (mCurrentTime - mStartTime < 1200 && keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
    
  •            mLauncherKeyEvent = true;
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN);
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);
    
  •            //mLauncherKeyEvent = false;
    
  •        } else if (mCurrentTime - mStartTime >= 1200 && keyCode == KeyEvent.KEYCODE_DPAD_UP) {
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT);
    
  •        } else if (mCurrentTime - mStartTime >= 1200 && keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT);
    
  •            keyRemappingSendFakeKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT);
    
  •        }
    
  •        mStartTime = 0;
    
  •        mCurrentTime = 0;
    
  •        return 0;
    
  •    }
    
  •    //MMI_Launcher_Buttons @}
       /// chenxs: add for volume knob @{
       if (!isInjected
               && (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
    

@@ -7411,7 +7516,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
reportScreenStateToVrManager(false);

  •    writeStringToFile("/sys/class/leds/keyboard-backlight/brightness", "0"); //MMI_Buttons_Light
    
  •    //writeStringToFile("/sys/class/leds/keyboard-backlight/brightness", "0"); //MMI_Buttons_Light
    

    }

    private long getKeyguardDrawnTimeout() {
    @@ -7457,7 +7562,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }
    reportScreenStateToVrManager(true);
    //writeStringToFile(“/sys/class/leds/keyboard-backlight/brightness”, “1”); //MMI_Buttons_Light

  •    setButtonsLightEnabled(true);
    
  •    //setButtonsLightEnabled(true);
    

    }

    @Override
    @@ -9746,4 +9851,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }*/
    }
    //MMI_Buttons_Light @}

  • //MMI_Launcher_Buttons @{

  •   private long mKeyRemappingSendFakeKeyDownTime;
    
  •   private void keyRemappingSendFakeKeyEvent(int action, int keyCode) {
    
  •    long eventTime = SystemClock.uptimeMillis();
    
  •    if (action == KeyEvent.ACTION_DOWN) {
    
  •        mKeyRemappingSendFakeKeyDownTime = eventTime;
    
  •    }
    
  •    KeyEvent keyEvent = new KeyEvent(mKeyRemappingSendFakeKeyDownTime, eventTime, action, keyCode, 0);
    
  •    InputManager inputManager = (InputManager) mContext.getSystemService(Context.INPUT_SERVICE);
    
  •    inputManager.injectInputEvent(keyEvent, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
    
  • }

  • //MMI_Launcher_Buttons @}
    }

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值