From 5d194e2bf1f70f0559d8430fe2dea74c483312f4 Mon Sep 17 00:00:00 2001 From: zouxf Date: Mon, 30 Nov 2015 15:57:04 +0800 Subject: [PATCH] Android->HDMIIN:add HDMIIN pip key support --- device/rockchip/rk3288/rk3288_box/system.prop | 2 + .../policy/impl/PhoneWindowManager.java | 93 +++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/device/rockchip/rk3288/rk3288_box/system.prop b/device/rockchip/rk3288/rk3288_box/system.prop index aef43a92e3..6f1135e52c 100644 --- a/device/rockchip/rk3288/rk3288_box/system.prop +++ b/device/rockchip/rk3288/rk3288_box/system.prop @@ -13,6 +13,8 @@ rild.libargs=-d /dev/ttyACM0 persist.tegra.nvmmlite = 1 ro.audio.monitorOrientation=true +persist.sys.pip=true + #NFC debug.nfc.fw_download=false debug.nfc.se=false diff --git a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 8e213ff36a..d75dd0bddc 100755 --- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -226,6 +226,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { private boolean mKeyguardHidden; private boolean mKeyguardDrawnOnce; + volatile boolean mPipsizeKeyHandled; // accessed from input reader and handler thread + volatile boolean mPipExitKeyHandled; // accessed from input reader and handler thread + private boolean mPipSizeKeyTriggered; + private long mPipSizeKeyDowmTime; + private boolean mPipExitKeyTriggered; + private long mPipExitKeyDowmTime; + + private int mPipSizeKey; + private int mPipExitKey; + /* Table of Application Launch keys. Maps from key codes to intent categories. * * These are special keys that are used to launch particular kinds of applications, @@ -1084,6 +1094,52 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + private void cancelPipSizeChangeKeyAction() { + if (!mPipsizeKeyHandled) { + mHandler.removeCallbacks(PIPSizeChangeBroadCastRunnable); + } + } + + private void cancelPipExitKeyAction() { + if (!mPipExitKeyHandled) { + mHandler.removeCallbacks(PIPExitBroadCastRunnable); + } + } + + private void iterceptPIPSizeChange(){ + if (mPipSizeKeyTriggered) { + mHandler.postDelayed(PIPSizeChangeBroadCastRunnable, ViewConfiguration.getGlobalActionKeyTimeout()*3); + } + } + private void iterceptPIPExit(){ + if (mPipExitKeyTriggered) { + mHandler.postDelayed(PIPExitBroadCastRunnable, ViewConfiguration.getGlobalActionKeyTimeout()*3); + } + } + + private final Runnable PIPSizeChangeBroadCastRunnable = new Runnable() { + @Override + public void run() { + Log.i(TAG, "PIPSizeChangeBroadCastRunnable"); + mPipsizeKeyHandled = true; + Intent i = new Intent(); + i.setAction("com.android.rk.pip.sizechange"); + mContext.sendBroadcast(i); + } + }; + + private final Runnable PIPExitBroadCastRunnable = new Runnable() { + @Override + public void run() { + Log.i(TAG, "PIPExitBroadCastRunnable"); + mPipExitKeyHandled = true; + Intent i = new Intent(); + i.setAction("com.android.rk.pip.exit"); + mContext.sendBroadcast(i); + } + }; + + private void powerPress(long eventTime, boolean interactive, int count) { if (mScreenOnEarly && !mScreenOnFully) { Slog.i(TAG, "Suppressed redundant power key press while " @@ -1536,6 +1592,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { wm.getDefaultDisplay().getMetrics(displayMetrics); screenWidth = displayMetrics.widthPixels; screenHeight = displayMetrics.heightPixels; + + //pip beigin + mPipExitKey = KeyEvent.KEYCODE_DPAD_UP; + mPipSizeKey = KeyEvent.KEYCODE_DPAD_DOWN; + //pid end } /** @@ -5287,6 +5348,38 @@ public class PhoneWindowManager implements WindowManagerPolicy { && (policyFlags & WindowManagerPolicy.FLAG_VIRTUAL) != 0 && event.getRepeatCount() == 0; + if("true".equals(SystemProperties.get("persist.sys.pip"))){ + if(mPipExitKey==keyCode){ + if (down) { + if ( !mPipExitKeyTriggered + && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { + mPipExitKeyTriggered = true; + mPipExitKeyDowmTime= event.getDownTime(); + //cancelPendingPowerKeyAction(); + iterceptPIPExit(); + } + } else { + mPipExitKeyHandled= false; + mPipExitKeyTriggered = false; + cancelPipExitKeyAction(); + } + } + else if(mPipSizeKey == keyCode){ + if (down) { + if ( !mPipSizeKeyTriggered + && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { + mPipSizeKeyTriggered = true; + mPipSizeKeyDowmTime= event.getDownTime(); + iterceptPIPSizeChange(); + } + } else { + mPipsizeKeyHandled = false; + mPipSizeKeyTriggered = false; + cancelPipSizeChangeKeyAction(); + } + } + } + // Handle special keys. switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_DOWN: