Media doesn't clip based on shade footer

Padding moved to a different view in the QS hierarchy. This caused
the wrong clipping to be computed and applied to the UMO.

Fixes: 248562534
Test: Manually checked clipping of UMO on small device
Change-Id: Ib3a39a43d0e54b229af97b7d484ce2ec55d2917c
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index 1422a25..0b7ccbfe 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -757,7 +757,8 @@
         return ShadeInterpolation.getContentAlpha(progress);
     }
 
-    private void updateQsBounds() {
+    @VisibleForTesting
+    void updateQsBounds() {
         if (mLastQSExpansion == 1.0f) {
             // Fully expanded, let's set the layout bounds as clip bounds. This is necessary because
             // it's a scrollview and otherwise wouldn't be clipped. However, we set the horizontal
@@ -773,9 +774,10 @@
         mQSPanelScrollView.getLocationOnScreen(mLocationTemp);
         int left = mLocationTemp[0];
         int top = mLocationTemp[1];
-        mQsMediaHost.getCurrentClipping().set(left, top, left + getView().getMeasuredWidth(),
+        mQsMediaHost.getCurrentClipping().set(left, top,
+                left + getView().getMeasuredWidth(),
                 top + mQSPanelScrollView.getMeasuredHeight()
-                        - mQSPanelScrollView.getPaddingBottom());
+                        - mQSPanelController.getPaddingBottom());
     }
 
     private boolean headerWillBeAnimating() {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
index 64962b4..1827eaf 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
@@ -239,5 +239,9 @@
     public boolean isBouncerInTransit() {
         return mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit();
     }
+
+    public int getPaddingBottom() {
+        return mView.getPaddingBottom();
+    }
 }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index 72e022e..aedb935 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -19,6 +19,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -450,6 +451,23 @@
         verify(mQSPanelController).setListening(true, true);
     }
 
+    @Test
+    public void testUpdateQSBounds_setMediaClipCorrectly() {
+        QSFragment fragment = resumeAndGetFragment();
+        disableSplitShade();
+
+        Rect mediaHostClip = new Rect();
+        when(mQSPanelController.getPaddingBottom()).thenReturn(50);
+        setLocationOnScreen(mQSPanelScrollView, 25);
+        when(mQSPanelScrollView.getMeasuredHeight()).thenReturn(200);
+        when(mQSMediaHost.getCurrentClipping()).thenReturn(mediaHostClip);
+
+        fragment.updateQsBounds();
+
+        assertEquals(25, mediaHostClip.top);
+        assertEquals(175, mediaHostClip.bottom);
+    }
+
     @Override
     protected Fragment instantiate(Context context, String className, Bundle arguments) {
         MockitoAnnotations.initMocks(this);