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();
}
Animator fadeIn, fadeOut;
if (toActionMode) {
fadeOut = mDecorToolbar.setupAnimatorToVisibility(View.GONE,
FADE_OUT_DURATION_MS);
fadeIn = mContextView.setupAnimatorToVisibility(View.VISIBLE,
FADE_IN_DURATION_MS);
if (shouldAnimateContextView()) {
Animator fadeIn, fadeOut;
if (toActionMode) {
fadeOut = mDecorToolbar.setupAnimatorToVisibility(View.GONE,
FADE_OUT_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 {
fadeIn = mDecorToolbar.setupAnimatorToVisibility(View.VISIBLE,
FADE_IN_DURATION_MS);
fadeOut = mContextView.setupAnimatorToVisibility(View.GONE,
FADE_OUT_DURATION_MS);
if (toActionMode) {
mDecorToolbar.setVisibility(View.GONE);
mContextView.setVisibility(View.VISIBLE);
} 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.
}
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() {
if (mThemedContext == null) {
TypedValue outValue = new TypedValue();

View File

@@ -32,6 +32,7 @@ import com.android.internal.widget.FloatingToolbar;
import java.util.List;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.app.ActivityManager;
import android.content.Context;
@@ -1588,31 +1589,27 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
mPrimaryActionModeView.getApplicationWindowToken(),
Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
endOnGoingFadeAnimation();
mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA,
0f, 1f);
mFadeAnim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
mPrimaryActionModeView.setVisibility(VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
mPrimaryActionModeView.setAlpha(1f);
mFadeAnim = null;
}
if (shouldAnimatePrimaryActionModeView()) {
mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA,
0f, 1f);
mFadeAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
mPrimaryActionModeView.setVisibility(VISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mFadeAnim.start();
@Override
public void onAnimationEnd(Animator animation) {
mPrimaryActionModeView.setAlpha(1f);
mFadeAnim = null;
}
});
mFadeAnim.start();
} else {
mPrimaryActionModeView.setAlpha(1f);
mPrimaryActionModeView.setVisibility(VISIBLE);
}
}
};
} else {
@@ -1646,35 +1643,36 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
if (mPrimaryActionModePopup != null) {
post(mShowPrimaryActionModePopup);
} else {
mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA, 0f, 1f);
mFadeAnim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
mPrimaryActionModeView.setVisibility(View.VISIBLE);
}
if (shouldAnimatePrimaryActionModeView()) {
mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA, 0f, 1f);
mFadeAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
mPrimaryActionModeView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
mPrimaryActionModeView.setAlpha(1f);
mFadeAnim = null;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mFadeAnim.start();
@Override
public void onAnimationEnd(Animator animation) {
mPrimaryActionModeView.setAlpha(1f);
mFadeAnim = null;
}
});
mFadeAnim.start();
} else {
mPrimaryActionModeView.setAlpha(1f);
mPrimaryActionModeView.setVisibility(View.VISIBLE);
}
}
mPrimaryActionModeView.sendAccessibilityEvent(
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(
View originatingView, ActionMode.Callback2 callback) {
if (mFloatingActionMode != null) {