Volume: Extend the volume dialog timeout for notifications.

Even when the condition panel is collapsed, increase the timeout
a bit to aid readability.

Bug:16237299
Change-Id: I36d01300a94f17e02ee35b5a6f549ed180532ad8
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
index 3570257..ad2cf75 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java
@@ -85,6 +85,7 @@
     private static final int FREE_DELAY = 10000;
     private static final int TIMEOUT_DELAY = 3000;
     private static final int TIMEOUT_DELAY_SHORT = 1500;
+    private static final int TIMEOUT_DELAY_COLLAPSED = 4500;
     private static final int TIMEOUT_DELAY_EXPANDED = 10000;
 
     private static final int MSG_VOLUME_CHANGED = 0;
@@ -591,11 +592,18 @@
 
     private void updateTimeoutDelay() {
         mTimeoutDelay = mActiveStreamType == AudioManager.STREAM_MUSIC ? TIMEOUT_DELAY_SHORT
-                : mZenPanelExpanded ? TIMEOUT_DELAY_EXPANDED : TIMEOUT_DELAY;
+                : mZenPanelExpanded ? TIMEOUT_DELAY_EXPANDED
+                : isZenPanelVisible() ? TIMEOUT_DELAY_COLLAPSED
+                : TIMEOUT_DELAY;
+    }
+
+    private boolean isZenPanelVisible() {
+        return mZenPanel != null && mZenPanel.getVisibility() == View.VISIBLE;
     }
 
     private void setZenPanelVisible(boolean visible) {
         if (LOGD) Log.d(mTag, "setZenPanelVisible " + visible + " mZenPanel=" + mZenPanel);
+        final boolean changing = visible != isZenPanelVisible();
         if (visible) {
             if (mZenPanel == null) {
                 mZenPanel = (ZenModePanel) mZenPanelStub.inflate();
@@ -629,6 +637,10 @@
                 mZenPanel.setVisibility(View.GONE);
             }
         }
+        if (changing) {
+            updateTimeoutDelay();
+            resetTimeout();
+        }
     }
 
     public void updateStates() {
@@ -1198,7 +1210,8 @@
     }
 
     private void resetTimeout() {
-        if (LOGD) Log.d(mTag, "resetTimeout at " + System.currentTimeMillis());
+        if (LOGD) Log.d(mTag, "resetTimeout at " + System.currentTimeMillis()
+                + " delay=" + mTimeoutDelay);
         removeMessages(MSG_TIMEOUT);
         sendEmptyMessageDelayed(MSG_TIMEOUT, mTimeoutDelay);
         removeMessages(MSG_USER_ACTIVITY);