diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index 1784f73e1f531..cdf770f80387e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -178,7 +178,10 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { @Override public void setSquishinessFraction(float squishinessFraction) { - // No-op, paged layouts are not squishy. + int nPages = mPages.size(); + for (int i = 0; i < nPages; i++) { + mPages.get(i).setSquishinessFraction(squishinessFraction); + } } private void updateListening() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSquishinessController.kt b/packages/SystemUI/src/com/android/systemui/qs/QSSquishinessController.kt index 4854600994aa2..c1c146d40e383 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSSquishinessController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/QSSquishinessController.kt @@ -3,15 +3,14 @@ package com.android.systemui.qs import android.view.ViewGroup import com.android.systemui.qs.dagger.QSFragmentModule.QQS_FOOTER import com.android.systemui.qs.dagger.QSScope -import com.android.systemui.qs.tileimpl.HeightOverrideable import javax.inject.Inject import javax.inject.Named @QSScope class QSSquishinessController @Inject constructor( - private val qsTileHost: QSTileHost, @Named(QQS_FOOTER) private val qqsFooterActionsView: FooterActionsView, private val qsAnimator: QSAnimator, + private val qsPanelController: QSPanelController, private val quickQSPanelController: QuickQSPanelController ) { @@ -34,18 +33,10 @@ class QSSquishinessController @Inject constructor( * Change the height of all tiles and repositions their siblings. */ private fun updateSquishiness() { - // Update tile positions in the layout + (qsPanelController.tileLayout as QSPanel.QSTileLayout).setSquishinessFraction(squishiness) val tileLayout = quickQSPanelController.tileLayout as TileLayout tileLayout.setSquishinessFraction(squishiness) - // Adjust their heights as well - for (tile in qsTileHost.tiles) { - val tileView = quickQSPanelController.getTileView(tile) - (tileView as? HeightOverrideable)?.let { - it.squishinessFraction = squishiness - } - } - // Calculate how much we should move the footer val tileHeightOffset = tileLayout.height - tileLayout.tilesHeight val footerTopMargin = (qqsFooterActionsView.layoutParams as ViewGroup.MarginLayoutParams) diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 58c05089b0625..7f08e5bdb575f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -13,6 +13,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.systemui.R; import com.android.systemui.qs.QSPanel.QSTileLayout; import com.android.systemui.qs.QSPanelControllerBase.TileRecord; +import com.android.systemui.qs.tileimpl.HeightOverrideable; import java.util.ArrayList; @@ -285,5 +286,11 @@ public class TileLayout extends ViewGroup implements QSTileLayout { } mSquishinessFraction = squishinessFraction; layoutTileRecords(mRecords.size(), false /* forLayout */); + + for (TileRecord record : mRecords) { + if (record.tileView instanceof HeightOverrideable) { + ((HeightOverrideable) record.tileView).setSquishinessFraction(mSquishinessFraction); + } + } } } 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 568e2ff459313..8ec0cf2b858ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -2241,8 +2241,10 @@ public class NotificationPanelViewController extends PanelViewController { private void updateQsExpansion() { if (mQs == null) return; float qsExpansionFraction = computeQsExpansionFraction(); + float squishiness = mNotificationStackScrollLayoutController + .getNotificationSquishinessFraction(); mQs.setQsExpansion(qsExpansionFraction, getExpandedFraction(), getHeaderTranslation(), - mNotificationStackScrollLayoutController.getNotificationSquishinessFraction()); + mQsExpandImmediate || mQsExpanded ? 1f : squishiness); mSplitShadeHeaderController.setQsExpandedFraction(qsExpansionFraction); mMediaHierarchyManager.setQsExpansion(qsExpansionFraction); int qsPanelBottomY = calculateQsBottomPosition(qsExpansionFraction); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSquishinessControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSquishinessControllerTest.kt index 3059aa1ae6585..f41d7b127a9e8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSquishinessControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSquishinessControllerTest.kt @@ -4,13 +4,10 @@ import android.testing.AndroidTestingRunner import android.view.ViewGroup import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase -import com.android.systemui.plugins.qs.QSTile -import com.android.systemui.qs.tileimpl.QSTileViewImpl import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers.any import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.never @@ -21,14 +18,13 @@ import org.mockito.junit.MockitoJUnit @SmallTest class QSSquishinessControllerTest : SysuiTestCase() { - @Mock private lateinit var qsTileHost: QSTileHost @Mock private lateinit var qqsFooterActionsView: FooterActionsView @Mock private lateinit var qqsFooterActionsViewLP: ViewGroup.MarginLayoutParams @Mock private lateinit var qsAnimator: QSAnimator + @Mock private lateinit var qsPanelController: QSPanelController @Mock private lateinit var quickQsPanelController: QuickQSPanelController - @Mock private lateinit var qstileView: QSTileViewImpl - @Mock private lateinit var qstile: QSTile @Mock private lateinit var tileLayout: TileLayout + @Mock private lateinit var pagedTileLayout: PagedTileLayout @JvmField @Rule val mockitoRule = MockitoJUnit.rule() @@ -36,11 +32,10 @@ class QSSquishinessControllerTest : SysuiTestCase() { @Before fun setup() { - qsSquishinessController = QSSquishinessController(qsTileHost, qqsFooterActionsView, - qsAnimator, quickQsPanelController) - `when`(qsTileHost.tiles).thenReturn(mutableListOf(qstile)) - `when`(quickQsPanelController.getTileView(any())).thenReturn(qstileView) + qsSquishinessController = QSSquishinessController(qqsFooterActionsView, qsAnimator, + qsPanelController, quickQsPanelController) `when`(quickQsPanelController.tileLayout).thenReturn(tileLayout) + `when`(qsPanelController.tileLayout).thenReturn(pagedTileLayout) `when`(qqsFooterActionsView.layoutParams).thenReturn(qqsFooterActionsViewLP) } @@ -56,7 +51,7 @@ class QSSquishinessControllerTest : SysuiTestCase() { @Test fun setSquishiness_updatesTiles() { qsSquishinessController.squishiness = 0.5f - verify(qstileView).squishinessFraction = 0.5f verify(tileLayout).setSquishinessFraction(0.5f) + verify(pagedTileLayout).setSquishinessFraction(0.5f) } } \ No newline at end of file