From 663f0f2da9fd57916d5c575a264d8afe7743eb4a Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Fri, 4 Mar 2011 16:45:02 -0500 Subject: [PATCH] When the user touches a peeked notification, reset the fadeout timer. We do this regardless of whether there are custom controls mostly to keep things simple. NB: This change also reduces the fade time to 3sec from 5, which has always seemed too long but was necessary to make interacting with Music possible. Now that you can keep a notification open arbitrarily long by putting your finger on it, a shorter timeout is acceptable. Bug: 3456677 Change-Id: I674abfcc0fa757f838b98ed9d5d46ba785a95cfa --- .../tablet/NotificationPeekPanel.java | 15 +++++++++++++ .../statusbar/tablet/TabletStatusBar.java | 21 ++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPeekPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPeekPanel.java index 744f6675b92c0..8b682403fb297 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPeekPanel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPeekPanel.java @@ -18,11 +18,15 @@ package com.android.systemui.statusbar.tablet; import android.content.Context; import android.util.AttributeSet; +import android.util.Slog; +import android.view.MotionEvent; import android.widget.RelativeLayout; import com.android.systemui.R; public class NotificationPeekPanel extends RelativeLayout implements StatusBarPanel { + TabletStatusBar mBar; + public NotificationPeekPanel(Context context, AttributeSet attrs) { this(context, attrs, 0); } @@ -39,5 +43,16 @@ public class NotificationPeekPanel extends RelativeLayout implements StatusBarPa return x >= l && x < r && y >= t && y < b; } + public void setBar(TabletStatusBar bar) { + mBar = bar; + } + + // We don't really want to intercept the touch event, but we *do* want to reset the fade timer + // in case the user is interacting with some custom controls or something. + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + mBar.resetNotificationPeekFadeTimer(); + return false; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index 45571055f8152..58c4d5a92bdc4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -217,6 +217,8 @@ public class TabletStatusBar extends StatusBar implements // Notification preview window mNotificationPeekWindow = (NotificationPeekPanel) View.inflate(context, R.layout.status_bar_notification_peek, null); + mNotificationPeekWindow.setBar(this); + mNotificationPeekRow = (ViewGroup) mNotificationPeekWindow.findViewById(R.id.content); mNotificationPeekWindow.setVisibility(View.GONE); mNotificationPeekWindow.setOnTouchListener( @@ -1211,10 +1213,20 @@ public class TabletStatusBar extends StatusBar implements } } - private class NotificationIconTouchListener implements View.OnTouchListener { - final static int NOTIFICATION_PEEK_HOLD_THRESH = 200; // ms - final static int NOTIFICATION_PEEK_FADE_DELAY = 5000; // ms + final static int NOTIFICATION_PEEK_HOLD_THRESH = 200; // ms + final static int NOTIFICATION_PEEK_FADE_DELAY = 3000; // ms + public void resetNotificationPeekFadeTimer() { + if (DEBUG) { + Slog.d(TAG, "setting peek fade timer for " + NOTIFICATION_PEEK_FADE_DELAY + + "ms from now"); + } + mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK); + mHandler.sendEmptyMessageDelayed(MSG_CLOSE_NOTIFICATION_PEEK, + NOTIFICATION_PEEK_FADE_DELAY); + } + + private class NotificationIconTouchListener implements View.OnTouchListener { VelocityTracker mVT; int mPeekIndex; float mInitialTouchX, mInitialTouchY; @@ -1303,8 +1315,7 @@ public class TabletStatusBar extends StatusBar implements } if (peeking) { - mHandler.sendEmptyMessageDelayed(MSG_CLOSE_NOTIFICATION_PEEK, - NOTIFICATION_PEEK_FADE_DELAY); + resetNotificationPeekFadeTimer(); } mVT.recycle();