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
This commit is contained in:
Daniel Sandler
2011-03-04 16:45:02 -05:00
parent 013218b49e
commit 663f0f2da9
2 changed files with 31 additions and 5 deletions

View File

@@ -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;
}
}

View File

@@ -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();