Fix action mode animation on recreations - framework edition

am: e65b3fbb63

* commit 'e65b3fbb63b4b6937fede2e4b889c0a51a881358':
  Fix action mode animation on recreations - framework edition

Change-Id: I19274b7ede1fae09deb915807c35a478caf939ee
This commit is contained in:
Chris Banes
2016-06-01 13:53:58 +00:00
committed by android-build-merger
2 changed files with 73 additions and 59 deletions

View File

@@ -873,24 +873,40 @@ public class WindowDecorActionBar extends ActionBar implements
hideForActionMode(); hideForActionMode();
} }
Animator fadeIn, fadeOut; if (shouldAnimateContextView()) {
if (toActionMode) { Animator fadeIn, fadeOut;
fadeOut = mDecorToolbar.setupAnimatorToVisibility(View.GONE, if (toActionMode) {
FADE_OUT_DURATION_MS); fadeOut = mDecorToolbar.setupAnimatorToVisibility(View.GONE,
fadeIn = mContextView.setupAnimatorToVisibility(View.VISIBLE, FADE_OUT_DURATION_MS);
FADE_IN_DURATION_MS); fadeIn = mContextView.setupAnimatorToVisibility(View.VISIBLE,
FADE_IN_DURATION_MS);
} else {
fadeIn = mDecorToolbar.setupAnimatorToVisibility(View.VISIBLE,
FADE_IN_DURATION_MS);
fadeOut = mContextView.setupAnimatorToVisibility(View.GONE,
FADE_OUT_DURATION_MS);
}
AnimatorSet set = new AnimatorSet();
set.playSequentially(fadeOut, fadeIn);
set.start();
} else { } else {
fadeIn = mDecorToolbar.setupAnimatorToVisibility(View.VISIBLE, if (toActionMode) {
FADE_IN_DURATION_MS); mDecorToolbar.setVisibility(View.GONE);
fadeOut = mContextView.setupAnimatorToVisibility(View.GONE, mContextView.setVisibility(View.VISIBLE);
FADE_OUT_DURATION_MS); } else {
mDecorToolbar.setVisibility(View.VISIBLE);
mContextView.setVisibility(View.GONE);
}
} }
AnimatorSet set = new AnimatorSet();
set.playSequentially(fadeOut, fadeIn);
set.start();
// mTabScrollView's visibility is not affected by action mode. // mTabScrollView's visibility is not affected by action mode.
} }
private boolean shouldAnimateContextView() {
// We only to animate the action mode in if the container view has already been laid out.
// If it hasn't been laid out, it hasn't been drawn to screen yet.
return mContainerView.isLaidOut();
}
public Context getThemedContext() { public Context getThemedContext() {
if (mThemedContext == null) { if (mThemedContext == null) {
TypedValue outValue = new TypedValue(); TypedValue outValue = new TypedValue();

View File

@@ -32,6 +32,7 @@ import com.android.internal.widget.FloatingToolbar;
import java.util.List; import java.util.List;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
@@ -1588,31 +1589,27 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
mPrimaryActionModeView.getApplicationWindowToken(), mPrimaryActionModeView.getApplicationWindowToken(),
Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0); Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
endOnGoingFadeAnimation(); endOnGoingFadeAnimation();
mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA,
0f, 1f);
mFadeAnim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
mPrimaryActionModeView.setVisibility(VISIBLE);
}
@Override if (shouldAnimatePrimaryActionModeView()) {
public void onAnimationEnd(Animator animation) { mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA,
mPrimaryActionModeView.setAlpha(1f); 0f, 1f);
mFadeAnim = null; mFadeAnim.addListener(new AnimatorListenerAdapter() {
} @Override
public void onAnimationStart(Animator animation) {
mPrimaryActionModeView.setVisibility(VISIBLE);
}
@Override @Override
public void onAnimationCancel(Animator animation) { public void onAnimationEnd(Animator animation) {
mPrimaryActionModeView.setAlpha(1f);
} mFadeAnim = null;
}
@Override });
public void onAnimationRepeat(Animator animation) { mFadeAnim.start();
} else {
} mPrimaryActionModeView.setAlpha(1f);
}); mPrimaryActionModeView.setVisibility(VISIBLE);
mFadeAnim.start(); }
} }
}; };
} else { } else {
@@ -1646,35 +1643,36 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
if (mPrimaryActionModePopup != null) { if (mPrimaryActionModePopup != null) {
post(mShowPrimaryActionModePopup); post(mShowPrimaryActionModePopup);
} else { } else {
mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA, 0f, 1f); if (shouldAnimatePrimaryActionModeView()) {
mFadeAnim.addListener(new Animator.AnimatorListener() { mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA, 0f, 1f);
@Override mFadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationStart(Animator animation) { @Override
mPrimaryActionModeView.setVisibility(View.VISIBLE); public void onAnimationStart(Animator animation) {
} mPrimaryActionModeView.setVisibility(View.VISIBLE);
}
@Override @Override
public void onAnimationEnd(Animator animation) { public void onAnimationEnd(Animator animation) {
mPrimaryActionModeView.setAlpha(1f); mPrimaryActionModeView.setAlpha(1f);
mFadeAnim = null; mFadeAnim = null;
} }
});
@Override mFadeAnim.start();
public void onAnimationCancel(Animator animation) { } else {
mPrimaryActionModeView.setAlpha(1f);
} mPrimaryActionModeView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mFadeAnim.start();
} }
mPrimaryActionModeView.sendAccessibilityEvent( mPrimaryActionModeView.sendAccessibilityEvent(
AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
} }
boolean shouldAnimatePrimaryActionModeView() {
// We only to animate the action mode in if the decor has already been laid out.
// If it hasn't been laid out, it hasn't been drawn to screen yet.
return isLaidOut();
}
private ActionMode createFloatingActionMode( private ActionMode createFloatingActionMode(
View originatingView, ActionMode.Callback2 callback) { View originatingView, ActionMode.Callback2 callback) {
if (mFloatingActionMode != null) { if (mFloatingActionMode != null) {