Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 663f0f2d authored by Daniel Sandler's avatar Daniel Sandler
Browse files

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
parent 013218b4
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+16 −5
Original line number Diff line number Diff line
@@ -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_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();