am 0c1fa1d9: Merge "QuickSettings: Hide the expanded header in detail mode." into lmp-preview-dev
* commit '0c1fa1d99b060c5852f09fb0ff8926aafb2d182d': QuickSettings: Hide the expanded header in detail mode.
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
setQsStackScrollerPadding(mQsMaxExpansionHeight);
|
||||
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();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user