Merge "Reset HUN roundness after cancellation of disappearing animation" into udc-qpr-dev

This commit is contained in:
Omar Miatello
2023-07-28 15:59:46 +00:00
committed by Android (Google) Code Review
2 changed files with 54 additions and 5 deletions

View File

@@ -426,16 +426,21 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
updateAppearAnimationAlpha();
updateAppearRect();
mAppearAnimator.addListener(new AnimatorListenerAdapter() {
private boolean mWasCancelled;
private boolean mRunWithoutInterruptions;
@Override
public void onAnimationEnd(Animator animation) {
if (onFinishedRunnable != null) {
onFinishedRunnable.run();
}
if (!mWasCancelled) {
if (mRunWithoutInterruptions) {
enableAppearDrawing(false);
onAppearAnimationFinished(isAppearing);
}
// We need to reset the View state, even if the animation was cancelled
onAppearAnimationFinished(isAppearing);
if (mRunWithoutInterruptions) {
InteractionJankMonitor.getInstance().end(getCujType(isAppearing));
} else {
InteractionJankMonitor.getInstance().cancel(getCujType(isAppearing));
@@ -444,7 +449,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
@Override
public void onAnimationStart(Animator animation) {
mWasCancelled = false;
mRunWithoutInterruptions = true;
Configuration.Builder builder = Configuration.Builder
.withView(getCujType(isAppearing), ActivatableNotificationView.this);
InteractionJankMonitor.getInstance().begin(builder);
@@ -452,7 +457,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
@Override
public void onAnimationCancel(Animator animation) {
mWasCancelled = true;
mRunWithoutInterruptions = false;
}
});

View File

@@ -789,6 +789,50 @@ public class ExpandableNotificationRowTest extends SysuiTestCase {
assertThat(row.isExpanded()).isTrue();
}
@Test
public void onDisappearAnimationFinished_shouldSetFalse_headsUpAnimatingAway()
throws Exception {
final ExpandableNotificationRow row = mNotificationTestHelper.createRow();
// Initial state: suppose heads up animation in progress
row.setHeadsUpAnimatingAway(true);
assertThat(row.isHeadsUpAnimatingAway()).isTrue();
// on disappear animation ends
row.onAppearAnimationFinished(/* wasAppearing = */ false);
assertThat(row.isHeadsUpAnimatingAway()).isFalse();
}
@Test
public void onHUNAppear_cancelAppearDrawing_shouldResetAnimationState() throws Exception {
final ExpandableNotificationRow row = mNotificationTestHelper.createRow();
row.performAddAnimation(/* delay */ 0, /* duration */ 1000, /* isHeadsUpAppear */ true);
waitForIdleSync();
assertThat(row.isDrawingAppearAnimation()).isTrue();
row.cancelAppearDrawing();
waitForIdleSync();
assertThat(row.isDrawingAppearAnimation()).isFalse();
}
@Test
public void onHUNDisappear_cancelAppearDrawing_shouldResetAnimationState() throws Exception {
final ExpandableNotificationRow row = mNotificationTestHelper.createRow();
row.performAddAnimation(/* delay */ 0, /* duration */ 1000, /* isHeadsUpAppear */ false);
waitForIdleSync();
assertThat(row.isDrawingAppearAnimation()).isTrue();
row.cancelAppearDrawing();
waitForIdleSync();
assertThat(row.isDrawingAppearAnimation()).isFalse();
}
private void setDrawableIconsInImageView(CachingIconView icon, Drawable iconDrawable,
Drawable rightIconDrawable) {
ImageView iconView = mock(ImageView.class);