Merge "Fixed the remove animations for notification children" into nyc-dev

am: 37a4027131

* commit '37a4027131f80709c27a81be0b426b60d33dd6c7':
  Fixed the remove animations for notification children

Change-Id: I31ac58e09ac980df5008e87b46c0d268d93fabe5
This commit is contained in:
Selim Cinek
2016-05-16 19:49:53 +00:00
committed by android-build-merger
4 changed files with 37 additions and 15 deletions

View File

@@ -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();
}

View File

@@ -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++) {

View File

@@ -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);
}
}

View File

@@ -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);