diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 5cea28db8fb59..8a927576bed07 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -38,4 +38,6 @@
56dip
4dip
+
+ 5dp
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index dab8b722ea3bb..493bd935f4532 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -206,6 +206,7 @@ public class StatusBarService extends IStatusBar.Stub
private boolean mTicking;
// Tracking finger for opening/closing.
+ int mEdgeBorder; // corresponds to R.dimen.status_bar_edge_ignore
boolean mTracking;
VelocityTracker mVelocityTracker;
@@ -299,6 +300,8 @@ public class StatusBarService extends IStatusBar.Stub
mCloseView = (CloseDragHandle)mTrackingView.findViewById(R.id.close);
mCloseView.mService = this;
+ mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
+
// add the more icon for the notifications
IconData moreData = IconData.makeIcon(null, context.getPackageName(),
R.drawable.stat_notify_more, 0, 42);
@@ -1204,8 +1207,10 @@ public class StatusBarService extends IStatusBar.Stub
}
boolean interceptTouchEvent(MotionEvent event) {
- if (SPEW) Log.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled="
+ if (SPEW) {
+ Log.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled="
+ mDisabled);
+ }
if ((mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) {
return false;
@@ -1214,7 +1219,7 @@ public class StatusBarService extends IStatusBar.Stub
final int statusBarSize = mStatusBarView.getHeight();
final int hitSize = statusBarSize*2;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
- int y = (int)event.getRawY();
+ final int y = (int)event.getRawY();
if (!mExpanded) {
mViewDelta = statusBarSize - y;
@@ -1224,8 +1229,16 @@ public class StatusBarService extends IStatusBar.Stub
}
if ((!mExpanded && y < hitSize) ||
(mExpanded && y > (mDisplay.getHeight()-hitSize))) {
- prepareTracking(y, !mExpanded); // opening if we're not already fully visible
- mVelocityTracker.addMovement(event);
+
+ // We drop events at the edge of the screen to make the windowshade come
+ // down by accident less, especially when pushing open a device with a keyboard
+ // that rotates (like g1 and droid)
+ int x = (int)event.getRawX();
+ final int edgeBorder = mEdgeBorder;
+ if (x >= edgeBorder && x < mDisplay.getWidth() - edgeBorder) {
+ prepareTracking(y, !mExpanded);// opening if we're not already fully visible
+ mVelocityTracker.addMovement(event);
+ }
}
} else if (mTracking) {
mVelocityTracker.addMovement(event);
@@ -1771,10 +1784,15 @@ public class StatusBarService extends IStatusBar.Stub
* meantime, just update the things that we know change.
*/
void updateResources() {
+ Resources res = mContext.getResources();
+
mClearButton.setText(mContext.getText(R.string.status_bar_clear_all_button));
mOngoingTitle.setText(mContext.getText(R.string.status_bar_ongoing_events_title));
mLatestTitle.setText(mContext.getText(R.string.status_bar_latest_events_title));
mNoNotificationsTitle.setText(mContext.getText(R.string.status_bar_no_notifications_title));
+
+ mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
+
if (false) Log.v(TAG, "updateResources");
}