Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +51 −27 Original line number Diff line number Diff line Loading @@ -527,13 +527,7 @@ public class NotificationPanelView extends PanelView implements mIntercepting = false; break; } // Allow closing the whole panel when in SHADE state. if (mStatusBarState == StatusBarState.SHADE) { return super.onInterceptTouchEvent(event); } else { return !mQsExpanded && super.onInterceptTouchEvent(event); } } @Override Loading Loading @@ -645,8 +639,7 @@ public class NotificationPanelView extends PanelView implements } private boolean isInQsArea(float x, float y) { return mStatusBarState != StatusBarState.SHADE || (x >= mScrollView.getLeft() && x <= mScrollView.getRight()) && return (x >= mScrollView.getLeft() && x <= mScrollView.getRight()) && (y <= mNotificationStackScroller.getBottomMostNotificationBottom() || y <= mQsContainer.getY() + mQsContainer.getHeight()); } Loading Loading @@ -1119,9 +1112,26 @@ public class NotificationPanelView extends PanelView implements } private float calculateQsTopPadding() { // We can only do the smoother transition on Keyguard when we also are not collapsing from a // scrolled quick settings. if (mKeyguardShowing && mScrollYOverride == -1) { if (mKeyguardShowing && (mTwoFingerQsExpand || mIsExpanding && mQsExpandedWhenExpandingStarted)) { // Either QS pushes the notifications down when fully expanded, or QS is fully above the // notifications (mostly on tablets). maxNotifications denotes the normal top padding // on Keyguard, maxQs denotes the top padding from the quick settings panel. We need to // take the maximum and linearly interpolate with the panel expansion for a nice motion. int maxNotifications = mClockPositionResult.stackScrollerPadding - mClockPositionResult.stackScrollerPaddingAdjustment - mNotificationTopPadding; int maxQs = getTempQsMaxExpansion(); int max = mStatusBarState == StatusBarState.KEYGUARD ? Math.max(maxNotifications, maxQs) : maxQs; return (int) interpolate(getExpandedFraction(), mQsMinExpansionHeight, max); } else if (mKeyguardShowing && mScrollYOverride == -1) { // We can only do the smoother transition on Keyguard when we also are not collapsing // from a scrolled quick settings. return interpolate(getQsExpansionFraction(), mNotificationStackScroller.getIntrinsicPadding() - mNotificationTopPadding, mQsMaxExpansionHeight); Loading @@ -1133,7 +1143,9 @@ public class NotificationPanelView extends PanelView implements private void requestScrollerTopPaddingUpdate(boolean animate) { mNotificationStackScroller.updateTopPadding(calculateQsTopPadding(), mScrollView.getScrollY(), mAnimateNextTopPaddingChange || animate); mAnimateNextTopPaddingChange || animate, mKeyguardShowing && (mTwoFingerQsExpand || mIsExpanding && mQsExpandedWhenExpandingStarted)); mAnimateNextTopPaddingChange = false; } Loading Loading @@ -1263,18 +1275,27 @@ public class NotificationPanelView extends PanelView implements @Override protected void onHeightUpdated(float expandedHeight) { if (!mQsExpanded) { if (!mQsExpanded || mTwoFingerQsExpand || mIsExpanding && mQsExpandedWhenExpandingStarted) { positionClockAndNotifications(); } if (mTwoFingerQsExpand || mQsExpanded && !mQsTracking && mQsExpansionAnimator == null && !mQsExpansionFromOverscroll) { float t; if (mKeyguardShowing) { // 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() + mNotificationStackScroller.getMinStackHeight() + mNotificationStackScroller.getNotificationTopPadding(); float panelHeightQsExpanded = calculatePanelHeightQsExpanded(); float t = (expandedHeight - panelHeightQsCollapsed) t = (expandedHeight - panelHeightQsCollapsed) / (panelHeightQsExpanded - panelHeightQsCollapsed); } setQsExpansion(mQsMinExpansionHeight + t * (getTempQsMaxExpansion() - mQsMinExpansionHeight)); } Loading Loading @@ -1308,8 +1329,10 @@ public class NotificationPanelView extends PanelView implements float notificationHeight = mNotificationStackScroller.getHeight() - mNotificationStackScroller.getEmptyBottomMargin() - mNotificationStackScroller.getTopPadding(); float totalHeight = mQsMaxExpansionHeight + notificationHeight + mNotificationStackScroller.getNotificationTopPadding(); float totalHeight = Math.max( mQsMaxExpansionHeight + mNotificationStackScroller.getNotificationTopPadding(), mClockPositionResult.stackScrollerPadding - mTopPaddingAdjustment) + notificationHeight; if (totalHeight > mNotificationStackScroller.getHeight()) { float fullyCollapsedHeight = mQsMaxExpansionHeight + mNotificationStackScroller.getMinStackHeight() Loading Loading @@ -1442,7 +1465,7 @@ public class NotificationPanelView extends PanelView implements super.onExpandingStarted(); mNotificationStackScroller.onExpansionStarted(); mIsExpanding = true; mQsExpandedWhenExpandingStarted = mQsExpanded; mQsExpandedWhenExpandingStarted = mQsFullyExpanded; if (mQsExpanded) { onQsExpansionStarted(); } Loading Loading @@ -1496,11 +1519,12 @@ public class NotificationPanelView extends PanelView implements @Override protected void onTrackingStarted() { super.onTrackingStarted(); if (mQsFullyExpanded) { mTwoFingerQsExpand = true; } if (mStatusBar.getBarState() == StatusBarState.KEYGUARD || mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED) { mAfforanceHelper.animateHideLeftRightIcon(); } else if (mQsExpanded) { mTwoFingerQsExpand = true; } } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +1 −1 Original line number Diff line number Diff line Loading @@ -639,10 +639,10 @@ public abstract class PanelView extends FrameLayout { } mExpandedHeight = Math.max(0, mExpandedHeight); onHeightUpdated(mExpandedHeight); mExpandedFraction = Math.min(1f, fhWithoutOverExpansion == 0 ? 0 : mExpandedHeight / fhWithoutOverExpansion); onHeightUpdated(mExpandedHeight); notifyBarPanelExpansionChanged(); } Loading packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +23 −4 Original line number Diff line number Diff line Loading @@ -71,6 +71,12 @@ public class NotificationStackScrollLayout extends ViewGroup private SwipeHelper mSwipeHelper; private boolean mSwipingInProgress; private int mCurrentStackHeight = Integer.MAX_VALUE; /** * mCurrentStackHeight is the actual stack height, mLastSetStackHeight is the stack height set * externally from {@link #setStackHeight} */ private float mLastSetStackHeight; private int mOwnScrollY; private int mMaxLayoutHeight; Loading Loading @@ -453,6 +459,7 @@ public class NotificationStackScrollLayout extends ViewGroup * @param height the new height of the stack */ public void setStackHeight(float height) { mLastSetStackHeight = height; setIsExpanded(height > 0.0f); int newStackHeight = (int) height; int minStackHeight = getMinStackHeight(); Loading Loading @@ -1349,7 +1356,19 @@ public class NotificationStackScrollLayout extends ViewGroup && initialVelocity > 0; } public void updateTopPadding(float qsHeight, int scrollY, boolean animate) { /** * Updates the top padding of the notifications, taking {@link #getIntrinsicPadding()} into * account. * * @param qsHeight the top padding imposed by the quick settings panel * @param scrollY how much the notifications are scrolled inside the QS/notifications scroll * container * @param animate whether to animate the change * @param ignoreIntrinsicPadding if true, {@link #getIntrinsicPadding()} is ignored and * {@code qsHeight} is the final top padding */ public void updateTopPadding(float qsHeight, int scrollY, boolean animate, boolean ignoreIntrinsicPadding) { float start = qsHeight - scrollY + mNotificationTopPadding; float stackHeight = getHeight() - start; int minStackHeight = getMinStackHeight(); Loading @@ -1357,13 +1376,13 @@ public class NotificationStackScrollLayout extends ViewGroup float overflow = minStackHeight - stackHeight; stackHeight = minStackHeight; start = getHeight() - stackHeight; setTranslationY(overflow); mTopPaddingOverflow = overflow; } else { setTranslationY(0); mTopPaddingOverflow = 0; } setTopPadding(clampPadding((int) start), animate); setTopPadding(ignoreIntrinsicPadding ? (int) start : clampPadding((int) start), animate); setStackHeight(mLastSetStackHeight); } public int getNotificationTopPadding() { Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +51 −27 Original line number Diff line number Diff line Loading @@ -527,13 +527,7 @@ public class NotificationPanelView extends PanelView implements mIntercepting = false; break; } // Allow closing the whole panel when in SHADE state. if (mStatusBarState == StatusBarState.SHADE) { return super.onInterceptTouchEvent(event); } else { return !mQsExpanded && super.onInterceptTouchEvent(event); } } @Override Loading Loading @@ -645,8 +639,7 @@ public class NotificationPanelView extends PanelView implements } private boolean isInQsArea(float x, float y) { return mStatusBarState != StatusBarState.SHADE || (x >= mScrollView.getLeft() && x <= mScrollView.getRight()) && return (x >= mScrollView.getLeft() && x <= mScrollView.getRight()) && (y <= mNotificationStackScroller.getBottomMostNotificationBottom() || y <= mQsContainer.getY() + mQsContainer.getHeight()); } Loading Loading @@ -1119,9 +1112,26 @@ public class NotificationPanelView extends PanelView implements } private float calculateQsTopPadding() { // We can only do the smoother transition on Keyguard when we also are not collapsing from a // scrolled quick settings. if (mKeyguardShowing && mScrollYOverride == -1) { if (mKeyguardShowing && (mTwoFingerQsExpand || mIsExpanding && mQsExpandedWhenExpandingStarted)) { // Either QS pushes the notifications down when fully expanded, or QS is fully above the // notifications (mostly on tablets). maxNotifications denotes the normal top padding // on Keyguard, maxQs denotes the top padding from the quick settings panel. We need to // take the maximum and linearly interpolate with the panel expansion for a nice motion. int maxNotifications = mClockPositionResult.stackScrollerPadding - mClockPositionResult.stackScrollerPaddingAdjustment - mNotificationTopPadding; int maxQs = getTempQsMaxExpansion(); int max = mStatusBarState == StatusBarState.KEYGUARD ? Math.max(maxNotifications, maxQs) : maxQs; return (int) interpolate(getExpandedFraction(), mQsMinExpansionHeight, max); } else if (mKeyguardShowing && mScrollYOverride == -1) { // We can only do the smoother transition on Keyguard when we also are not collapsing // from a scrolled quick settings. return interpolate(getQsExpansionFraction(), mNotificationStackScroller.getIntrinsicPadding() - mNotificationTopPadding, mQsMaxExpansionHeight); Loading @@ -1133,7 +1143,9 @@ public class NotificationPanelView extends PanelView implements private void requestScrollerTopPaddingUpdate(boolean animate) { mNotificationStackScroller.updateTopPadding(calculateQsTopPadding(), mScrollView.getScrollY(), mAnimateNextTopPaddingChange || animate); mAnimateNextTopPaddingChange || animate, mKeyguardShowing && (mTwoFingerQsExpand || mIsExpanding && mQsExpandedWhenExpandingStarted)); mAnimateNextTopPaddingChange = false; } Loading Loading @@ -1263,18 +1275,27 @@ public class NotificationPanelView extends PanelView implements @Override protected void onHeightUpdated(float expandedHeight) { if (!mQsExpanded) { if (!mQsExpanded || mTwoFingerQsExpand || mIsExpanding && mQsExpandedWhenExpandingStarted) { positionClockAndNotifications(); } if (mTwoFingerQsExpand || mQsExpanded && !mQsTracking && mQsExpansionAnimator == null && !mQsExpansionFromOverscroll) { float t; if (mKeyguardShowing) { // 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() + mNotificationStackScroller.getMinStackHeight() + mNotificationStackScroller.getNotificationTopPadding(); float panelHeightQsExpanded = calculatePanelHeightQsExpanded(); float t = (expandedHeight - panelHeightQsCollapsed) t = (expandedHeight - panelHeightQsCollapsed) / (panelHeightQsExpanded - panelHeightQsCollapsed); } setQsExpansion(mQsMinExpansionHeight + t * (getTempQsMaxExpansion() - mQsMinExpansionHeight)); } Loading Loading @@ -1308,8 +1329,10 @@ public class NotificationPanelView extends PanelView implements float notificationHeight = mNotificationStackScroller.getHeight() - mNotificationStackScroller.getEmptyBottomMargin() - mNotificationStackScroller.getTopPadding(); float totalHeight = mQsMaxExpansionHeight + notificationHeight + mNotificationStackScroller.getNotificationTopPadding(); float totalHeight = Math.max( mQsMaxExpansionHeight + mNotificationStackScroller.getNotificationTopPadding(), mClockPositionResult.stackScrollerPadding - mTopPaddingAdjustment) + notificationHeight; if (totalHeight > mNotificationStackScroller.getHeight()) { float fullyCollapsedHeight = mQsMaxExpansionHeight + mNotificationStackScroller.getMinStackHeight() Loading Loading @@ -1442,7 +1465,7 @@ public class NotificationPanelView extends PanelView implements super.onExpandingStarted(); mNotificationStackScroller.onExpansionStarted(); mIsExpanding = true; mQsExpandedWhenExpandingStarted = mQsExpanded; mQsExpandedWhenExpandingStarted = mQsFullyExpanded; if (mQsExpanded) { onQsExpansionStarted(); } Loading Loading @@ -1496,11 +1519,12 @@ public class NotificationPanelView extends PanelView implements @Override protected void onTrackingStarted() { super.onTrackingStarted(); if (mQsFullyExpanded) { mTwoFingerQsExpand = true; } if (mStatusBar.getBarState() == StatusBarState.KEYGUARD || mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED) { mAfforanceHelper.animateHideLeftRightIcon(); } else if (mQsExpanded) { mTwoFingerQsExpand = true; } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +1 −1 Original line number Diff line number Diff line Loading @@ -639,10 +639,10 @@ public abstract class PanelView extends FrameLayout { } mExpandedHeight = Math.max(0, mExpandedHeight); onHeightUpdated(mExpandedHeight); mExpandedFraction = Math.min(1f, fhWithoutOverExpansion == 0 ? 0 : mExpandedHeight / fhWithoutOverExpansion); onHeightUpdated(mExpandedHeight); notifyBarPanelExpansionChanged(); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +23 −4 Original line number Diff line number Diff line Loading @@ -71,6 +71,12 @@ public class NotificationStackScrollLayout extends ViewGroup private SwipeHelper mSwipeHelper; private boolean mSwipingInProgress; private int mCurrentStackHeight = Integer.MAX_VALUE; /** * mCurrentStackHeight is the actual stack height, mLastSetStackHeight is the stack height set * externally from {@link #setStackHeight} */ private float mLastSetStackHeight; private int mOwnScrollY; private int mMaxLayoutHeight; Loading Loading @@ -453,6 +459,7 @@ public class NotificationStackScrollLayout extends ViewGroup * @param height the new height of the stack */ public void setStackHeight(float height) { mLastSetStackHeight = height; setIsExpanded(height > 0.0f); int newStackHeight = (int) height; int minStackHeight = getMinStackHeight(); Loading Loading @@ -1349,7 +1356,19 @@ public class NotificationStackScrollLayout extends ViewGroup && initialVelocity > 0; } public void updateTopPadding(float qsHeight, int scrollY, boolean animate) { /** * Updates the top padding of the notifications, taking {@link #getIntrinsicPadding()} into * account. * * @param qsHeight the top padding imposed by the quick settings panel * @param scrollY how much the notifications are scrolled inside the QS/notifications scroll * container * @param animate whether to animate the change * @param ignoreIntrinsicPadding if true, {@link #getIntrinsicPadding()} is ignored and * {@code qsHeight} is the final top padding */ public void updateTopPadding(float qsHeight, int scrollY, boolean animate, boolean ignoreIntrinsicPadding) { float start = qsHeight - scrollY + mNotificationTopPadding; float stackHeight = getHeight() - start; int minStackHeight = getMinStackHeight(); Loading @@ -1357,13 +1376,13 @@ public class NotificationStackScrollLayout extends ViewGroup float overflow = minStackHeight - stackHeight; stackHeight = minStackHeight; start = getHeight() - stackHeight; setTranslationY(overflow); mTopPaddingOverflow = overflow; } else { setTranslationY(0); mTopPaddingOverflow = 0; } setTopPadding(clampPadding((int) start), animate); setTopPadding(ignoreIntrinsicPadding ? (int) start : clampPadding((int) start), animate); setStackHeight(mLastSetStackHeight); } public int getNotificationTopPadding() { Loading