Avoid panel "flip" animations when possible.

Bug:14271219
Change-Id: I91632c073497718e2fd53ad172ec805f54514696
This commit is contained in:
John Spurlock
2014-04-23 16:12:54 -04:00
parent 4e8cf1508f
commit 17880ef81f

View File

@@ -784,10 +784,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
if (!qsTap && !inButton) {
mSettingsTracker.computeCurrentVelocity(1000);
final float vy = mSettingsTracker.getYVelocity();
final boolean animate = true;
if (dy <= slop || vy <= 0) {
flipToNotifications();
flipToNotifications(animate);
} else {
flipToSettings();
flipToSettings(animate);
}
}
mSettingsTracker.recycle();
@@ -1661,7 +1662,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
mStatusBarWindow.cancelExpandHelper();
mStatusBarView.collapseAllPanels(true);
if (isFlippedToSettings()) {
flipToNotifications();
flipToNotifications(true /*animate*/);
}
}
}
@@ -1721,36 +1722,49 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
mNotificationPanel.expand();
if (mStackScroller.getVisibility() != View.VISIBLE) {
flipToNotifications();
flipToNotifications(true /*animate*/);
}
if (false) postStartTracing();
}
public void flipToNotifications() {
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
private static void cancelAnim(Animator anim) {
if (anim != null) {
anim.cancel();
}
}
public void flipToNotifications(boolean animate) {
cancelAnim(mFlipSettingsViewAnim);
cancelAnim(mScrollViewAnim);
cancelAnim(mClearButtonAnim);
mHeaderFlipper.cancel();
mKeyguardFlipper.cancel();
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
mStackScroller.setVisibility(View.VISIBLE);
final int h = mNotificationPanel.getMeasuredHeight();
final float settingsY = mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : 0;
final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : h;
mScrollViewAnim = start(
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, 0)
.setDuration(FLIP_DURATION)
));
mFlipSettingsViewAnim = start(
setVisibilityWhenDone(
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y, settingsY, -h)
)
.setDuration(FLIP_DURATION),
mFlipSettingsView, View.INVISIBLE));
mHeaderFlipper.flipToNotifications();
mKeyguardFlipper.flipToNotifications();
if (animate) {
final float settingsY =
mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : 0;
final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : h;
mScrollViewAnim = start(
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, 0)
.setDuration(FLIP_DURATION)
));
mFlipSettingsViewAnim = start(
setVisibilityWhenDone(
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(
mFlipSettingsView, View.TRANSLATION_Y, settingsY, -h))
.setDuration(FLIP_DURATION),
mFlipSettingsView, View.INVISIBLE));
} else {
mStackScroller.setTranslationY(0);
mFlipSettingsView.setTranslationY(-h);
mFlipSettingsView.setVisibility(View.INVISIBLE);
}
mHeaderFlipper.flipToNotifications(animate);
mKeyguardFlipper.flipToNotifications(animate);
mClearButton.setVisibility(View.VISIBLE);
mClearButton.setAlpha(0f);
setAreThereNotifications(); // this will show/hide the button as necessary
@@ -1758,7 +1772,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
public void run() {
updateCarrierLabelVisibility(false);
}
}, FLIP_DURATION - 150);
}, animate ? FLIP_DURATION - 150 : 0);
if (mOnFlipRunnable != null) {
mOnFlipRunnable.run();
}
@@ -1777,7 +1791,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
mNotificationPanel.expand();
if (mFlipSettingsView.getVisibility() != View.VISIBLE
|| mFlipSettingsView.getTranslationY() < 0) {
flipToSettings();
flipToSettings(true /*animate*/);
}
if (false) postStartTracing();
@@ -1790,58 +1804,63 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
return false;
}
public void flipToSettings() {
public void flipToSettings(boolean animate) {
// Settings are not available in setup
if (!mUserSetup) return;
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
cancelAnim(mFlipSettingsViewAnim);
cancelAnim(mScrollViewAnim);
mHeaderFlipper.cancel();
mKeyguardFlipper.cancel();
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
cancelAnim(mClearButtonAnim);
mFlipSettingsView.setVisibility(View.VISIBLE);
final int h = mNotificationPanel.getMeasuredHeight();
final float settingsY = mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : -h;
final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : 0;
mFlipSettingsViewAnim = start(
startDelay(0,
if (animate) {
final float settingsY
= mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : -h;
final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : 0;
mFlipSettingsViewAnim = start(
startDelay(0,
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y,
settingsY, 0f)
.setDuration(FLIP_DURATION)
)));
mScrollViewAnim = start(
setVisibilityWhenDone(
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y, settingsY, 0f)
.setDuration(FLIP_DURATION)
)));
mScrollViewAnim = start(
setVisibilityWhenDone(
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, h)
)
ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, h)
)
.setDuration(FLIP_DURATION),
mStackScroller, View.INVISIBLE));
} else {
mFlipSettingsView.setTranslationY(0);
mStackScroller.setTranslationY(h);
mStackScroller.setVisibility(View.INVISIBLE);
}
mHeaderFlipper.flipToSettings(animate);
mKeyguardFlipper.flipToSettings(animate);
if (animate) {
mClearButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mStackScroller, View.INVISIBLE));
mHeaderFlipper.flipToSettings();
mKeyguardFlipper.flipToSettings();
mClearButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mClearButton, View.INVISIBLE));
mClearButton, View.INVISIBLE));
} else {
mClearButton.setAlpha(0);
mClearButton.setVisibility(View.INVISIBLE);
}
mNotificationPanel.postDelayed(new Runnable() {
public void run() {
updateCarrierLabelVisibility(false);
}
}, FLIP_DURATION - 150);
}, animate ? FLIP_DURATION - 150 : 0);
if (mOnFlipRunnable != null) {
mOnFlipRunnable.run();
}
}
public void flipPanels() {
if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
flipToSettings();
} else {
flipToNotifications();
}
}
public void animateCollapseQuickSettings() {
mStatusBarView.collapseAllPanels(true);
}
@@ -2919,7 +2938,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
private void updateKeyguardState() {
if (mOnKeyguard) {
if (isFlippedToSettings()) {
flipToNotifications();
flipToNotifications(false /*animate*/);
}
mKeyguardStatusView.setVisibility(View.VISIBLE);
mKeyguardBottomArea.setVisibility(View.VISIBLE);
@@ -3080,36 +3099,48 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
}
}
public void flipToSettings() {
mSettingsButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION_OUT),
mStackScroller, View.INVISIBLE));
public void flipToSettings(boolean animate) {
mNotificationButton.setVisibility(View.VISIBLE);
mNotificationButtonAnim = start(
startDelay(FLIP_DURATION_OUT,
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION_IN)));
if (animate) {
mSettingsButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION_OUT),
mStackScroller, View.INVISIBLE));
mNotificationButtonAnim = start(
startDelay(FLIP_DURATION_OUT,
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION_IN)));
} else {
mSettingsButton.setAlpha(0f);
mSettingsButton.setVisibility(View.INVISIBLE);
mNotificationButton.setAlpha(1f);
}
}
public void flipToNotifications() {
mNotificationButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION_OUT),
mNotificationButton, View.INVISIBLE));
public void flipToNotifications(boolean animate) {
mSettingsButton.setVisibility(View.VISIBLE);
mSettingsButtonAnim = start(
startDelay(FLIP_DURATION_OUT,
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION_IN)));
if (animate) {
mNotificationButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION_OUT),
mNotificationButton, View.INVISIBLE));
mSettingsButtonAnim = start(
startDelay(FLIP_DURATION_OUT,
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION_IN)));
} else {
mNotificationButton.setVisibility(View.INVISIBLE);
mNotificationButton.setAlpha(0f);
mSettingsButton.setAlpha(1f);
}
}
public void cancel() {
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
cancelAnim(mSettingsButtonAnim);
cancelAnim(mNotificationButtonAnim);
}
public void setVisibility(int vis) {