Merge "Avoid panel "flip" animations when possible."

This commit is contained in:
John Spurlock
2014-04-23 20:31:46 +00:00
committed by Android (Google) Code Review

View File

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