Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f2ffe4f authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

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

parents aa1492d1 17880ef8
Loading
Loading
Loading
Loading
+114 −83
Original line number Original line Diff line number Diff line
@@ -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,21 +1722,29 @@ 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 settingsY =
                    mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : 0;
            final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : h;
            final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : h;
            mScrollViewAnim = start(
            mScrollViewAnim = start(
                    interpolator(mDecelerateInterpolator,
                    interpolator(mDecelerateInterpolator,
@@ -1745,12 +1754,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
            mFlipSettingsViewAnim = start(
            mFlipSettingsViewAnim = start(
                setVisibilityWhenDone(
                setVisibilityWhenDone(
                    interpolator(mDecelerateInterpolator,
                    interpolator(mDecelerateInterpolator,
                        ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y, settingsY, -h)
                            ObjectAnimator.ofFloat(
                        )
                                    mFlipSettingsView, View.TRANSLATION_Y, settingsY, -h))
                        .setDuration(FLIP_DURATION),
                        .setDuration(FLIP_DURATION),
                    mFlipSettingsView, View.INVISIBLE));
                    mFlipSettingsView, View.INVISIBLE));
        mHeaderFlipper.flipToNotifications();
        } else {
        mKeyguardFlipper.flipToNotifications();
            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,24 +1804,27 @@ 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 settingsY
                    = mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : -h;
            final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : 0;
            final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : 0;
            mFlipSettingsViewAnim = start(
            mFlipSettingsViewAnim = start(
                    startDelay(0,
                    startDelay(0,
                        interpolator(mDecelerateInterpolator,
                        interpolator(mDecelerateInterpolator,
                        ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y, settingsY, 0f)
                            ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y,
                                    settingsY, 0f)
                                .setDuration(FLIP_DURATION)
                                .setDuration(FLIP_DURATION)
                            )));
                            )));
            mScrollViewAnim = start(
            mScrollViewAnim = start(
@@ -1817,31 +1834,33 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
                            )
                            )
                        .setDuration(FLIP_DURATION),
                        .setDuration(FLIP_DURATION),
                        mStackScroller, View.INVISIBLE));
                        mStackScroller, View.INVISIBLE));
        mHeaderFlipper.flipToSettings();
        } else {
        mKeyguardFlipper.flipToSettings();
            mFlipSettingsView.setTranslationY(0);
            mStackScroller.setTranslationY(h);
            mStackScroller.setVisibility(View.INVISIBLE);
        }
        mHeaderFlipper.flipToSettings(animate);
        mKeyguardFlipper.flipToSettings(animate);
        if (animate) {
            mClearButtonAnim = start(
            mClearButtonAnim = start(
                setVisibilityWhenDone(
                setVisibilityWhenDone(
                    ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
                    ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
                    .setDuration(FLIP_DURATION),
                    .setDuration(FLIP_DURATION),
                    mClearButton, View.INVISIBLE));
                    mClearButton, View.INVISIBLE));
        } else {
            mClearButton.setAlpha(0);
            mClearButton.setVisibility(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) {
            mNotificationButton.setVisibility(View.VISIBLE);
            if (animate) {
                mSettingsButtonAnim = start(
                mSettingsButtonAnim = start(
                    setVisibilityWhenDone(
                    setVisibilityWhenDone(
                        ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
                        ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
                            .setDuration(FLIP_DURATION_OUT),
                            .setDuration(FLIP_DURATION_OUT),
                        mStackScroller, View.INVISIBLE));
                        mStackScroller, View.INVISIBLE));
            mNotificationButton.setVisibility(View.VISIBLE);
                mNotificationButtonAnim = start(
                mNotificationButtonAnim = start(
                    startDelay(FLIP_DURATION_OUT,
                    startDelay(FLIP_DURATION_OUT,
                        ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
                        ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
                            .setDuration(FLIP_DURATION_IN)));
                            .setDuration(FLIP_DURATION_IN)));
            } else {
                mSettingsButton.setAlpha(0f);
                mSettingsButton.setVisibility(View.INVISIBLE);
                mNotificationButton.setAlpha(1f);
            }
        }
        }


        public void flipToNotifications() {
        public void flipToNotifications(boolean animate) {
            mSettingsButton.setVisibility(View.VISIBLE);
            if (animate) {
                mNotificationButtonAnim = start(
                mNotificationButtonAnim = start(
                    setVisibilityWhenDone(
                    setVisibilityWhenDone(
                        ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
                        ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
                            .setDuration(FLIP_DURATION_OUT),
                            .setDuration(FLIP_DURATION_OUT),
                        mNotificationButton, View.INVISIBLE));
                        mNotificationButton, View.INVISIBLE));


            mSettingsButton.setVisibility(View.VISIBLE);
                mSettingsButtonAnim = start(
                mSettingsButtonAnim = start(
                    startDelay(FLIP_DURATION_OUT,
                    startDelay(FLIP_DURATION_OUT,
                        ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
                        ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
                            .setDuration(FLIP_DURATION_IN)));
                            .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) {