Example of adding a global TouchPanel for android
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 Limit = 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 when: break (); break; case when: disablenavbarpullupgsture (); break; // end nav down by c Bk }}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 updateSe Ttings () ;}@ 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, Sett Ings. System. MULTI_TOUCH_GESTURE, 0, UserHandle. USER_CURRENT); if (mnavbarpullupgsturemode! = Navbarpullupgsture) {mnavbarpullupgsturemode = navbarpullupgsture; mHandler. sendEmptyMessage (navbarpullupgsture! = 0? MSG_ENABLE_NAV_BAR_PULL_UP_GESTURE: MSG_DISABLE_NAV_BAR_PULL_UP_GESTURE);} */if (mnavbarpullupgsturemode! = 1) {mnavbarpullupgsturemode = 1; mHandler. sendEmptyMessage (callback) ;}// end nav down by cbk }// Add nav down by cbk int mnavbarpullupgsturemode = 0; navbarpullupgsturepanel mnavbarpullupgstureview; InputChannel resume; static final String TAG_NAV_BAR_PULL_UP_G ESTURE = "navbarpullupgsture"; 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 navbarpullupgstureinputeventreceiver extends InputEventReceiver {private final navbarpullupgsturepanel mView; public navbarpullupgsture6b UtEventReceiver (InputChannel inputChannel, loopetemediaview) {super (inputChannel, loopchannel); 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, "NavBarDispla YGesture () "); statusBarService. enableNavBarDisplay (); // togglavbardisplay ();} catch (RemoteException e) {Log. e (TAG, "Error toggling recent apps. ") ;}} public class navbarpullupgsturepanel extends FrameLayout {public navbarpullupgsturepanel (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, "navbarpullupgsturepanel 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, "navbarpullupgsturepanel tp_down mPosX =" + mPosX + ", mPosY =" + mPosY);} else if (MotionEvent. ACTION_MOVE = ev Ent. getAction () {mCurrentPosX = (int) event. getX (); mCurrentPosY = (int) event. getY (); if (DEBUG_NAV_BAR_PULL_UP_GESTURE) Log. d (optional, "required 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, "NavBarP Ullupgsturepanel 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, "Push up position" + mPosX + "move position" + 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 (dependencies, "navbarpullupgsturepanel tp_down mPosX =" + mPosX + ", mPosY =" + mPosY + ", orientation =" + orientation); if (orientation = Configuration. ORIENTATION_LANDSCAPE) {if (mPosY> = 540 & mPosY <= 600) {NavBarDisp LayGesture () ;}} else if (orientation = Configuration. ORIENTATION_PORTRAIT) {if (mPosY> = 940 & mPosY <= 1024) {NavBarDisplayGesture () ;}}return true ;}@ Override public boolean onGenericMotionEvent (MotionEvent) {final int source = event. getSource ();/* if (source & InputDevice. SOURCE_CLASS_POINTER )! = 0) {mGestureRecognizer. onTouchEvent (event);} */return true;} private void upload () {if (mnavbarpullupgstureview = null) {mnavbarpullupgstureview = new navbarpullupgsturepanel (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 ("navbarpullupgsturepanel"); WindowManager wm = (WindowManager) mContext. getSystemService (Context. WINDOW_SERVICE); wm. ad DView (mnavbarpullupgstureview, lp); if (DEBUG_NAV_BAR_PULL_UP_GESTURE) Log. d (TAG_NAV_BAR_PULL_UP_GESTURE, "enablenavbarpullupgsture"); mnavbarpullupgstureinputchannel = mWindowManagerFuncs. monitorInput ("navbarpullupgsture"); mnavbarpullupgstureinputeventreceiver = new navbarpullupgstureinputeventventer (mnavbarpullupgstureinputchannel, Looper. myLooper (), mnavbarpullupgstureview);} priva Te void disablenavbarpullupgsture () {if (latency) Log. d (TAG_NAV_BAR_PULL_UP_GESTURE, "disablenavbarpullupgsture"); if (mnavbarpullupgstureinputeventreceiver! = Null) {mnavbarpullupgstureinputeventreceiver. dispose (); mnavbarpullupgstureinputeventventer = null;} if (mnavbarpullupgstureinputchannel! = Null) {mnavbarpullupgstureinputchannel. dispose (); mnavbarpullupgstureinputchannel = null;} if (mnavbarpullupgstureview! = Null) {WindowManager wm = (WindowManager) mContext. getSystemService (Context. WINDOW_SERVICE); wm. removeView (mnavbarpullupgstureview); mnavbarpullupgstureview = null; }}// end nav down by cbk}