Handling a few more border cases with HUNs

Also does sorting correctly now.
The status bar now allows touches below when a
heads-up is on.
Also fixes a few flashes when a heads up was
dismissed or appeared.

Change-Id: I4d90a07333ad2e5ea2a13704cdc9d9184716681a
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
index 824ba94..f2b971f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
@@ -17,11 +17,13 @@
 package com.android.systemui.statusbar.stack;
 
 import android.view.View;
+
 import com.android.systemui.statusbar.ActivatableNotificationView;
+import com.android.systemui.statusbar.ExpandableNotificationRow;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 
 import java.util.ArrayList;
-import java.util.TreeMap;
+import java.util.TreeSet;
 
 /**
  * A global state to track all input states for the algorithm.
@@ -37,7 +39,7 @@
     private boolean mDark;
     private boolean mHideSensitive;
     private HeadsUpManager mHeadsUpManager;
-    private float mPaddingOffset;
+    private float mStackTranslation;
     private int mLayoutHeight;
     private int mTopPadding;
     private boolean mShadeExpanded;
@@ -128,16 +130,16 @@
         mHeadsUpManager = headsUpManager;
     }
 
-    public TreeMap<String, HeadsUpManager.HeadsUpEntry> getHeadsUpEntries() {
-        return mHeadsUpManager.getEntries();
+    public TreeSet<HeadsUpManager.HeadsUpEntry> getSortedHeadsUpEntries() {
+        return mHeadsUpManager.getSortedEntries();
     }
 
-    public float getPaddingOffset() {
-        return mPaddingOffset;
+    public float getStackTranslation() {
+        return mStackTranslation;
     }
 
-    public void setPaddingOffset(float paddingOffset) {
-        mPaddingOffset = paddingOffset;
+    public void setStackTranslation(float stackTranslation) {
+        mStackTranslation = stackTranslation;
     }
 
     public int getLayoutHeight() {
@@ -148,7 +150,7 @@
         mLayoutHeight = layoutHeight;
     }
 
-    public int getTopPadding() {
+    public float getTopPadding() {
         return mTopPadding;
     }
 
@@ -157,7 +159,13 @@
     }
 
     public int getInnerHeight() {
-        return mLayoutHeight - mTopPadding;
+        return mLayoutHeight - mTopPadding - getTopHeadsUpPushIn();
+    }
+
+    private int getTopHeadsUpPushIn() {
+        ExpandableNotificationRow topHeadsUpEntry = getTopHeadsUpEntry();
+        return topHeadsUpEntry != null ? topHeadsUpEntry.getHeadsUpHeight()
+                - topHeadsUpEntry.getMinHeight(): 0;
     }
 
     public boolean isShadeExpanded() {
@@ -175,4 +183,9 @@
     public float getMaxHeadsUpTranslation() {
         return mMaxHeadsUpTranslation;
     }
+
+    public ExpandableNotificationRow getTopHeadsUpEntry() {
+        HeadsUpManager.HeadsUpEntry topEntry = mHeadsUpManager.getTopEntry();
+        return topEntry == null ? null : topEntry.entry.row;
+    }
 }