标签:
alps\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
package com.android.internal.policy.impl;
public class PhoneWindowManager implements WindowManagerPolicy {
private static final int MSG_ENABLE_POINTER_LOCATION = 1;
private static final int MSG_DISABLE_POINTER_LOCATION = 2;
//Add nav down by cbk
private static final int MSG_ENABLE_NAV_BAR_PULL_UP_GESTURE = 7;
private static final int MSG_DISABLE_NAV_BAR_PULL_UP_GESTURE = 8;
//end nav down by cbk
private class PolicyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ENABLE_POINTER_LOCATION:
enablePointerLocation();
break;
case MSG_DISABLE_POINTER_LOCATION:
disablePointerLocation();
break;
//Add nav down by cbk
case MSG_ENABLE_NAV_BAR_PULL_UP_GESTURE:
enableNavBarPullupGesture();
break;
case MSG_DISABLE_NAV_BAR_PULL_UP_GESTURE:
disableNavBarPullupGesture();
break;
//end nav down by cbk
}
}
}
class SettingsObserver extends ContentObserver {
SettingsObserver(Handler handler) {
super(handler);
}
void observe() {
// Observe all users' changes
ContentResolver resolver = mContext.getContentResolver();
//Add nav down by cbk
resolver.registerContentObserver(Settings.System.getUriFor(
Settings.System.MULTI_TOUCH_GESTURE), false, this,
UserHandle.USER_ALL);
//end nav down by cbk
updateSettings();
}
@Override public void onChange(boolean selfChange) {
updateSettings();
updateRotation(false);
}
}
public void updateSettings() {
ContentResolver resolver = mContext.getContentResolver();
boolean updateRotation = false;
synchronized (mLock) {
//Add nav down by cbk
if (FeatureOption.K19_NCX_ASSISTIVE_TOUCH_NAV_BAR) {
/*int NavBarPullupGesture = Settings.System.getIntForUser(resolver,
Settings.System.MULTI_TOUCH_GESTURE, 0, UserHandle.USER_CURRENT);
if (mNavBarPullupGestureMode != NavBarPullupGesture) {
mNavBarPullupGestureMode = NavBarPullupGesture;
mHandler.sendEmptyMessage(NavBarPullupGesture != 0 ?
MSG_ENABLE_NAV_BAR_PULL_UP_GESTURE: MSG_DISABLE_NAV_BAR_PULL_UP_GESTURE);
}*/
if (mNavBarPullupGestureMode != 1) {
mNavBarPullupGestureMode = 1;
mHandler.sendEmptyMessage(MSG_ENABLE_NAV_BAR_PULL_UP_GESTURE);
}
}
//end nav down by cbk
}
}
//Add nav down by cbk
int mNavBarPullupGestureMode = 0;
NavBarPullupGestureInputEventReceiver mNavBarPullupGestureInputEventReceiver;
NavBarPullupGesturePanel mNavBarPullupGestureView;
InputChannel mNavBarPullupGestureInputChannel;
static final String TAG_NAV_BAR_PULL_UP_GESTURE = "NavBarPullupGesture";
static boolean DEBUG_NAV_BAR_PULL_UP_GESTURE = true;
private int mPosX =0;
private int mPosY =0;
private int mCurrentPosX =0;
private int mCurrentPosY =0;
private boolean mNavBarPullUpValid = false;
private static final class NavBarPullupGestureInputEventReceiver extends InputEventReceiver {
private final NavBarPullupGesturePanel mView;
public NavBarPullupGestureInputEventReceiver(InputChannel inputChannel, Looper looper,
NavBarPullupGesturePanel view) {
super(inputChannel, looper);
mView = view;
}
@Override
public void onInputEvent(InputEvent event) {
boolean handled = false;
try {
if (event instanceof MotionEvent
&& (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
final MotionEvent motionEvent = (MotionEvent)event;
mView.onTouchEvent(motionEvent);
handled = true;
}
} finally {
finishInputEvent(event, handled);
}
}
}
public void NavBarDisplayGesture() {
IStatusBarService statusBarService = IStatusBarService.Stub.asInterface(
ServiceManager.getService("statusbar"));
try {
if (DEBUG_NAV_BAR_PULL_UP_GESTURE)
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,"NavBarDisplayGesture ()");
statusBarService.EnableNavBarDisplay();//toggleNavBarDisplay();
} catch (RemoteException e) {
Log.e(TAG, "Error toggling recent apps.");
}
}
public class NavBarPullupGesturePanel extends FrameLayout{
public NavBarPullupGesturePanel(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (DEBUG_NAV_BAR_PULL_UP_GESTURE)
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,
"NavBarPullupGesturePanel event.getAction() =" +event.getAction() );
/*if(MotionEvent.ACTION_DOWN==event.getAction()){
mPosX = (int)event.getX();
mPosY = (int)event.getY();
if (DEBUG_NAV_BAR_PULL_UP_GESTURE)
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,
"NavBarPullupGesturePanel tp_down mPosX =" +mPosX
+",mPosY ="+mPosY);
}else if (MotionEvent.ACTION_MOVE == event.getAction()) {
mCurrentPosX = (int)event.getX();
mCurrentPosY = (int)event.getY();
if (DEBUG_NAV_BAR_PULL_UP_GESTURE)
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,
"NavBarPullupGesturePanel tp_move mCurrentPosX =" +mCurrentPosX
+",mCurrentPosY ="+mCurrentPosY);
}else{
mCurrentPosX = 0;
mCurrentPosY = 0;
mPosX = 0;
mPosY = 0;
}
if (DEBUG_NAV_BAR_PULL_UP_GESTURE)
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,
"NavBarPullupGesturePanel mPosX =" +mPosX
+ ",mPosY ="+mPosY
+ ",mCurrentPosX ="+mCurrentPosX
+ ",mCurrentPosY ="+mCurrentPosY );
if (mCurrentPosY - mPosY < -200 && Math.abs(mCurrentPosX - mPosX) < 300)
{
NavBarDisplayGesture();
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE, "向上的按下位置"+mPosX+"移动位置"+mCurrentPosX);
}*/
if(MotionEvent.ACTION_DOWN==event.getAction()){
mPosX = (int)event.getX();
mPosY = (int)event.getY();
int orientation = mContext.getResources().getConfiguration().orientation;
Log.d(TAG,"current config orienation " + orientation);
if (DEBUG_NAV_BAR_PULL_UP_GESTURE)
Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,
"NavBarPullupGesturePanel tp_down mPosX =" +mPosX
+",mPosY ="+mPosY
+",orientation =" +orientation);
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
if(mPosY >=540 && mPosY <=600){
NavBarDisplayGesture();
}
}else if(orientation == Configuration.ORIENTATION_PORTRAIT) {
if(mPosY >=940 && mPosY <=1024){
NavBarDisplayGesture();
}
}
}
return true;
}
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
final int source = event.getSource();
/*if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) {
mGestureRecognizer.onTouchEvent(event);
}*/
return true;
}
}
private void enableNavBarPullupGesture() {
if (mNavBarPullupGestureView == null) {
mNavBarPullupGestureView = new NavBarPullupGesturePanel(mContext);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT);
lp.type = WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
lp.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
lp.format = PixelFormat.TRANSLUCENT;
lp.setTitle("NavBarPullupGesturePanel");
WindowManager wm = (WindowManager)
mContext.getSystemService(Context.WINDOW_SERVICE);
wm.addView(mNavBarPullupGestureView, lp);
if (DEBUG_NAV_BAR_PULL_UP_GESTURE) Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,"enableNavBarPullupGesture");
mNavBarPullupGestureInputChannel =
mWindowManagerFuncs.monitorInput("NavBarPullupGesture");
mNavBarPullupGestureInputEventReceiver =
new NavBarPullupGestureInputEventReceiver(mNavBarPullupGestureInputChannel,
Looper.myLooper(), mNavBarPullupGestureView);
}
}
private void disableNavBarPullupGesture() {
if (DEBUG_NAV_BAR_PULL_UP_GESTURE) Log.d(TAG_NAV_BAR_PULL_UP_GESTURE,"disableNavBarPullupGesture");
if (mNavBarPullupGestureInputEventReceiver != null) {
mNavBarPullupGestureInputEventReceiver.dispose();
mNavBarPullupGestureInputEventReceiver = null;
}
if (mNavBarPullupGestureInputChannel != null) {
mNavBarPullupGestureInputChannel.dispose();
mNavBarPullupGestureInputChannel = null;
}
if (mNavBarPullupGestureView != null) {
WindowManager wm = (WindowManager)
mContext.getSystemService(Context.WINDOW_SERVICE);
wm.removeView(mNavBarPullupGestureView);
mNavBarPullupGestureView = null;
}
}
//end nav down by cbk
}
标签:
原文地址:http://blog.csdn.net/cbk861110/article/details/44346405