From e1be342615db772ff11d369150349dbd874076f1 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 9 Feb 2016 10:51:40 -0500 Subject: [PATCH 1/2] Extract QS animations to QSContainer Move some of the logic for QS animations into QSContainer with a stable interface for NotificationPanelView to call. This also moves the QSPanel out of the scroll container and up to live in with the header (QSContainer is the parent of both the header and the QSPanel now). Change-Id: I618e363ccca2be9197a4a75256e0b7841ca2c61c --- packages/SystemUI/res/layout/qs_panel.xml | 11 +- .../res/layout/status_bar_expanded.xml | 17 +- .../com/android/systemui/qs/QSContainer.java | 147 ++++++++++++- .../phone/NotificationPanelView.java | 205 ++++-------------- 4 files changed, 193 insertions(+), 187 deletions(-) diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index bb37b83af3366..45236a075e72f 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -18,13 +18,16 @@ android:id="@+id/quick_settings_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@drawable/qs_background_primary" - android:paddingBottom="8dp" - android:elevation="2dp"> + android:background="@drawable/qs_background_primary"> + android:layout_height="wrap_content" + android:paddingBottom="8dp" /> + + + diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 89abe2dc2c4c3..0ebbdd87657af 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -31,6 +31,12 @@ android:layout_height="wrap_content" android:visibility="gone" /> + + - @@ -90,12 +91,6 @@ layout="@layout/keyguard_bottom_area" android:visibility="gone" /> - - = 1f ? amount : 0f; - mStackScrollerOverscrolling = rounded != 0f && isRubberbanded; + setOverScrolling(rounded != 0f && isRubberbanded); mQsExpansionFromOverscroll = rounded != 0f; mLastOverscroll = rounded; updateQsState(); @@ -964,12 +952,17 @@ public class NotificationPanelView extends PanelView implements @Override public void run() { mStackScrollerOverscrolling = false; - mQsExpansionFromOverscroll = false; + setOverScrolling(false); updateQsState(); } }, false /* isClick */); } + private void setOverScrolling(boolean overscrolling) { + mStackScrollerOverscrolling = overscrolling; + mQsContainer.setOverscrolling(overscrolling); + } + private void onQsExpansionStarted() { onQsExpansionStarted(0); } @@ -997,7 +990,6 @@ public class NotificationPanelView extends PanelView implements mFalsingManager.setQsExpanded(expanded); mNotificationStackScroller.setInterceptDelegateEnabled(expanded); mStatusBar.setQsExpanded(expanded); - mQsPanel.setExpanded(expanded); mNotificationContainerParent.setQsExpanded(expanded); } } @@ -1011,15 +1003,18 @@ public class NotificationPanelView extends PanelView implements mStatusBarState = statusBarState; mKeyguardShowing = keyguardShowing; + mQsContainer.setKeyguardShowing(mKeyguardShowing); if (goingToFullShade || (oldState == StatusBarState.KEYGUARD && statusBarState == StatusBarState.SHADE_LOCKED)) { animateKeyguardStatusBarOut(); - animateHeaderSlidingIn(); + long delay = mStatusBarState == StatusBarState.SHADE_LOCKED + ? 0 : mStatusBar.calculateGoingToFullShadeDelay(); + mQsContainer.animateHeaderSlidingIn(delay); } else if (oldState == StatusBarState.SHADE_LOCKED && statusBarState == StatusBarState.KEYGUARD) { animateKeyguardStatusBarIn(StackStateAnimator.ANIMATION_DURATION_STANDARD); - animateHeaderSlidingOut(); + mQsContainer.animateHeaderSlidingOut(); } else { mKeyguardStatusBar.setAlpha(1f); mKeyguardStatusBar.setVisibility(keyguardShowing ? View.VISIBLE : View.INVISIBLE); @@ -1050,95 +1045,6 @@ public class NotificationPanelView extends PanelView implements } }; - private final Animator.AnimatorListener mAnimateHeaderSlidingInListener - = new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mHeaderAnimating = false; - mQsContainerAnimator = null; - mQsContainer.removeOnLayoutChangeListener(mQsContainerAnimatorUpdater); - } - }; - - private final OnLayoutChangeListener mQsContainerAnimatorUpdater - = new OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, - int oldTop, int oldRight, int oldBottom) { - int oldHeight = oldBottom - oldTop; - int height = bottom - top; - if (height != oldHeight && mQsContainerAnimator != null) { - PropertyValuesHolder[] values = mQsContainerAnimator.getValues(); - float newEndValue = mHeader.getCollapsedHeight() + mQsPeekHeight - height - top; - float newStartValue = -height - top; - values[0].setFloatValues(newStartValue, newEndValue); - mQsContainerAnimator.setCurrentPlayTime(mQsContainerAnimator.getCurrentPlayTime()); - } - } - }; - - private final ViewTreeObserver.OnPreDrawListener mStartHeaderSlidingIn - = new ViewTreeObserver.OnPreDrawListener() { - @Override - public boolean onPreDraw() { - getViewTreeObserver().removeOnPreDrawListener(this); - long delay = mStatusBarState == StatusBarState.SHADE_LOCKED - ? 0 - : mStatusBar.calculateGoingToFullShadeDelay(); - mHeader.setTranslationY(-mHeader.getCollapsedHeight() - mQsPeekHeight); - mHeader.animate() - .translationY(0f) - .setStartDelay(delay) - .setDuration(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE) - .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) - .start(); - mQsContainer.setY(-mQsContainer.getHeight()); - mQsContainerAnimator = ObjectAnimator.ofFloat(mQsContainer, View.TRANSLATION_Y, - mQsContainer.getTranslationY(), - mHeader.getCollapsedHeight() + mQsPeekHeight - mQsContainer.getHeight() - - mQsContainer.getTop()); - mQsContainerAnimator.setStartDelay(delay); - mQsContainerAnimator.setDuration(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE); - mQsContainerAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); - mQsContainerAnimator.addListener(mAnimateHeaderSlidingInListener); - mQsContainerAnimator.start(); - mQsContainer.addOnLayoutChangeListener(mQsContainerAnimatorUpdater); - return true; - } - }; - - private void animateHeaderSlidingIn() { - // If the QS is already expanded we don't need to slide in the header as it's already - // visible. - if (!mQsExpanded) { - mHeaderAnimating = true; - getViewTreeObserver().addOnPreDrawListener(mStartHeaderSlidingIn); - } - } - - private void animateHeaderSlidingOut() { - mHeaderAnimating = true; - mHeader.animate().y(-mHeader.getHeight()) - .setStartDelay(0) - .setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD) - .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mHeader.animate().setListener(null); - mHeaderAnimating = false; - updateQsState(); - } - }) - .start(); - mQsContainer.animate() - .y(-mQsContainer.getHeight()) - .setStartDelay(0) - .setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD) - .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) - .start(); - } - private final Runnable mAnimateKeyguardStatusBarInvisibleEndRunnable = new Runnable() { @Override public void run() { @@ -1262,18 +1168,10 @@ public class NotificationPanelView extends PanelView implements } private void updateQsState() { - boolean expandVisually = mQsExpanded || mStackScrollerOverscrolling || mHeaderAnimating; - mHeader.setVisibility((mQsExpanded || !mKeyguardShowing || mHeaderAnimating) - ? View.VISIBLE - : View.INVISIBLE); - mHeader.setExpanded((mKeyguardShowing && !mHeaderAnimating) - || (mQsExpanded && !mStackScrollerOverscrolling)); + mQsContainer.setExpanded(mQsExpanded); mNotificationStackScroller.setScrollingEnabled( mStatusBarState != StatusBarState.KEYGUARD && (!mQsExpanded || mQsExpansionFromOverscroll)); - mQsPanel.setVisibility(expandVisually ? View.VISIBLE : View.INVISIBLE); - mQsContainer.setVisibility( - mKeyguardShowing && !expandVisually ? View.INVISIBLE : View.VISIBLE); mScrollView.setTouchEnabled(mQsExpanded); updateEmptyShadeView(); mQsNavbarScrim.setVisibility(mStatusBarState == StatusBarState.SHADE && mQsExpanded @@ -1298,11 +1196,10 @@ public class NotificationPanelView extends PanelView implements } } mQsExpansionHeight = height; - mHeader.setExpansion(getHeaderExpansionFraction()); - setQsTranslation(height); + updateQsExpansion(); requestScrollerTopPaddingUpdate(false /* animate */); if (mKeyguardShowing) { - updateHeaderKeyguard(); + updateHeaderKeyguardAlpha(); } if (mStatusBarState == StatusBarState.SHADE_LOCKED || mStatusBarState == StatusBarState.KEYGUARD) { @@ -1329,6 +1226,10 @@ public class NotificationPanelView extends PanelView implements } } + private void updateQsExpansion() { + mQsContainer.setQsExpansion(getQsExpansionFraction(), getHeaderTranslation()); + } + private String getKeyguardOrLockScreenString() { if (mStatusBarState == StatusBarState.KEYGUARD) { return getContext().getString(R.string.accessibility_desc_lock_screen); @@ -1337,23 +1238,6 @@ public class NotificationPanelView extends PanelView implements } } - private float getHeaderExpansionFraction() { - if (!mKeyguardShowing) { - return getQsExpansionFraction(); - } else { - return 1f; - } - } - - private void setQsTranslation(float height) { - if (!mHeaderAnimating) { - mQsContainer.setY(height - mQsContainer.getDesiredHeight() + getHeaderTranslation()); - } - if (mKeyguardShowing && !mHeaderAnimating) { - mHeader.setY(interpolate(getQsExpansionFraction(), -mHeader.getHeight(), 0)); - } - } - private float calculateQsTopPadding() { if (mKeyguardShowing && (mQsExpandImmediate || mIsExpanding && mQsExpandedWhenExpandingStarted)) { @@ -1478,7 +1362,7 @@ public class NotificationPanelView extends PanelView implements if (!mQsExpansionEnabled || mCollapsedOnDown) { return false; } - View header = mKeyguardShowing ? mKeyguardStatusBar : mHeader; + View header = mKeyguardShowing ? mKeyguardStatusBar : mQsContainer; boolean onHeader = x >= header.getX() && x <= header.getX() + header.getWidth() && y >= header.getTop() && y <= header.getBottom(); if (mQsExpanded) { @@ -1678,18 +1562,9 @@ public class NotificationPanelView extends PanelView implements */ private void updateHeader() { if (mStatusBar.getBarState() == StatusBarState.KEYGUARD) { - updateHeaderKeyguard(); - } else { - updateHeaderShade(); + updateHeaderKeyguardAlpha(); } - - } - - private void updateHeaderShade() { - if (!mHeaderAnimating) { - mHeader.setTranslationY(getHeaderTranslation()); - } - setQsTranslation(mQsExpansionHeight); + updateQsExpansion(); } private float getHeaderTranslation() { @@ -1744,11 +1619,6 @@ public class NotificationPanelView extends PanelView implements && !mDozing ? VISIBLE : INVISIBLE); } - private void updateHeaderKeyguard() { - updateHeaderKeyguardAlpha(); - setQsTranslation(mQsExpansionHeight); - } - private void updateKeyguardBottomAreaAlpha() { float alpha = Math.min(getKeyguardContentsAlpha(), 1 - getQsExpansionFraction()); mKeyguardBottomArea.setAlpha(alpha); @@ -1811,9 +1681,8 @@ public class NotificationPanelView extends PanelView implements } private void setListening(boolean listening) { - mHeader.setListening(listening); + mQsContainer.setListening(listening); mKeyguardStatusBar.setListening(listening); - mQsPanel.setListening(listening); } @Override @@ -1931,7 +1800,7 @@ public class NotificationPanelView extends PanelView implements @Override public void onClick(View v) { - if (v == mHeader) { + if (v == mQsContainer.getHeader()) { onQsExpansionStarted(); if (mQsExpanded) { flingSettings(0 /* vel */, false /* expand */, null, true /* isClick */); @@ -2162,11 +2031,11 @@ public class NotificationPanelView extends PanelView implements } public boolean isQsDetailShowing() { - return mQsPanel.isShowingDetail(); + return mQsContainer.getQsPanel().isShowingDetail(); } public void closeQsDetail() { - mQsPanel.closeDetail(); + mQsContainer.getQsPanel().closeDetail(); } @Override @@ -2254,7 +2123,7 @@ public class NotificationPanelView extends PanelView implements private final Runnable mUpdateHeader = new Runnable() { @Override public void run() { - mHeader.updateEverything(); + mQsContainer.getHeader().updateEverything(); } }; @@ -2401,7 +2270,7 @@ public class NotificationPanelView extends PanelView implements protected void setVerticalPanelTranslation(float translation) { mNotificationStackScroller.setTranslationX(translation); mScrollView.setTranslationX(translation); - mHeader.setTranslationX(translation); + mQsContainer.setTranslationX(translation); } private void updateStackHeight(float stackHeight) { From 16ac3774e394d50600079697ea867a3c847ebd95 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 10 Feb 2016 15:39:21 -0500 Subject: [PATCH 2/2] Fix QS input handling Remove the observable scroll view and put the qs container in its place. Also update the NotificationStackScrollerLayout to be aware of the container and not eat up its touches as scroll events. Change-Id: I8a56254bf8e76a7cdd63bd637a974c1f3aa49482 --- .../res/layout/status_bar_expanded.xml | 30 +------- .../com/android/systemui/qs/QSContainer.java | 1 - .../phone/NotificationPanelView.java | 75 +++---------------- .../NotificationsQuickSettingsContainer.java | 14 ++-- .../statusbar/phone/PhoneStatusBar.java | 6 -- .../stack/NotificationStackScrollLayout.java | 35 ++------- 6 files changed, 28 insertions(+), 133 deletions(-) diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 0ebbdd87657af..289b1d9db32c1 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -31,12 +31,6 @@ android:layout_height="wrap_content" android:visibility="gone" /> - - - - - - - - - - + android:layout_height="wrap_content" + android:layout_gravity="@integer/notification_panel_layout_gravity" /> = mScrollView.getX() && x <= mScrollView.getX() + mScrollView.getWidth()) && + return (x >= mQsContainer.getX() && x <= mQsContainer.getX() + mQsContainer.getWidth()) && (y <= mNotificationStackScroller.getBottomMostNotificationBottom() || y <= mQsContainer.getY() + mQsContainer.getHeight()); } @@ -972,11 +948,7 @@ public class NotificationPanelView extends PanelView implements cancelHeightAnimator(); // Reset scroll position and apply that position to the expanded height. - float height = mQsExpansionHeight - mScrollView.getScrollY() - overscrollAmount; - if (mScrollView.getScrollY() != 0) { - mScrollYOverride = mScrollView.getScrollY(); - } - mScrollView.scrollTo(0, 0); + float height = mQsExpansionHeight - overscrollAmount; setQsExpansion(height); requestPanelHeightUpdate(); } @@ -988,7 +960,6 @@ public class NotificationPanelView extends PanelView implements updateQsState(); requestPanelHeightUpdate(); mFalsingManager.setQsExpanded(expanded); - mNotificationStackScroller.setInterceptDelegateEnabled(expanded); mStatusBar.setQsExpanded(expanded); mNotificationContainerParent.setQsExpanded(expanded); } @@ -1172,7 +1143,6 @@ public class NotificationPanelView extends PanelView implements mNotificationStackScroller.setScrollingEnabled( mStatusBarState != StatusBarState.KEYGUARD && (!mQsExpanded || mQsExpansionFromOverscroll)); - mScrollView.setTouchEnabled(mQsExpanded); updateEmptyShadeView(); mQsNavbarScrim.setVisibility(mStatusBarState == StatusBarState.SHADE && mQsExpanded && !mStackScrollerOverscrolling && mQsScrimEnabled @@ -1256,7 +1226,7 @@ public class NotificationPanelView extends PanelView implements mQsMinExpansionHeight, max); } else if (mQsSizeChangeAnimator != null) { return (int) mQsSizeChangeAnimator.getAnimatedValue(); - } else if (mKeyguardShowing && mScrollYOverride == -1) { + } else if (mKeyguardShowing) { // We can only do the smoother transition on Keyguard when we also are not collapsing // from a scrolled quick settings. @@ -1270,7 +1240,6 @@ public class NotificationPanelView extends PanelView implements private void requestScrollerTopPaddingUpdate(boolean animate) { mNotificationStackScroller.updateTopPadding(calculateQsTopPadding(), - mScrollView.getScrollY(), mAnimateNextTopPaddingChange || animate, mKeyguardShowing && (mQsExpandImmediate || mIsExpanding && mQsExpandedWhenExpandingStarted)); @@ -1312,7 +1281,6 @@ public class NotificationPanelView extends PanelView implements boolean isClick) { float target = expand ? mQsMaxExpansionHeight : mQsMinExpansionHeight; if (target == mQsExpansionHeight) { - mScrollYOverride = -1; if (onFinishRunnable != null) { onFinishRunnable.run(); } @@ -1322,7 +1290,6 @@ public class NotificationPanelView extends PanelView implements if (belowFalsingThreshold) { vel = 0; } - mScrollView.setBlockFlinging(true); ValueAnimator animator = ValueAnimator.ofFloat(mQsExpansionHeight, target); if (isClick) { animator.setInterpolator(Interpolators.TOUCH_RESPONSE); @@ -1342,8 +1309,6 @@ public class NotificationPanelView extends PanelView implements animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - mScrollView.setBlockFlinging(false); - mScrollYOverride = -1; mQsExpansionAnimator = null; if (onFinishRunnable != null) { onFinishRunnable.run(); @@ -1362,11 +1327,11 @@ public class NotificationPanelView extends PanelView implements if (!mQsExpansionEnabled || mCollapsedOnDown) { return false; } - View header = mKeyguardShowing ? mKeyguardStatusBar : mQsContainer; + View header = mKeyguardShowing ? mKeyguardStatusBar : mQsContainer.getHeader(); boolean onHeader = x >= header.getX() && x <= header.getX() + header.getWidth() && y >= header.getTop() && y <= header.getBottom(); if (mQsExpanded) { - return onHeader || (mScrollView.isScrolledToBottom() && yDiff < 0) && isInQsArea(x, y); + return onHeader || (yDiff < 0 && isInQsArea(x, y)); } else { return onHeader; } @@ -1378,7 +1343,7 @@ public class NotificationPanelView extends PanelView implements return mStatusBar.getBarState() == StatusBarState.KEYGUARD || mNotificationStackScroller.isScrolledToBottom(); } else { - return mScrollView.isScrolledToBottom(); + return true; } } @@ -1455,11 +1420,7 @@ public class NotificationPanelView extends PanelView implements * collapsing QS / the panel when QS was scrolled */ private int getTempQsMaxExpansion() { - int qsTempMaxExpansion = mQsMaxExpansionHeight; - if (mScrollYOverride != -1) { - qsTempMaxExpansion -= mScrollYOverride; - } - return qsTempMaxExpansion; + return mQsMaxExpansionHeight; } private int calculatePanelHeightShade() { @@ -1497,20 +1458,12 @@ public class NotificationPanelView extends PanelView implements + notificationHeight; if (totalHeight > mNotificationStackScroller.getHeight()) { float fullyCollapsedHeight = maxQsHeight - + mNotificationStackScroller.getMinStackHeight() - - getScrollViewScrollY(); + + mNotificationStackScroller.getMinStackHeight(); totalHeight = Math.max(fullyCollapsedHeight, mNotificationStackScroller.getHeight()); } return (int) totalHeight; } - private int getScrollViewScrollY() { - if (mScrollYOverride != -1 && !mQsTracking) { - return mScrollYOverride; - } else { - return mScrollView.getScrollY(); - } - } private void updateNotificationTranslucency() { float alpha = 1f; if (mClosingWithAlphaFadeOut && !mExpandingFromHeadsUp && !mHeadsUpManager.hasPinnedHeadsUp()) { @@ -1651,7 +1604,6 @@ public class NotificationPanelView extends PanelView implements mNotificationStackScroller.onExpansionStopped(); mHeadsUpManager.onExpandingFinished(); mIsExpanding = false; - mScrollYOverride = -1; if (isFullyCollapsed()) { DejankUtils.postAfterTraversal(new Runnable() { @Override @@ -2018,14 +1970,6 @@ public class NotificationPanelView extends PanelView implements return mConflictingQsExpansionGesture && mQsExpanded; } - public void notifyVisibleChildrenChanged() { - if (mNotificationStackScroller.getNotGoneChildCount() != 0) { - mReserveNotificationSpace.setVisibility(View.VISIBLE); - } else { - mReserveNotificationSpace.setVisibility(View.GONE); - } - } - public boolean isQsExpanded() { return mQsExpanded; } @@ -2269,7 +2213,6 @@ public class NotificationPanelView extends PanelView implements protected void setVerticalPanelTranslation(float translation) { mNotificationStackScroller.setTranslationX(translation); - mScrollView.setTranslationX(translation); mQsContainer.setTranslationX(translation); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java index fd28b095c09de..7cc720df1c270 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -33,7 +33,7 @@ import com.android.systemui.R; public class NotificationsQuickSettingsContainer extends FrameLayout implements ViewStub.OnInflateListener { - private View mScrollView; + private View mQsContainer; private View mUserSwitcher; private View mStackScroller; private View mKeyguardStatusBar; @@ -47,7 +47,7 @@ public class NotificationsQuickSettingsContainer extends FrameLayout @Override protected void onFinishInflate() { super.onFinishInflate(); - mScrollView = findViewById(R.id.scroll_view); + mQsContainer = findViewById(R.id.quick_settings_container); mStackScroller = findViewById(R.id.notification_stack_scroller); mKeyguardStatusBar = findViewById(R.id.keyguard_header); ViewStub userSwitcher = (ViewStub) findViewById(R.id.keyguard_user_switcher); @@ -58,7 +58,7 @@ public class NotificationsQuickSettingsContainer extends FrameLayout @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - reloadWidth(mScrollView); + reloadWidth(mQsContainer); reloadWidth(mStackScroller); } @@ -80,11 +80,11 @@ public class NotificationsQuickSettingsContainer extends FrameLayout boolean userSwitcherVisible = mInflated && mUserSwitcher.getVisibility() == View.VISIBLE; boolean statusBarVisible = mKeyguardStatusBar.getVisibility() == View.VISIBLE; - View stackQsTop = mQsExpanded ? mStackScroller : mScrollView; - View stackQsBottom = !mQsExpanded ? mStackScroller : mScrollView; + View stackQsTop = mQsExpanded ? mStackScroller : mQsContainer; + View stackQsBottom = !mQsExpanded ? mStackScroller : mQsContainer; // Invert the order of the scroll view and user switcher such that the notifications receive // touches first but the panel gets drawn above. - if (child == mScrollView) { + if (child == mQsContainer) { return super.drawChild(canvas, userSwitcherVisible && statusBarVisible ? mUserSwitcher : statusBarVisible ? mKeyguardStatusBar : userSwitcherVisible ? mUserSwitcher @@ -104,7 +104,7 @@ public class NotificationsQuickSettingsContainer extends FrameLayout return super.drawChild(canvas, stackQsTop, drawingTime); - }else { + } else { return super.drawChild(canvas, child, drawingTime); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 50a49a1dbd2c1..f382fe05650aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1599,12 +1599,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateNotifications(); } - @Override - protected void updateRowStates() { - super.updateRowStates(); - mNotificationPanel.notifyVisibleChildrenChanged(); - } - @Override protected void setAreThereNotifications() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 49e9c3db9f308..a75ac8219aa3c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -213,7 +213,6 @@ public class NotificationStackScrollLayout extends ViewGroup * animating. */ private boolean mOnlyScrollingInThisMotion; - private ViewGroup mScrollView; private boolean mInterceptDelegateEnabled; private boolean mDelegateToScrollView; private boolean mDisallowScrollingInThisMotion; @@ -281,6 +280,7 @@ public class NotificationStackScrollLayout extends ViewGroup setDimAmount((Float) animation.getAnimatedValue()); } }; + private ViewGroup mQsContainer; public NotificationStackScrollLayout(Context context) { this(context, null); @@ -630,12 +630,8 @@ public class NotificationStackScrollLayout extends ViewGroup mLongPressListener = listener; } - public void setScrollView(ViewGroup scrollView) { - mScrollView = scrollView; - } - - public void setInterceptDelegateEnabled(boolean interceptDelegateEnabled) { - mInterceptDelegateEnabled = interceptDelegateEnabled; + public void setQsContainer(ViewGroup qsContainer) { + mQsContainer = qsContainer; } public void onChildDismissed(View v) { @@ -883,13 +879,6 @@ public class NotificationStackScrollLayout extends ViewGroup public boolean onTouchEvent(MotionEvent ev) { boolean isCancelOrUp = ev.getActionMasked() == MotionEvent.ACTION_CANCEL || ev.getActionMasked()== MotionEvent.ACTION_UP; - if (mDelegateToScrollView) { - if (isCancelOrUp) { - mDelegateToScrollView = false; - } - transformTouchEvent(ev, this, mScrollView); - return mScrollView.onTouchEvent(ev); - } handleEmptySpaceClick(ev); boolean expandWantsIt = false; if (mIsExpanded && !mSwipingInProgress && !mOnlyScrollingInThisMotion) { @@ -929,6 +918,9 @@ public class NotificationStackScrollLayout extends ViewGroup if (!isScrollingEnabled()) { return false; } + if (ev.getY() < mQsContainer.getBottom()) { + return false; + } initVelocityTrackerIfNotExists(); mVelocityTracker.addMovement(ev); @@ -1776,15 +1768,13 @@ public class NotificationStackScrollLayout extends ViewGroup * 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, + public void updateTopPadding(float qsHeight, boolean animate, boolean ignoreIntrinsicPadding) { - float start = qsHeight - scrollY; + float start = qsHeight; float stackHeight = getHeight() - start; int minStackHeight = getMinStackHeight(); if (stackHeight <= minStackHeight) { @@ -1867,15 +1857,6 @@ public class NotificationStackScrollLayout extends ViewGroup @Override public boolean onInterceptTouchEvent(MotionEvent ev) { - if (mInterceptDelegateEnabled) { - transformTouchEvent(ev, this, mScrollView); - if (mScrollView.onInterceptTouchEvent(ev)) { - mDelegateToScrollView = true; - removeLongPressCallback(); - return true; - } - transformTouchEvent(ev, mScrollView, this); - } initDownStates(ev); handleEmptySpaceClick(ev); boolean expandWantsIt = false;