diff options
| -rw-r--r-- | core/java/com/android/internal/app/WindowDecorActionBar.java | 44 | ||||
| -rw-r--r-- | core/java/com/android/internal/policy/DecorView.java | 90 |
2 files changed, 74 insertions, 60 deletions
diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java index a09dbe553c7c..1376d0ad5cdc 100644 --- a/core/java/com/android/internal/app/WindowDecorActionBar.java +++ b/core/java/com/android/internal/app/WindowDecorActionBar.java @@ -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); - } - AnimatorSet set = new AnimatorSet(); - set.playSequentially(fadeOut, fadeIn); - set.start(); + if (toActionMode) { + mDecorToolbar.setVisibility(View.GONE); + mContextView.setVisibility(View.VISIBLE); + } else { + mDecorToolbar.setVisibility(View.VISIBLE); + mContextView.setVisibility(View.GONE); + } + } // 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(); diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index a0652197d7b4..7e38d9bc742d 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -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; - } - @Override - public void onAnimationCancel(Animator animation) { - - } - - @Override - public void onAnimationRepeat(Animator animation) { + if (shouldAnimatePrimaryActionModeView()) { + mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA, + 0f, 1f); + mFadeAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mPrimaryActionModeView.setVisibility(VISIBLE); + } - } - }); - 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); - } - - @Override - public void onAnimationEnd(Animator animation) { - mPrimaryActionModeView.setAlpha(1f); - mFadeAnim = null; - } - - @Override - public void onAnimationCancel(Animator animation) { - - } - - @Override - public void onAnimationRepeat(Animator animation) { + if (shouldAnimatePrimaryActionModeView()) { + mFadeAnim = ObjectAnimator.ofFloat(mPrimaryActionModeView, View.ALPHA, 0f, 1f); + mFadeAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mPrimaryActionModeView.setVisibility(View.VISIBLE); + } - } - }); - 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) { |