TabletStatusBarView.java revision f68b500bb0d4c24ccabb40284f97981d50f888a8
1b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato/* 2b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * Copyright (C) 2010 The Android Open Source Project 3b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * 4b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 5b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * you may not use this file except in compliance with the License. 6b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * You may obtain a copy of the License at 7b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * 8b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 9b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * 10b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * Unless required by applicable law or agreed to in writing, software 11b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 12b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * See the License for the specific language governing permissions and 14b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato * limitations under the License. 15b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato */ 16b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 17b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratopackage com.android.systemui.statusbar.tablet; 18b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 19b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratoimport android.content.Context; 20b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratoimport android.os.Handler; 21b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratoimport android.util.AttributeSet; 22b6d3dc68977eada24515a825c43eb01df9a4edb5Daniel Sandlerimport android.util.Slog; 23b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratoimport android.view.View; 24b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratoimport android.view.MotionEvent; 25b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratoimport android.widget.FrameLayout; 26b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 27b62ac127824e9723534a197189eca58d30f15d3dJoe Onoratopublic class TabletStatusBarView extends FrameLayout { 28b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato private Handler mHandler; 29b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 3082beadfa067b1e286fa604f8d7960d769411c954satok private final View[] mIgnoreChildren = new View[4]; 3182beadfa067b1e286fa604f8d7960d769411c954satok private final View[] mPanels = new View[4]; 3282beadfa067b1e286fa604f8d7960d769411c954satok private final int[] mPos = new int[2]; 33b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 34b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato public TabletStatusBarView(Context context) { 35b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato super(context); 36b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 37b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 38b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato public TabletStatusBarView(Context context, AttributeSet attrs) { 39b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato super(context, attrs); 40b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 41b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 4282beadfa067b1e286fa604f8d7960d769411c954satok @Override 43b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato public boolean onInterceptTouchEvent(MotionEvent ev) { 44b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato if (ev.getAction() == MotionEvent.ACTION_DOWN) { 45b6d3dc68977eada24515a825c43eb01df9a4edb5Daniel Sandler if (TabletStatusBar.DEBUG) { 46b6d3dc68977eada24515a825c43eb01df9a4edb5Daniel Sandler Slog.d(TabletStatusBar.TAG, "TabletStatusBarView intercepting touch event: " + ev); 47b6d3dc68977eada24515a825c43eb01df9a4edb5Daniel Sandler } 48fd52b18d9bf3cd62c7a07058536e9f97db65beeaJoe Onorato mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_NOTIFICATION_PANEL); 49fd52b18d9bf3cd62c7a07058536e9f97db65beeaJoe Onorato mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_NOTIFICATION_PANEL); 50fd52b18d9bf3cd62c7a07058536e9f97db65beeaJoe Onorato mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_RECENTS_PANEL); 51fd52b18d9bf3cd62c7a07058536e9f97db65beeaJoe Onorato mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_RECENTS_PANEL); 5282beadfa067b1e286fa604f8d7960d769411c954satok mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_INPUT_METHODS_PANEL); 5382beadfa067b1e286fa604f8d7960d769411c954satok mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_INPUT_METHODS_PANEL); 54b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 5544c66fe2cd912fcea2e9824eb421d5c8d9ffadbdJim Miller for (int i=0; i < mPanels.length; i++) { 5644c66fe2cd912fcea2e9824eb421d5c8d9ffadbdJim Miller if (mPanels[i] != null && mPanels[i].getVisibility() == View.VISIBLE) { 57b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato if (eventInside(mIgnoreChildren[i], ev)) { 58b6d3dc68977eada24515a825c43eb01df9a4edb5Daniel Sandler if (TabletStatusBar.DEBUG) { 5982beadfa067b1e286fa604f8d7960d769411c954satok Slog.d(TabletStatusBar.TAG, 6082beadfa067b1e286fa604f8d7960d769411c954satok "TabletStatusBarView eating event for view: " 6182beadfa067b1e286fa604f8d7960d769411c954satok + mIgnoreChildren[i]); 62b6d3dc68977eada24515a825c43eb01df9a4edb5Daniel Sandler } 63b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato return true; 64b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 65b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 66b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 67b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 68f68b500bb0d4c24ccabb40284f97981d50f888a8Joe Onorato if (TabletStatusBar.DEBUG) { 69f68b500bb0d4c24ccabb40284f97981d50f888a8Joe Onorato Slog.d(TabletStatusBar.TAG, "TabletStatusBarView not intercepting event"); 70f68b500bb0d4c24ccabb40284f97981d50f888a8Joe Onorato } 71b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato return super.onInterceptTouchEvent(ev); 72b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 73b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 74b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato private boolean eventInside(View v, MotionEvent ev) { 75b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato // assume that x and y are window coords because we are. 76b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int x = (int)ev.getX(); 77b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int y = (int)ev.getY(); 78b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 79b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int[] p = mPos; 80b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato v.getLocationInWindow(p); 81b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 82b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int l = p[0]; 83b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int t = p[1]; 84b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int r = p[0] + v.getWidth(); 85b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato final int b = p[1] + v.getHeight(); 86b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 87b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato return x >= l && x < r && y >= t && y < b; 88b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 89b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 90b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato public void setHandler(Handler h) { 91b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato mHandler = h; 92b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 93b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato 94b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato public void setIgnoreChildren(int index, View ignore, View panel) { 95b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato mIgnoreChildren[index] = ignore; 96b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato mPanels[index] = panel; 97b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato } 98b62ac127824e9723534a197189eca58d30f15d3dJoe Onorato} 99