Fade out minimized view before animating expanded view

Currently, we essentially replace the minimized view in-place,
setting one view to GONE and the other to VISIBLE instantaneously.
This looks jarring; add an animation to quickly fade out the old
minimized view before running the normal entrance animation on the
expanded view.

Bug: 260707686
Test: manual (visual change)
Change-Id: Ib4213a3927533b2ed35f79823f798c2485cce28e
This commit is contained in:
Miranda Kephart
2023-03-02 16:02:41 -05:00
parent 99dc404b91
commit 0ad5750e93
3 changed files with 37 additions and 3 deletions

View File

@@ -346,9 +346,20 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
}
private void animateFromMinimized() {
mIsMinimized = false;
setExpandedView();
animateIn();
if (mEnterAnimator != null && mEnterAnimator.isRunning()) {
mEnterAnimator.cancel();
}
mEnterAnimator = mView.getMinimizedFadeoutAnimation();
mEnterAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mIsMinimized = false;
setExpandedView();
animateIn();
}
});
mEnterAnimator.start();
}
private String getAccessibilityAnnouncement(ClipboardModel.Type type) {

View File

@@ -21,6 +21,7 @@ import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.annotation.Nullable;
@@ -286,6 +287,20 @@ public class ClipboardOverlayView extends DraggableConstraintLayout {
mActionChips.clear();
}
Animator getMinimizedFadeoutAnimation() {
ObjectAnimator anim = ObjectAnimator.ofFloat(mMinimizedPreview, "alpha", 1, 0);
anim.setDuration(66);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mMinimizedPreview.setVisibility(View.GONE);
mMinimizedPreview.setAlpha(1);
}
});
return anim;
}
Animator getEnterAnimation() {
if (mAccessibilityManager.isEnabled()) {
mDismissButton.setVisibility(View.VISIBLE);

View File

@@ -35,6 +35,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.RemoteAction;
import android.content.ClipData;
import android.content.ClipDescription;
@@ -101,6 +102,9 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase {
private ArgumentCaptor<ClipboardOverlayView.ClipboardOverlayCallbacks> mOverlayCallbacksCaptor;
private ClipboardOverlayView.ClipboardOverlayCallbacks mCallbacks;
@Captor
private ArgumentCaptor<AnimatorListenerAdapter> mAnimatorArgumentCaptor;
private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
@Before
@@ -478,12 +482,16 @@ public class ClipboardOverlayControllerTest extends SysuiTestCase {
when(mClipboardOverlayWindow.getWindowInsets()).thenReturn(
getImeInsets(new Rect(0, 0, 0, 1)));
mOverlayController.setClipData(mSampleClipData, "");
Animator mockFadeoutAnimator = Mockito.mock(Animator.class);
when(mClipboardOverlayView.getMinimizedFadeoutAnimation()).thenReturn(mockFadeoutAnimator);
verify(mClipboardOverlayView).setMinimized(true);
verify(mClipboardOverlayView, never()).setMinimized(false);
verify(mClipboardOverlayView, never()).showTextPreview(any(), anyBoolean());
mCallbacks.onMinimizedViewTapped();
verify(mockFadeoutAnimator).addListener(mAnimatorArgumentCaptor.capture());
mAnimatorArgumentCaptor.getValue().onAnimationEnd(mockFadeoutAnimator);
verify(mClipboardOverlayView).setMinimized(false);
verify(mClipboardOverlayView).showTextPreview("Test Item", false);