Merge "Fix showing a cut off notification when QS is expanded" into pi-dev

This commit is contained in:
Selim Cinek
2018-04-30 15:05:20 +00:00
committed by Android (Google) Code Review
2 changed files with 60 additions and 6 deletions

View File

@@ -392,6 +392,8 @@ public class NotificationPanelView extends PanelView implements
if (mQs != null) {
mQsMinExpansionHeight = mKeyguardShowing ? 0 : mQs.getQsMinExpansionHeight();
mQsMaxExpansionHeight = mQs.getDesiredHeight();
mNotificationStackScroller.setMaxTopPadding(
mQsMaxExpansionHeight + mQsNotificationTopPadding);
}
positionClockAndNotifications();
if (mQsExpanded && mQsFullyExpanded) {
@@ -588,6 +590,19 @@ public class NotificationPanelView extends PanelView implements
mNotificationStackScroller.resetScrollPosition();
}
@Override
public void collapse(boolean delayed, float speedUpFactor) {
if (!canPanelBeCollapsed()) {
return;
}
if (mQsExpanded) {
mQsExpandImmediate = true;
mNotificationStackScroller.setShouldShowShelfOnly(true);
}
super.collapse(delayed, speedUpFactor);
}
public void closeQs() {
cancelQsAnimation();
setQsExpansion(mQsMinExpansionHeight);
@@ -615,6 +630,7 @@ public class NotificationPanelView extends PanelView implements
public void expandWithQs() {
if (mQsExpansionEnabled) {
mQsExpandImmediate = true;
mNotificationStackScroller.setShouldShowShelfOnly(true);
}
expand(true /* animate */);
}
@@ -878,6 +894,7 @@ public class NotificationPanelView extends PanelView implements
&& event.getY(event.getActionIndex()) < mStatusBarMinHeight) {
MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_QS, 1);
mQsExpandImmediate = true;
mNotificationStackScroller.setShouldShowShelfOnly(true);
requestPanelHeightUpdate();
// Normally, we start listening when the panel is expanded, but here we need to start
@@ -1321,7 +1338,9 @@ public class NotificationPanelView extends PanelView implements
protected void updateQsExpansion() {
if (mQs == null) return;
mQs.setQsExpansion(getQsExpansionFraction(), getHeaderTranslation());
float qsExpansionFraction = getQsExpansionFraction();
mQs.setQsExpansion(qsExpansionFraction, getHeaderTranslation());
mNotificationStackScroller.setQsExpansionFraction(qsExpansionFraction);
}
private String determineAccessibilityPaneTitle() {
@@ -1357,7 +1376,6 @@ public class NotificationPanelView extends PanelView implements
} else if (mQsSizeChangeAnimator != null) {
return (int) mQsSizeChangeAnimator.getAnimatedValue();
} else if (mKeyguardShowing) {
// We can only do the smoother transition on Keyguard when we also are not collapsing
// from a scrolled quick settings.
return interpolate(getQsExpansionFraction(),
@@ -1527,7 +1545,6 @@ public class NotificationPanelView extends PanelView implements
// On Keyguard, interpolate the QS expansion linearly to the panel expansion
t = expandedHeight / (getMaxPanelHeight());
} else {
// In Shade, interpolate linearly such that QS is closed whenever panel height is
// minimum QS expansion + minStackHeight
float panelHeightQsCollapsed = mNotificationStackScroller.getIntrinsicPadding()
@@ -1776,6 +1793,7 @@ public class NotificationPanelView extends PanelView implements
setListening(true);
}
mQsExpandImmediate = false;
mNotificationStackScroller.setShouldShowShelfOnly(false);
mTwoFingerQsExpandPossible = false;
mIsExpansionFromHeadsUp = false;
notifyListenersTrackingHeadsUp(null);
@@ -1827,6 +1845,7 @@ public class NotificationPanelView extends PanelView implements
super.onTrackingStarted();
if (mQsFullyExpanded) {
mQsExpandImmediate = true;
mNotificationStackScroller.setShouldShowShelfOnly(true);
}
if (mStatusBar.getBarState() == StatusBarState.KEYGUARD
|| mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED) {
@@ -1894,6 +1913,8 @@ public class NotificationPanelView extends PanelView implements
if (mAccessibilityManager.isEnabled()) {
setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
}
mNotificationStackScroller.setMaxTopPadding(
mQsMaxExpansionHeight + mQsNotificationTopPadding);
}
@Override

View File

@@ -169,6 +169,7 @@ public class NotificationStackScrollLayout extends ViewGroup
private int mCollapsedSize;
private int mPaddingBetweenElements;
private int mIncreasedPaddingBetweenElements;
private int mMaxTopPadding;
private int mRegularTopPadding;
private int mDarkTopPadding;
// Current padding, will be either mRegularTopPadding or mDarkTopPadding
@@ -177,6 +178,7 @@ public class NotificationStackScrollLayout extends ViewGroup
private int mDarkSeparatorPadding;
private int mBottomMargin;
private int mBottomInset = 0;
private float mQsExpansionFraction;
/**
* The algorithm which calculates the properties for our children
@@ -230,6 +232,7 @@ public class NotificationStackScrollLayout extends ViewGroup
private boolean mPanelTracking;
private boolean mExpandingNotification;
private boolean mExpandedInThisMotion;
private boolean mShouldShowShelfOnly;
protected boolean mScrollingEnabled;
protected FooterView mFooterView;
protected EmptyShadeView mEmptyShadeView;
@@ -883,7 +886,20 @@ public class NotificationStackScrollLayout extends ViewGroup
float appearFraction = 1.0f;
if (height >= appearEndPosition) {
translationY = 0;
stackHeight = (int) height;
if (mShouldShowShelfOnly) {
stackHeight = mTopPadding + mShelf.getIntrinsicHeight();
} else if (mQsExpanded) {
int stackStartPosition = mContentHeight - mTopPadding + mIntrinsicPadding;
int stackEndPosition = mMaxTopPadding + mShelf.getIntrinsicHeight();
if (stackStartPosition <= stackEndPosition) {
stackHeight = stackEndPosition;
} else {
stackHeight = (int) NotificationUtils.interpolate(stackStartPosition,
stackEndPosition, mQsExpansionFraction);
}
} else {
stackHeight = (int) height;
}
} else {
appearFraction = getAppearFraction(height);
if (appearFraction >= 0) {
@@ -2581,6 +2597,10 @@ public class NotificationStackScrollLayout extends ViewGroup
setExpandedHeight(mExpandedHeight);
}
public void setMaxTopPadding(int maxTopPadding) {
mMaxTopPadding = maxTopPadding;
}
public int getLayoutMinHeight() {
if (isHeadsUpTransition()) {
return getTopHeadsUpPinnedHeight();
@@ -4484,6 +4504,10 @@ public class NotificationStackScrollLayout extends ViewGroup
updateAlgorithmLayoutMinHeight();
}
public void setQsExpansionFraction(float qsExpansionFraction) {
mQsExpansionFraction = qsExpansionFraction;
}
public void setOwnScrollY(int ownScrollY) {
if (ownScrollY != mOwnScrollY) {
// We still want to call the normal scrolled changed for accessibility reasons
@@ -4519,6 +4543,11 @@ public class NotificationStackScrollLayout extends ViewGroup
}
}
public void setShouldShowShelfOnly(boolean shouldShowShelfOnly) {
mShouldShowShelfOnly = shouldShowShelfOnly;
updateAlgorithmLayoutMinHeight();
}
public int getMinExpansionHeight() {
return mShelf.getIntrinsicHeight() - (mShelf.getIntrinsicHeight() - mStatusBarHeight) / 2;
}
@@ -4574,7 +4603,8 @@ public class NotificationStackScrollLayout extends ViewGroup
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println(String.format("[%s: pulsing=%s qsCustomizerShowing=%s visibility=%s"
+ " alpha:%f scrollY:%d]",
+ " alpha:%f scrollY:%d maxTopPadding:%d showShelfOnly=%s"
+ " qsExpandFraction=%f]",
this.getClass().getSimpleName(),
mPulsing ? "T":"f",
mAmbientState.isQsCustomizerShowing() ? "T":"f",
@@ -4582,7 +4612,10 @@ public class NotificationStackScrollLayout extends ViewGroup
: getVisibility() == View.GONE ? "gone"
: "invisible",
getAlpha(),
mAmbientState.getScrollY()));
mAmbientState.getScrollY(),
mMaxTopPadding,
mShouldShowShelfOnly ? "T":"f",
mQsExpansionFraction));
}
public boolean isFullyDark() {