summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/statusbar
diff options
context:
space:
mode:
authorSelim Cinek <cinek@google.com>2015-04-10 17:54:46 -0700
committerSelim Cinek <cinek@google.com>2015-04-15 12:58:39 -0700
commit1f3f544f21cab3728f749ab66cd6859e9dfcf389 (patch)
treed2082ea2826bcbe4bb70a4579cce61418e350cee /packages/SystemUI/src/com/android/systemui/statusbar
parentd2281151ee18f5fd530bc062c59b3f77082317bf (diff)
downloadframeworks_base-1f3f544f21cab3728f749ab66cd6859e9dfcf389.zip
frameworks_base-1f3f544f21cab3728f749ab66cd6859e9dfcf389.tar.gz
frameworks_base-1f3f544f21cab3728f749ab66cd6859e9dfcf389.tar.bz2
Fixed more heads up bugs
Change-Id: Ibfb6656deb3bc588fc9292a672a5e4d4d1de4d23
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/statusbar')
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java31
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java4
9 files changed, 71 insertions, 32 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index b759684..fa1ec0f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -643,9 +643,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
}
mMaxExpandHeight = expandedChild.getHeight();
View headsUpChild = mPrivateLayout.getHeadsUpChild();
- if (headsUpChild != null) {
- mHeadsUpHeight = headsUpChild.getHeight();
+ if (headsUpChild == null) {
+ headsUpChild = mPrivateLayout.getContractedChild();
}
+ mHeadsUpHeight = headsUpChild.getHeight();
if (intrinsicBefore != getIntrinsicHeight()) {
notifyHeightChanged(false /* needsAnimation */);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index 7403f93..964d75f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -51,8 +51,8 @@ public class NotificationContentView extends FrameLayout {
private NotificationViewWrapper mContractedWrapper;
- private int mSmallHeight;
- private int mHeadsUpHeight;
+ private final int mSmallHeight;
+ private final int mHeadsUpHeight;
private int mClipTopAmount;
private int mContentHeight;
@@ -77,6 +77,8 @@ public class NotificationContentView extends FrameLayout {
public NotificationContentView(Context context, AttributeSet attrs) {
super(context, attrs);
mFadePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD));
+ mSmallHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height);
+ mHeadsUpHeight = getResources().getDimensionPixelSize(R.dimen.notification_mid_height);
reset(true);
}
@@ -150,8 +152,7 @@ public class NotificationContentView extends FrameLayout {
removeAllViews();
mContractedChild = null;
mExpandedChild = null;
- mSmallHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height);
- mHeadsUpHeight = getResources().getDimensionPixelSize(R.dimen.notification_mid_height);
+ mHeadsUpChild = null;
mVisibleView = CONTRACTED;
if (resetActualHeight) {
mContentHeight = mSmallHeight;
@@ -175,7 +176,6 @@ public class NotificationContentView extends FrameLayout {
mContractedChild.animate().cancel();
removeView(mContractedChild);
}
- sanitizeLayoutParams(child, mSmallHeight);
addView(child);
mContractedChild = child;
mContractedWrapper = NotificationViewWrapper.wrap(getContext(), child);
@@ -259,12 +259,6 @@ public class NotificationContentView extends FrameLayout {
setClipBounds(mClipBounds);
}
- private void sanitizeLayoutParams(View contractedChild, int height) {
- LayoutParams lp = (LayoutParams) contractedChild.getLayoutParams();
- lp.height = height;
- contractedChild.setLayoutParams(lp);
- }
-
private void selectLayout(boolean animate, boolean force) {
if (mContractedChild == null) {
return;
@@ -337,8 +331,8 @@ public class NotificationContentView extends FrameLayout {
private int calculateVisibleView() {
boolean noExpandedChild = mExpandedChild == null;
- if (mIsHeadsUp) {
- if (mContentHeight <= mHeadsUpHeight || noExpandedChild) {
+ if (mIsHeadsUp && mHeadsUpChild != null) {
+ if (mContentHeight <= mHeadsUpChild.getHeight() || noExpandedChild) {
return HEADSUP;
} else {
return EXPANDED;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
index 386be7e..3997807 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
@@ -89,7 +89,6 @@ public class HeadsUpTouchHelper implements Gefingerpoken {
mCollapseSnoozes = h < 0;
mInitialTouchX = x;
mInitialTouchY = y;
- mHeadsUpManager.releaseAllToShade();
int expandedHeight = mPickedChild.getActualHeight();
mPanel.startExpandMotion(x, y, true /* startTracking */, expandedHeight);
return true;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index f0e8b20..ade1a33 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -45,6 +45,7 @@ import com.android.systemui.EventLogTags;
import com.android.systemui.R;
import com.android.systemui.qs.QSContainer;
import com.android.systemui.qs.QSPanel;
+import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.statusbar.GestureRecorder;
@@ -1445,7 +1446,7 @@ public class NotificationPanelView extends PanelView implements
updateHeader();
updateUnlockIcon();
updateNotificationTranslucency();
- mHeadsUpManager.setIsExpanded(!isShadeCollapsed());
+ mHeadsUpManager.setIsExpanded(expandedHeight != 0);
mNotificationStackScroller.setShadeExpanded(!isShadeCollapsed());
if (DEBUG) {
invalidate();
@@ -2154,6 +2155,11 @@ public class NotificationPanelView extends PanelView implements
}
@Override
+ public void OnHeadsUpPinned(ExpandableNotificationRow headsUp) {
+ mNotificationStackScroller.generateHeadsUpAnimation(headsUp, true);
+ }
+
+ @Override
public void OnHeadsUpStateChanged(NotificationData.Entry entry, boolean isHeadsUp) {
mNotificationStackScroller.generateHeadsUpAnimation(entry.row, isHeadsUp);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index c40a0c1..3b02911 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1845,6 +1845,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
@Override
+ public void OnHeadsUpPinned(ExpandableNotificationRow headsUp) {
+ }
+
+ @Override
public void OnHeadsUpStateChanged(Entry entry, boolean isHeadsUp) {
if (!isHeadsUp && mHeadsUpEntriesToRemoveOnSwitch.contains(entry)) {
removeNotification(entry.key, mLatestRankingMap);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
index 85ff59a..d226014 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
@@ -156,7 +156,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
if (alert) {
HeadsUpEntry headsUpEntry = mHeadsUpEntries.get(headsUp.key);
headsUpEntry.updateEntry();
- headsUpEntry.entry.row.setInShade(mIsExpanded);
+ setEntryToShade(headsUpEntry, mIsExpanded);
}
}
@@ -168,22 +168,35 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
mHeadsUpEntries.put(entry.key, headsUpEntry);
entry.row.setHeadsUp(true);
if (!entry.row.isInShade() && mIsExpanded) {
- headsUpEntry.entry.row.setInShade(true);
+ setEntryToShade(headsUpEntry, true);
}
- updatePinnedHeadsUpState(false);
+ updatePinnedHeadsUpState(false /*forceImmediate */);
for (OnHeadsUpChangedListener listener : mListeners) {
listener.OnHeadsUpStateChanged(entry, true);
}
entry.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
}
+ private void setEntryToShade(HeadsUpEntry headsUpEntry, boolean inShade) {
+ ExpandableNotificationRow row = headsUpEntry.entry.row;
+ if (row.isInShade() != inShade) {
+ row.setInShade(inShade);
+ updatePinnedHeadsUpState(false /* forceImmediate */);
+ if (!inShade) {
+ for (OnHeadsUpChangedListener listener :mListeners) {
+ listener.OnHeadsUpPinned(row);
+ }
+ }
+ }
+ }
+
private void removeHeadsUpEntry(NotificationData.Entry entry) {
HeadsUpEntry remove = mHeadsUpEntries.remove(entry.key);
mSortedEntries.remove(remove);
mEntryPool.release(remove);
entry.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
entry.row.setHeadsUp(false);
- updatePinnedHeadsUpState(false);
+ updatePinnedHeadsUpState(false /* forceImmediate */);
for (OnHeadsUpChangedListener listener : mListeners) {
listener.OnHeadsUpStateChanged(entry, false);
}
@@ -392,7 +405,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
HeadsUpEntry entry = mHeadsUpEntries.get(key);
entry.entry.row.setInShade(true);
}
- updatePinnedHeadsUpState(true);
+ updatePinnedHeadsUpState(true /* forceImmediate */);
}
public void onExpandingFinished() {
@@ -412,7 +425,12 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
}
public void setIsExpanded(boolean isExpanded) {
- mIsExpanded = isExpanded;
+ if (isExpanded != mIsExpanded) {
+ mIsExpanded = isExpanded;
+ if (isExpanded) {
+ releaseAllToShade();
+ }
+ }
}
public int getTopHeadsUpHeight() {
@@ -495,6 +513,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
public interface OnHeadsUpChangedListener {
void OnPinnedHeadsUpExistChanged(boolean exist, boolean changeImmediatly);
+ void OnHeadsUpPinned(ExpandableNotificationRow headsUp);
void OnHeadsUpStateChanged(NotificationData.Entry entry, boolean isHeadsUp);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index da4cc7e..4d7f8c1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -621,7 +621,7 @@ public class NotificationStackScrollLayout extends ViewGroup
requestChildrenUpdate();
}
- private boolean isPinnedHeadsUp(View v) {
+ public boolean isPinnedHeadsUp(View v) {
if (v instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) v;
return row.isHeadsUp() && !row.isInShade();
@@ -1875,7 +1875,7 @@ public class NotificationStackScrollLayout extends ViewGroup
boolean onBottom = false;
if (!row.isInShade() && !isHeadsUp) {
type = AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR;
- } else if (mAddedHeadsUpChildren.contains(row)) {
+ } else if (mAddedHeadsUpChildren.contains(row) || (!row.isInShade() && !mIsExpanded)) {
if (!row.isInShade() || shouldHunAppearFromBottom(row)) {
// Our custom add animation
type = AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
index 5dbcce8..54ed04c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -515,17 +515,29 @@ public class StackScrollAlgorithm {
for (HeadsUpManager.HeadsUpEntry entry: headsUpEntries) {
ExpandableNotificationRow row = entry.entry.row;
StackViewState childState = resultState.getViewStateForView(row);
+ ExpandableNotificationRow topHeadsUpEntry = ambientState.getTopHeadsUpEntry();
+ boolean isTopEntry = topHeadsUpEntry == row;
if (!row.isInShade()) {
childState.yTranslation = 0;
+ childState.height = row.getHeadsUpHeight();
+ if (!isTopEntry) {
+ // Ensure that a headsUp is never below the topmost headsUp
+ StackViewState topState = resultState.getViewStateForView(topHeadsUpEntry);
+ childState.height = row.getHeadsUpHeight();
+ childState.yTranslation = Math.min(childState.yTranslation,
+ topState.yTranslation + topState.height - childState.height);
+ }
+ } else if (mIsExpanded) {
+ if (isTopEntry) {
+ childState.height += row.getHeadsUpHeight() - mCollapsedSize;
+ }
+ childState.height = Math.max(childState.height, row.getHeadsUpHeight());
+ // Ensure that the heads up is always visible even when scrolled of from the bottom
+ float bottomPosition = ambientState.getMaxHeadsUpTranslation() - childState.height;
+ childState.yTranslation = Math.min(childState.yTranslation,
+ bottomPosition);
}
- if (ambientState.getTopHeadsUpEntry() == row) {
- childState.height += row.getHeadsUpHeight() - mCollapsedSize;
- }
- childState.height = Math.max(childState.height, row.getHeadsUpHeight());
- // Ensure that the heads up is always visible even when scrolled of from the bottom
- childState.yTranslation = Math.min(childState.yTranslation,
- ambientState.getMaxHeadsUpTranslation() - childState.height);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
index 75b4117..4a705b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
@@ -183,6 +183,10 @@ public class StackStateAnimator {
// This is a heads up animation
return false;
}
+ if (mHostLayout.isPinnedHeadsUp(child)) {
+ // This is another headsUp which might move. Let's animate!
+ return false;
+ }
finalState.applyState(child, viewState);
return true;
}