summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java14
4 files changed, 37 insertions, 15 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 3a1752dda756..b4ce9cda3624 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -329,7 +329,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
if (mChildrenContainer != null) {
mChildrenContainer.removeNotification(row);
}
- mHeaderUtil.restoreNotificationHeader(row);
+ if (!row.isRemoved()) {
+ mHeaderUtil.restoreNotificationHeader(row);
+ }
onChildrenCountChanged();
row.setIsChildInGroup(false, null);
}
@@ -644,7 +646,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
continue;
}
mChildrenContainer.removeNotification(row);
- mHeaderUtil.restoreNotificationHeader(row);
+ if (!row.isRemoved()) {
+ mHeaderUtil.restoreNotificationHeader(row);
+ }
row.setIsChildInGroup(false, null);
}
onChildrenCountChanged();
@@ -1338,6 +1342,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
@Override
protected View getContentView() {
+ if (mIsSummaryWithChildren) {
+ return mChildrenContainer;
+ }
return getShowingLayout();
}
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 76fb41685567..4bb97974b88b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1505,6 +1505,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mHeadsUpEntriesToRemoveOnSwitch.add(mHeadsUpManager.getEntry(key));
return;
}
+ Entry entry = mNotificationData.get(key);
+ if (entry != null && entry.row != null) {
+ entry.row.setRemoved(true);
+ }
// Let's remove the children if this was a summary
handleGroupSummaryRemoved(key, ranking);
StatusBarNotification old = removeNotificationViews(key, ranking);
@@ -1544,12 +1548,13 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// always cancelled. We only remove them if they were dismissed by the user.
return;
}
- entry.row.setRemoved(true);
List<ExpandableNotificationRow> notificationChildren =
entry.row.getNotificationChildren();
ArrayList<ExpandableNotificationRow> toRemove = new ArrayList<>(notificationChildren);
for (int i = 0; i < toRemove.size(); i++) {
toRemove.get(i).setKeepInParent(true);
+ // we need to set this state earlier as otherwise we might generate some weird
+ // animations
toRemove.get(i).setRemoved(true);
}
for (int i = 0; i < toRemove.size(); i++) {
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 06412758727c..1edaa0f6b68d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -2188,7 +2188,7 @@ public class NotificationStackScrollLayout extends ViewGroup
}
}
- private void onViewRemovedInternal(View child, ViewGroup transientContainer) {
+ private void onViewRemovedInternal(View child, ViewGroup container) {
if (mChangePositionInProgress) {
// This is only a position change, don't do anything special
return;
@@ -2200,10 +2200,10 @@ public class NotificationStackScrollLayout extends ViewGroup
boolean animationGenerated = generateRemoveAnimation(child);
if (animationGenerated) {
if (!mSwipedOutViews.contains(child)) {
- getOverlay().add(child);
+ container.getOverlay().add(child);
} else if (Math.abs(expandableView.getTranslation()) != expandableView.getWidth()) {
- transientContainer.addTransientView(child, 0);
- expandableView.setTransientContainer(transientContainer);
+ container.addTransientView(child, 0);
+ expandableView.setTransientContainer(container);
}
} else {
mSwipedOutViews.remove(child);
@@ -2885,22 +2885,24 @@ public class NotificationStackScrollLayout extends ViewGroup
mPhoneStatusBar.resetUserExpandedStates();
// lets make sure nothing is in the overlay / transient anymore
- clearTransientViews(this);
+ clearTemporaryViews(this);
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = (ExpandableView) getChildAt(i);
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
- clearTransientViews(row.getChildrenContainer());
+ clearTemporaryViews(row.getChildrenContainer());
}
}
- getOverlay().clear();
}
}
- private void clearTransientViews(ViewGroup viewGroup) {
+ private void clearTemporaryViews(ViewGroup viewGroup) {
while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
viewGroup.removeTransientView(viewGroup.getTransientView(0));
}
+ if (viewGroup != null) {
+ viewGroup.getOverlay().clear();
+ }
}
public void onPanelTrackingStarted() {
@@ -3020,7 +3022,7 @@ public class NotificationStackScrollLayout extends ViewGroup
private void clearViewOverlays() {
for (View view : mClearOverlayViewsWhenFinished) {
- getOverlay().remove(view);
+ StackStateAnimator.removeFromOverlay(view);
}
}
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 e8472ac5c8d5..0c08d1303aaa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
@@ -22,6 +22,7 @@ import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.view.View;
+import android.view.ViewGroup;
import android.view.animation.Interpolator;
import com.android.systemui.Interpolators;
@@ -797,7 +798,7 @@ public class StackStateAnimator {
private void onAnimationFinished() {
mHostLayout.onChildAnimationFinished();
for (View v : mChildrenToClearFromOverlay) {
- mHostLayout.getOverlay().remove(v);
+ removeFromOverlay(v);
}
mChildrenToClearFromOverlay.clear();
}
@@ -829,7 +830,7 @@ public class StackStateAnimator {
} else if (event.animationType ==
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE) {
if (changingView.getVisibility() == View.GONE) {
- mHostLayout.getOverlay().remove(changingView);
+ removeFromOverlay(changingView);
continue;
}
@@ -854,7 +855,7 @@ public class StackStateAnimator {
@Override
public void run() {
// remove the temporary overlay
- mHostLayout.getOverlay().remove(changingView);
+ removeFromOverlay(changingView);
}
});
} else if (event.animationType ==
@@ -909,6 +910,13 @@ public class StackStateAnimator {
}
}
+ public static void removeFromOverlay(View changingView) {
+ ViewGroup parent = (ViewGroup) changingView.getParent();
+ if (parent != null) {
+ parent.removeView(changingView);
+ }
+ }
+
public void animateOverScrollToAmount(float targetAmount, final boolean onTop,
final boolean isRubberbanded) {
final float startOverScrollAmount = mHostLayout.getCurrentOverScrollAmount(onTop);