diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java index de2eca2b655cd..bd2209b0d2920 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java @@ -35,7 +35,7 @@ public interface QS extends FragmentBase { String ACTION = "com.android.systemui.action.PLUGIN_QS"; - int VERSION = 10; + int VERSION = 11; String TAG = "QS"; @@ -108,6 +108,20 @@ public interface QS extends FragmentBase { */ void setCollapsedMediaVisibilityChangedListener(Consumer listener); + /** + * Set a scroll listener for the QSPanel container + */ + default void setScrollListener(ScrollListener scrollListener) {} + + /** + * Callback for when QSPanel container is scrolled + */ + @ProvidesInterface(version = ScrollListener.VERSION) + interface ScrollListener { + int VERSION = 1; + void onQsPanelScrollChanged(int scrollY); + } + @ProvidesInterface(version = HeightListener.VERSION) interface HeightListener { int VERSION = 1; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index 74550f26b6e94..e9b19e5cfa6f2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -215,7 +215,7 @@ public class QSContainerImpl extends FrameLayout { public void setExpansion(float expansion) { mQsExpansion = expansion; - mQSPanelContainer.setScrollingEnabled(expansion > 0.0f); + mQSPanelContainer.setScrollingEnabled(expansion > 0f); updateExpansion(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index 998cff2bb1fdd..0d91f29b5b2e7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -108,6 +108,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca private QSPanelController mQSPanelController; private QuickQSPanelController mQuickQSPanelController; private QSCustomizerController mQSCustomizerController; + private ScrollListener mScrollListener; private FeatureFlags mFeatureFlags; /** * When true, QS will translate from outside the screen. It will be clipped with parallax @@ -171,9 +172,12 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca }); mQSPanelScrollView.setOnScrollChangeListener( (v, scrollX, scrollY, oldScrollX, oldScrollY) -> { - // Lazily update animators whenever the scrolling changes - mQSAnimator.onQsScrollingChanged(); - mHeader.setExpandedScrollAmount(scrollY); + // Lazily update animators whenever the scrolling changes + mQSAnimator.onQsScrollingChanged(); + mHeader.setExpandedScrollAmount(scrollY); + if (mScrollListener != null) { + mScrollListener.onQsPanelScrollChanged(scrollY); + } }); mQSDetail = view.findViewById(R.id.qs_detail); mHeader = view.findViewById(R.id.header); @@ -213,6 +217,11 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca }); } + @Override + public void setScrollListener(ScrollListener listener) { + mScrollListener = listener; + } + @Override public void onDestroy() { super.onDestroy(); @@ -222,6 +231,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca } mQSCustomizerController.setQs(null); mQsDetailDisplayer.setQsPanelController(null); + mScrollListener = null; } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index c123a40399c91..7fdc2e36eb24e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -3477,6 +3477,14 @@ public class NotificationPanelViewController extends PanelViewController { return !isFullWidth() || !mShowIconsWhenExpanded; } + public final QS.ScrollListener mScrollListener = scrollY -> { + if (scrollY > 0 && !mQsFullyExpanded) { + if (DEBUG) Log.d(TAG, "Scrolling while not expanded. Forcing expand"); + // If we are scrolling QS, we should be fully expanded. + expandWithQs(); + } + }; + private final FragmentListener mFragmentListener = new FragmentListener() { @Override public void onFragmentViewCreated(String tag, Fragment fragment) { @@ -3506,6 +3514,7 @@ public class NotificationPanelViewController extends PanelViewController { }); mLockscreenShadeTransitionController.setQS(mQs); mNotificationStackScrollLayoutController.setQsContainer((ViewGroup) mQs.getView()); + mQs.setScrollListener(mScrollListener); updateQsExpansion(); }