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

Commit f0b06c77 authored by John Spurlock's avatar John Spurlock
Browse files

Quick settings bug fixes.

 - Fix issue where notifications were positioned offscreen after
   quick screen toggle.
 - Better QS scrim hiding, use existing layout transition.
 - Don't allow a reposition if the settings animation is currently
   running.
 - Delay chevron animation during toggle to avoid drawing over each
   other.
 - Keep the screen on while the user is poking around with QS on
   the keyguard.
 - Cap the QS expansion to the bottom of the status view on keyguard.

Change-Id: Ib63874d0c6a33db81923080f25cb8f208e614faf
parent 307ad092
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ public class NotificationPanelView extends PanelView {
    private int[] mTempChildLocation = new int[2];
    private View mNotificationParent;
    private boolean mTrackingSettings;
    private float mExpandedHeight = -1;

    public NotificationPanelView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -173,6 +174,8 @@ public class NotificationPanelView extends PanelView {
     * @param expandedHeight the new expanded height
     */
    private void updateNotificationStackHeight(float expandedHeight) {
        if (mExpandedHeight == expandedHeight) return;
        mExpandedHeight = expandedHeight;
        mNotificationStackScroller.setIsExpanded(expandedHeight > 0.0f);
        float childOffset = getRelativeTop(mNotificationStackScroller)
                - mNotificationParent.getTranslationY();
+18 −13
Original line number Diff line number Diff line
@@ -784,6 +784,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
    }

    public boolean onSettingsEvent(MotionEvent event) {
        userActivity();
        if (mSettingsClosing
                && mFlipSettingsViewAnim != null && mFlipSettingsViewAnim.isRunning()) {
            return true;
        }
        if (mSettingsTracker != null) {
            mSettingsTracker.addMovement(event);
        }
@@ -851,15 +856,15 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
    }

    private void positionSettings(float dy) {
        final int h = mFlipSettingsView.getMeasuredHeight();
        final int ph = mNotificationPanel.getMeasuredHeight();
        if (mSettingsClosing) {
            final int ph = mNotificationPanel.getMeasuredHeight();
            dy = Math.min(Math.max(-ph, dy), 0);
            mFlipSettingsView.setTranslationY(dy);
            mStackScroller.setTranslationY(ph + dy);
        } else {
            dy = Math.min(Math.max(0, dy), ph);
            mFlipSettingsView.setTranslationY(-h + dy - mNotificationPadding * 2);
            final int h = mFlipSettingsView.getBottom();
            dy = Math.min(Math.max(0, dy), h);
            mFlipSettingsView.setTranslationY(-h + dy);
            mStackScroller.setTranslationY(dy);
        }
    }
@@ -1771,17 +1776,15 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
        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(
            startDelay(0,
                interpolator(mDecelerateInterpolator,
                    ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, 0)
                        .setDuration(FLIP_DURATION)
                    )));
                    ));
        mFlipSettingsViewAnim = start(
            setVisibilityWhenDone(
                interpolator(mDecelerateInterpolator,
@@ -3128,25 +3131,27 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
            mSettingsButtonAnim = start(
                setVisibilityWhenDone(
                    ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
                        .setDuration(FLIP_DURATION),
                        .setDuration(FLIP_DURATION_OUT),
                    mStackScroller, View.INVISIBLE));
            mNotificationButton.setVisibility(View.VISIBLE);
            mNotificationButtonAnim = start(
                startDelay(FLIP_DURATION_OUT,
                    ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
                    .setDuration(FLIP_DURATION));
                        .setDuration(FLIP_DURATION_IN)));
        }

        public void flipToNotifications() {
            mNotificationButtonAnim = start(
                setVisibilityWhenDone(
                    ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
                        .setDuration(FLIP_DURATION),
                        .setDuration(FLIP_DURATION_OUT),
                    mNotificationButton, View.INVISIBLE));

            mSettingsButton.setVisibility(View.VISIBLE);
            mSettingsButtonAnim = start(
                startDelay(FLIP_DURATION_OUT,
                    ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
                    .setDuration(FLIP_DURATION));
                        .setDuration(FLIP_DURATION_IN)));
        }

        public void cancel() {
+11 −6
Original line number Diff line number Diff line
@@ -62,18 +62,19 @@ class QuickSettingsContainerView extends FrameLayout {
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        if (sShowScrim) {
            mScrim = new ScrimView(mContext);
            addView(mScrim);
        mScrim.setAlpha(sShowScrim ? 1 : 0);
        }
        // TODO: Setup the layout transitions
        LayoutTransition transitions = getLayoutTransition();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mScrim.getAlpha() == 1) {
            mScrim.animate().alpha(0).setDuration(1000).start();
        if (mScrim != null) {
            sShowScrim = false;
            removeView(mScrim);
        }
        return super.onTouchEvent(event);
    }
@@ -144,7 +145,9 @@ class QuickSettingsContainerView extends FrameLayout {

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        if (mScrim != null) {
            mScrim.bringToFront();
        }
        final int N = getChildCount();
        final boolean isLayoutRtl = isLayoutRtl();
        final int width = getWidth();
@@ -206,6 +209,7 @@ class QuickSettingsContainerView extends FrameLayout {
    }

    private static final class ScrimView extends View {
        private static final int SCRIM = 0x4f000000;
        private static final int COLOR = 0xaf4285f4;

        private final Paint mLinePaint;
@@ -240,6 +244,7 @@ class QuickSettingsContainerView extends FrameLayout {
            final int h = getMeasuredHeight();
            final int f = mStrokeWidth * 3 / 4;

            canvas.drawColor(SCRIM);
            canvas.drawPath(line(f, h / 2, w - f, h / 2), mLinePaint);
            canvas.drawPath(line(w / 2, f, w / 2, h - f), mLinePaint);