Merge "Fix bug 3345948 - ActionBar.show()/hide() shouldn't animate if called before first layout"
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 1753ab9..b7b0ef58 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1073,6 +1073,7 @@
protected void onPostResume() {
final Window win = getWindow();
if (win != null) win.makeActive();
+ if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(true);
mCalled = true;
}
@@ -1325,6 +1326,7 @@
* @see #onDestroy
*/
protected void onStop() {
+ if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false);
mCalled = true;
}
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index de5d6a1..cc4fefc3 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -352,12 +352,14 @@
* Called when the dialog is starting.
*/
protected void onStart() {
+ if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(true);
}
/**
* Called to tell you that you're stopping.
*/
protected void onStop() {
+ if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false);
}
private static final String DIALOG_SHOWING_TAG = "android:dialogShowing";
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index 471a5a9..ab53adb 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -92,6 +92,7 @@
final Handler mHandler = new Handler();
private Animator mCurrentAnim;
+ private boolean mShowHideAnimationEnabled;
private static final TimeInterpolator sFadeOutInterpolator = new DecelerateInterpolator();
@@ -217,6 +218,20 @@
CONTEXT_DISPLAY_NORMAL : CONTEXT_DISPLAY_SPLIT;
}
+ /**
+ * Enables or disables animation between show/hide states.
+ * If animation is disabled using this method, animations in progress
+ * will be finished.
+ *
+ * @param enabled true to animate, false to not animate.
+ */
+ public void setShowHideAnimationEnabled(boolean enabled) {
+ mShowHideAnimationEnabled = enabled;
+ if (!enabled && mCurrentAnim != null) {
+ mCurrentAnim.end();
+ }
+ }
+
public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
mMenuVisibilityListeners.add(listener);
}
@@ -361,6 +376,7 @@
mLowerContextView.setVisibility(View.VISIBLE);
}
mActionMode = mode;
+ show();
return mode;
}
return null;
@@ -487,18 +503,23 @@
return;
}
mContainerView.setVisibility(View.VISIBLE);
- mContainerView.setAlpha(0);
- AnimatorSet anim = new AnimatorSet();
- AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 1));
- if (mContentView != null) {
- b.with(ObjectAnimator.ofFloat(mContentView, "translationY",
- -mContainerView.getHeight(), 0));
- mContainerView.setTranslationY(-mContainerView.getHeight());
- b.with(ObjectAnimator.ofFloat(mContainerView, "translationY", 0));
+
+ if (mShowHideAnimationEnabled) {
+ mContainerView.setAlpha(0);
+ AnimatorSet anim = new AnimatorSet();
+ AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 1));
+ if (mContentView != null) {
+ b.with(ObjectAnimator.ofFloat(mContentView, "translationY",
+ -mContainerView.getHeight(), 0));
+ mContainerView.setTranslationY(-mContainerView.getHeight());
+ b.with(ObjectAnimator.ofFloat(mContainerView, "translationY", 0));
+ }
+ anim.addListener(mShowListener);
+ mCurrentAnim = anim;
+ anim.start();
+ } else {
+ mShowListener.onAnimationEnd(null);
}
- anim.addListener(mShowListener);
- mCurrentAnim = anim;
- anim.start();
}
@Override
@@ -509,18 +530,23 @@
if (mContainerView.getVisibility() == View.GONE) {
return;
}
- mContainerView.setAlpha(1);
- AnimatorSet anim = new AnimatorSet();
- AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 0));
- if (mContentView != null) {
- b.with(ObjectAnimator.ofFloat(mContentView, "translationY",
- 0, -mContainerView.getHeight()));
- b.with(ObjectAnimator.ofFloat(mContainerView, "translationY",
- -mContainerView.getHeight()));
+
+ if (mShowHideAnimationEnabled) {
+ mContainerView.setAlpha(1);
+ AnimatorSet anim = new AnimatorSet();
+ AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 0));
+ if (mContentView != null) {
+ b.with(ObjectAnimator.ofFloat(mContentView, "translationY",
+ 0, -mContainerView.getHeight()));
+ b.with(ObjectAnimator.ofFloat(mContainerView, "translationY",
+ -mContainerView.getHeight()));
+ }
+ anim.addListener(mHideListener);
+ mCurrentAnim = anim;
+ anim.start();
+ } else {
+ mHideListener.onAnimationEnd(null);
}
- anim.addListener(mHideListener);
- mCurrentAnim = anim;
- anim.start();
}
public boolean isShowing() {