Merge "Fix 2 finger pull down animation" into sc-v2-dev am: 3b7e950c47 am: 54101bac0d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16194773

Change-Id: I2b6ec9a16d1821a03055788b6db11070c1df51a4
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index 1784f73..cdf770f 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 @@
 
     @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 48546009..c1c146d 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 @@
 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 @@
      * 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 58c0508..7f08e5b 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.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 @@
         }
         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 81290bf..b05a9bf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -2376,8 +2376,10 @@
     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 3059aa1..f41d7b1 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.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 @@
 @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 @@
 
     @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 @@
     @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