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);