From acffc8901c6cfe7e271275fa1580ef5887da54bd Mon Sep 17 00:00:00 2001 From: Michal Brzezinski Date: Tue, 13 Jul 2021 11:44:06 +0100 Subject: [PATCH] Fixing notifications in split shade when customizing QS - disabling changing container margins/paddings when customizer is shown in split shade - removing notifying stack scroller about customizer changes in split shade - this should not be needed anymore as now expanded QS and QS customizer always take full height of the screen Bug: 193223224 Test: manual Change-Id: Ice02529d1f6b78c8ff885be3270734ac23ee80e8 --- .../systemui/statusbar/NotificationShelf.java | 1 - .../notification/stack/AmbientState.java | 9 -------- .../stack/NotificationStackScrollLayout.java | 9 +------- .../NotificationPanelViewController.java | 1 + .../NotificationsQuickSettingsContainer.java | 23 ++++++++++++------- .../phone/NotificationPanelViewTest.java | 1 + 6 files changed, 18 insertions(+), 26 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index baac2549055f5..5a20a4452f60f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -183,7 +183,6 @@ public class NotificationShelf extends ActivatableNotificationView implements } viewState.hidden = !mAmbientState.isShadeExpanded() - || mAmbientState.isQsCustomizerShowing() || algorithmState.firstViewInShelf == null; final int indexOfFirstViewInShelf = algorithmState.visibleChildren.indexOf( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java index 197920f7be196..dad0ec9e3887f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java @@ -70,7 +70,6 @@ public class AmbientState { private boolean mPanelFullWidth; private boolean mPulsing; private boolean mUnlockHintRunning; - private boolean mQsCustomizerShowing; private int mIntrinsicPadding; private float mHideAmount; private boolean mAppearing; @@ -483,14 +482,6 @@ public class AmbientState { return mUnlockHintRunning; } - public boolean isQsCustomizerShowing() { - return mQsCustomizerShowing; - } - - public void setQsCustomizerShowing(boolean qsCustomizerShowing) { - mQsCustomizerShowing = qsCustomizerShowing; - } - public void setIntrinsicPadding(int intrinsicPadding) { mIntrinsicPadding = intrinsicPadding; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index e60ec334049fb..285854b0865f9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -4853,12 +4853,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mAmbientState.setUnlockHintRunning(running); } - @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) - public void setQsCustomizerShowing(boolean isShowing) { - mAmbientState.setQsCustomizerShowing(isShowing); - requestChildrenUpdate(); - } - @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public void setHeadsUpGoingAwayAnimationsAllowed(boolean headsUpGoingAwayAnimationsAllowed) { mHeadsUpGoingAwayAnimationsAllowed = headsUpGoingAwayAnimationsAllowed; @@ -4866,13 +4860,12 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - pw.println(String.format("[%s: pulsing=%s qsCustomizerShowing=%s visibility=%s" + pw.println(String.format("[%s: pulsing=%s visibility=%s" + " alpha=%f scrollY:%d maxTopPadding=%d showShelfOnly=%s" + " qsExpandFraction=%f" + " hideAmount=%f]", this.getClass().getSimpleName(), mPulsing ? "T" : "f", - mAmbientState.isQsCustomizerShowing() ? "T" : "f", getVisibility() == View.VISIBLE ? "visible" : getVisibility() == View.GONE ? "gone" : "invisible", 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 920e2a55a89c8..9408203ed68b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -1049,6 +1049,7 @@ public class NotificationPanelViewController extends PanelViewController { constraintSet.getConstraint(R.id.notification_stack_scroller).layout.mWidth = panelWidth; constraintSet.getConstraint(R.id.qs_frame).layout.mWidth = qsWidth; constraintSet.applyTo(mNotificationContainerParent); + mNotificationContainerParent.setSplitShadeEnabled(mShouldUseSplitNotificationShade); updateKeyguardStatusViewAlignment(false /* animate */); 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 ed8fb31aea329..68e28cdba975a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -22,7 +22,6 @@ import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; import android.view.WindowInsets; -import android.widget.FrameLayout; import androidx.constraintlayout.widget.ConstraintLayout; @@ -31,7 +30,6 @@ import com.android.systemui.fragments.FragmentHostManager; import com.android.systemui.fragments.FragmentHostManager.FragmentListener; import com.android.systemui.plugins.qs.QS; import com.android.systemui.statusbar.notification.AboveShelfObserver; -import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import java.util.ArrayList; import java.util.Comparator; @@ -42,8 +40,8 @@ import java.util.Comparator; public class NotificationsQuickSettingsContainer extends ConstraintLayout implements FragmentListener, AboveShelfObserver.HasViewAboveShelfChangedListener { - private FrameLayout mQsFrame; - private NotificationStackScrollLayout mStackScroller; + private View mQsFrame; + private View mStackScroller; private View mKeyguardStatusBar; private boolean mQsExpanded; private boolean mCustomizerAnimating; @@ -52,10 +50,10 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout private int mBottomPadding; private int mStackScrollerMargin; - private boolean mHasViewsAboveShelf; private ArrayList mDrawingOrderedChildren = new ArrayList<>(); private ArrayList mLayoutDrawingOrder = new ArrayList<>(); private final Comparator mIndexComparator = Comparator.comparingInt(this::indexOfChild); + private boolean mSplitShadeEnabled; public NotificationsQuickSettingsContainer(Context context, AttributeSet attrs) { super(context, attrs); @@ -144,7 +142,6 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout public void setCustomizerShowing(boolean isShowing) { mCustomizing = isShowing; updateBottomMargin(); - mStackScroller.setQsCustomizerShowing(isShowing); } public void setDetailShowing(boolean isShowing) { @@ -152,8 +149,19 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout updateBottomMargin(); } + /** + * Sets if split shade is enabled and adjusts margins/paddings depending on QS details and + * customizer state + */ + public void setSplitShadeEnabled(boolean splitShadeEnabled) { + mSplitShadeEnabled = splitShadeEnabled; + // in case device was rotated while showing QS details/customizer + updateBottomMargin(); + } + private void updateBottomMargin() { - if (mCustomizing || mDetailShowing) { + // in split shade, QS state changes should not influence notifications panel + if (!mSplitShadeEnabled && (mCustomizing || mDetailShowing)) { // Clear out bottom paddings/margins so the qs customization can be full height. setPadding(0, 0, 0, 0); setBottomMargin(mStackScroller, 0); @@ -171,7 +179,6 @@ public class NotificationsQuickSettingsContainer extends ConstraintLayout @Override public void onHasViewsAboveShelfChanged(boolean hasViewsAboveShelf) { - mHasViewsAboveShelf = hasViewsAboveShelf; invalidate(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index 1540b14e172e7..2912e3c99bfcb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -351,6 +351,7 @@ public class NotificationPanelViewTest extends SysuiTestCase { mNotificationContainerParent.addView(newViewWithId(R.id.qs_frame)); mNotificationContainerParent.addView(newViewWithId(R.id.notification_stack_scroller)); mNotificationContainerParent.addView(mKeyguardStatusView); + mNotificationContainerParent.onFinishInflate(); when(mView.findViewById(R.id.notification_container_parent)) .thenReturn(mNotificationContainerParent); when(mFragmentService.getFragmentHostManager(mView)).thenReturn(mFragmentHostManager);