Fixed the remove animations for notification children
Previously the children container wasn't fading out. In addition was the child added to the wrong overlay leading to completely wrong animations for the children. Change-Id: I1ae395dc02cecb8629e509dfb55870f9c79d7854 Fixes: 27719756
This commit is contained in:
@@ -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();
|
||||
@@ -1330,6 +1334,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
|
||||
|
||||
@Override
|
||||
protected View getContentView() {
|
||||
if (mIsSummaryWithChildren) {
|
||||
return mChildrenContainer;
|
||||
}
|
||||
return getShowingLayout();
|
||||
}
|
||||
|
||||
|
||||
@@ -1485,6 +1485,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);
|
||||
@@ -1524,12 +1528,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++) {
|
||||
|
||||
@@ -2138,7 +2138,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;
|
||||
@@ -2150,10 +2150,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);
|
||||
@@ -2822,22 +2822,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() {
|
||||
@@ -2957,7 +2959,7 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
|
||||
private void clearViewOverlays() {
|
||||
for (View view : mClearOverlayViewsWhenFinished) {
|
||||
getOverlay().remove(view);
|
||||
StackStateAnimator.removeFromOverlay(view);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user