Merge "Fixed that views could be stuck transiently at times" into pi-dev

This commit is contained in:
Selim Cinek
2018-05-15 16:47:17 +00:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 29 deletions

View File

@@ -292,7 +292,7 @@ public class NotificationStackScrollLayout extends ViewGroup
private int[] mTempInt2 = new int[2];
private boolean mGenerateChildOrderChangedEvent;
private HashSet<Runnable> mAnimationFinishedRunnables = new HashSet<>();
private HashSet<View> mClearOverlayViewsWhenFinished = new HashSet<>();
private HashSet<ExpandableView> mClearTransientViewsWhenFinished = new HashSet<>();
private HashSet<Pair<ExpandableNotificationRow, Boolean>> mHeadsUpChangeAnimations
= new HashSet<>();
private HeadsUpManagerPhone mHeadsUpManager;
@@ -2831,8 +2831,8 @@ public class NotificationStackScrollLayout extends ViewGroup
return false;
}
if (isClickedHeadsUp(child)) {
// An animation is already running, add it to the Overlay
mClearOverlayViewsWhenFinished.add(child);
// An animation is already running, add it transiently
mClearTransientViewsWhenFinished.add((ExpandableView) child);
return true;
}
if (mIsExpanded && mAnimationsEnabled && !isChildInInvisibleGroup(child)) {
@@ -3622,7 +3622,7 @@ public class NotificationStackScrollLayout extends ViewGroup
}
private void clearTemporaryViews() {
// lets make sure nothing is in the overlay / transient anymore
// lets make sure nothing is transient anymore
clearTemporaryViewsInGroup(this);
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = (ExpandableView) getChildAt(i);
@@ -3637,9 +3637,6 @@ public class NotificationStackScrollLayout extends ViewGroup
while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
viewGroup.removeTransientView(viewGroup.getTransientView(0));
}
if (viewGroup != null) {
viewGroup.getOverlay().clear();
}
}
public void onPanelTrackingStarted() {
@@ -3747,7 +3744,7 @@ public class NotificationStackScrollLayout extends ViewGroup
setAnimationRunning(false);
requestChildrenUpdate();
runAnimationFinishedRunnables();
clearViewOverlays();
clearTransient();
clearHeadsUpDisappearRunning();
}
@@ -3766,11 +3763,11 @@ public class NotificationStackScrollLayout extends ViewGroup
}
}
private void clearViewOverlays() {
for (View view : mClearOverlayViewsWhenFinished) {
StackStateAnimator.removeFromOverlay(view);
private void clearTransient() {
for (ExpandableView view : mClearTransientViewsWhenFinished) {
StackStateAnimator.removeTransientView(view);
}
mClearOverlayViewsWhenFinished.clear();
mClearTransientViewsWhenFinished.clear();
}
private void runAnimationFinishedRunnables() {

View File

@@ -419,9 +419,6 @@ public class StackStateAnimator {
}, null);
} else if (event.animationType ==
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) {
// A race condition can trigger the view to be added to the overlay even though
// it was fully swiped out. So let's remove it
mHostLayout.getOverlay().remove(changingView);
if (Math.abs(changingView.getTranslation()) == changingView.getWidth()
&& changingView.getTransientContainer() != null) {
changingView.getTransientContainer().removeTransientView(changingView);
@@ -469,8 +466,9 @@ public class StackStateAnimator {
? ANIMATION_DELAY_HEADS_UP_CLICKED
: 0;
if (changingView.getParent() == null) {
// This notification was actually removed, so we need to add it to the overlay
mHostLayout.getOverlay().add(changingView);
// This notification was actually removed, so we need to add it transiently
mHostLayout.addTransientView(changingView, 0);
changingView.setTransientContainer(mHostLayout);
mTmpState.initFrom(changingView);
mTmpState.yTranslation = 0;
// We temporarily enable Y animations, the real filter will be combined
@@ -479,10 +477,7 @@ public class StackStateAnimator {
mAnimationProperties.delay = extraDelay + ANIMATION_DELAY_HEADS_UP;
mAnimationProperties.duration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR;
mTmpState.animateTo(changingView, mAnimationProperties);
endRunnable = () -> {
// remove the temporary overlay
removeFromOverlay(changingView);
};
endRunnable = () -> removeTransientView(changingView);
}
float targetLocation = 0;
boolean needsAnimation = true;
@@ -517,19 +512,12 @@ public class StackStateAnimator {
}
}
private static void removeTransientView(ExpandableView viewToRemove) {
public static void removeTransientView(ExpandableView viewToRemove) {
if (viewToRemove.getTransientContainer() != null) {
viewToRemove.getTransientContainer().removeTransientView(viewToRemove);
}
}
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);