Merge "Avoid panel "flip" animations when possible."
This commit is contained in:
committed by
Android (Google) Code Review
commit
7f2ffe4fe1
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user