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

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

Merge "QuickSettings: Hide the expanded header in detail mode." into lmp-preview-dev

parents 81b0ba26 5729d090
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -196,6 +196,9 @@
    <dimen name="qs_dual_tile_height">109dp</dimen>
    <dimen name="qs_dual_tile_padding">12dp</dimen>

    <!-- How far the hidden header peeks from the top of the screen when QS is in detail mode. -->
    <dimen name="qs_header_peek_height">16dp</dimen>

    <!-- How far the expanded QS panel peeks from the header in collapsed state. -->
    <dimen name="qs_peek_height">8dp</dimen>

+22 −3
Original line number Diff line number Diff line
@@ -47,8 +47,10 @@ public class QSPanel extends ViewGroup {
    private int mCellHeight;
    private int mLargeCellWidth;
    private int mLargeCellHeight;
    private boolean mExpanded;

    private TileRecord mDetailRecord;
    private Callback mCallback;

    public QSPanel(Context context) {
        this(context, null);
@@ -66,6 +68,10 @@ public class QSPanel extends ViewGroup {
        updateResources();
    }

    public void setCallback(Callback callback) {
        mCallback = callback;
    }

    public void updateResources() {
        final Resources res = mContext.getResources();
        final int columns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns));
@@ -84,12 +90,14 @@ public class QSPanel extends ViewGroup {
    }

    public void setExpanded(boolean expanded) {
        if (!expanded) {
        if (mExpanded == expanded) return;
        mExpanded = expanded;
        if (!mExpanded) {
            showDetail(false /*show*/, mDetailRecord);
        }
        for (TileRecord r : mRecords) {
            r.tile.setListening(expanded);
            if (expanded) {
            r.tile.setListening(mExpanded);
            if (mExpanded) {
                r.tile.refreshState();
            }
        }
@@ -156,6 +164,7 @@ public class QSPanel extends ViewGroup {
            if (mDetailRecord == null) return;
            listener = mTeardownDetailWhenDone;
        }
        fireShowingDetail(show);
        int x = r.tileView.getLeft() + r.tileView.getWidth() / 2;
        int y = r.tileView.getTop() + r.tileView.getHeight() / 2;
        mClipper.animateCircularClip(x, y, show, listener);
@@ -239,6 +248,12 @@ public class QSPanel extends ViewGroup {
        return cols;
    }

    private void fireShowingDetail(boolean showingDetail) {
        if (mCallback != null) {
            mCallback.onShowingDetail(showingDetail);
        }
    }

    private class H extends Handler {
        private static final int SHOW_DETAIL = 1;
        private static final int SET_TILE_VISIBILITY = 2;
@@ -265,4 +280,8 @@ public class QSPanel extends ViewGroup {
            mDetailRecord = null;
        };
    };

    public interface Callback {
        void onShowingDetail(boolean showingDetail);
    }
}
+56 −6
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.view.animation.Interpolator;
import android.widget.LinearLayout;

import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.statusbar.GestureRecorder;
@@ -51,7 +52,7 @@ public class NotificationPanelView extends PanelView implements
    PhoneStatusBar mStatusBar;
    private StatusBarHeaderView mHeader;
    private View mQsContainer;
    private View mQsPanel;
    private QSPanel mQsPanel;
    private View mKeyguardStatusView;
    private ObservableScrollView mScrollView;
    private View mStackScrollerContainer;
@@ -70,6 +71,7 @@ public class NotificationPanelView extends PanelView implements
     */
    private boolean mIntercepting;
    private boolean mQsExpanded;
    private boolean mQsFullyExpanded;
    private boolean mKeyguardShowing;
    private float mInitialHeightOnTouch;
    private float mInitialTouchX;
@@ -81,13 +83,14 @@ public class NotificationPanelView extends PanelView implements
    private int mQsMaxExpansionHeight;
    private int mMinStackHeight;
    private int mQsPeekHeight;
    private int mQsHeaderPeekHeight;
    private boolean mQsShowingDetail;
    private float mNotificationTranslation;
    private int mStackScrollerIntrinsicPadding;
    private boolean mQsExpansionEnabled = true;
    private ValueAnimator mQsExpansionAnimator;
    private FlingAnimationUtils mFlingAnimationUtils;
    private int mStatusBarMinHeight;

    private Interpolator mFastOutSlowInInterpolator;
    private ObjectAnimator mClockAnimator;
    private int mClockAnimationTarget = -1;
@@ -130,7 +133,8 @@ public class NotificationPanelView extends PanelView implements
        mKeyguardStatusView = findViewById(R.id.keyguard_status_view);
        mStackScrollerContainer = findViewById(R.id.notification_container_parent);
        mQsContainer = findViewById(R.id.quick_settings_container);
        mQsPanel = findViewById(R.id.quick_settings_panel);
        mQsPanel = (QSPanel) findViewById(R.id.quick_settings_panel);
        mQsPanel.setCallback(mQsPanelCallback);
        mScrollView = (ObservableScrollView) findViewById(R.id.scroll_view);
        mScrollView.setListener(this);
        mNotificationStackScroller = (NotificationStackScrollLayout)
@@ -154,6 +158,7 @@ public class NotificationPanelView extends PanelView implements
        mStatusBarMinHeight = getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.status_bar_height);
        mQsPeekHeight = getResources().getDimensionPixelSize(R.dimen.qs_peek_height);
        mQsHeaderPeekHeight = getResources().getDimensionPixelSize(R.dimen.qs_header_peek_height);
        mClockPositionAlgorithm.loadDimens(getResources());
    }

@@ -165,7 +170,9 @@ public class NotificationPanelView extends PanelView implements
        mQsMinExpansionHeight = mHeader.getCollapsedHeight() + mQsPeekHeight;
        mQsMaxExpansionHeight = mHeader.getExpandedHeight() + mQsContainer.getHeight();
        if (mQsExpanded) {
            if (mQsFullyExpanded) {
                setQsStackScrollerPadding(mQsMaxExpansionHeight);
            }
        } else {
            setQsExpansion(mQsMinExpansionHeight);
            positionClockAndNotifications();
@@ -518,10 +525,39 @@ public class NotificationPanelView extends PanelView implements
                ? View.INVISIBLE
                : View.VISIBLE);
        mScrollView.setTouchEnabled(mQsExpanded);
        if (mQsShowingDetail) {
            if (mQsFullyExpanded) {
                setQsHeaderPeeking(true);
            }
        } else {
            setQsHeaderPeeking(false);
        }
    }

    private void setQsHeaderPeeking(boolean peeking) {
        final boolean stackIsPeeking = mStackScrollerContainer.getTranslationY() != 0;
        final boolean headerIsPeeking = mHeader.getTranslationY() != 0;
        final int ty = mQsHeaderPeekHeight - mHeader.getExpandedHeight();
        if (peeking) {
            if (!headerIsPeeking) {
                mHeader.animate().translationY(ty);
            }
            if (!stackIsPeeking) {
                mStackScrollerContainer.animate().translationY(ty);
            }
        } else {
            if (headerIsPeeking) {
                mHeader.animate().translationY(0);
            }
            if (stackIsPeeking) {
                mStackScrollerContainer.animate().translationY(0);
            }
        }
    }

    private void setQsExpansion(float height) {
        height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight);
        mQsFullyExpanded = height == mQsMaxExpansionHeight;
        if (height > mQsMinExpansionHeight && !mQsExpanded) {
            setQsExpanded(true);
        } else if (height <= mQsMinExpansionHeight && mQsExpanded) {
@@ -614,10 +650,16 @@ public class NotificationPanelView extends PanelView implements
        if (!mQsExpansionEnabled) {
            return false;
        }
        final float ty = mHeader.getTranslationY();
        boolean onHeader = x >= mHeader.getLeft() && x <= mHeader.getRight()
                && y >= mHeader.getTop() && y <= mHeader.getBottom();
                && y >= mHeader.getTop() + ty && y <= mHeader.getBottom() + ty;
        if (mQsExpanded) {
            return onHeader || (mScrollView.isScrolledToBottom() && yDiff < 0);
            if (mQsShowingDetail && onHeader) {
                // bring back the header, crudely
                setQsHeaderPeeking(false);
                mQsPanel.setExpanded(false);
            }
            return !mQsShowingDetail && onHeader || (mScrollView.isScrolledToBottom() && yDiff < 0);
        } else {
            return onHeader;
        }
@@ -781,4 +823,12 @@ public class NotificationPanelView extends PanelView implements
    public View getRightIcon() {
        return mKeyguardBottomArea.getCameraImageView();
    }

    private final QSPanel.Callback mQsPanelCallback = new QSPanel.Callback() {
        @Override
        public void onShowingDetail(boolean showingDetail) {
            mQsShowingDetail = showingDetail;
            updateQsState();
        }
    };
}