Merge "Added logging for shade top padding and clipping" into tm-qpr-dev am: 5f02519f9c am: 81fcd88b63

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

Change-Id: I6062b2380fa48f56fe0805d2853099f3ad42738e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
index 9f46707..07c8e52 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
@@ -25,6 +25,7 @@
 import static com.android.systemui.shade.NotificationPanelViewController.FLING_HIDE;
 import static com.android.systemui.shade.NotificationPanelViewController.QS_PARALLAX_AMOUNT;
 import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
+import static com.android.systemui.statusbar.StatusBarState.SHADE;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
@@ -258,6 +259,12 @@
     /** The duration of the notification bounds animation. */
     private long mNotificationBoundsAnimationDuration;
 
+    /** TODO(b/273591201): remove after bug resolved */
+    private int mLastClippingTopBound;
+    private int mLastNotificationsTopPadding;
+    private int mLastNotificationsClippingTopBound;
+    private int mLastNotificationsClippingTopBoundNssl;
+
     private final Region mInterceptRegion = new Region();
     /** The end bounds of a clipping animation. */
     private final Rect mClippingAnimationEndBounds = new Rect();
@@ -643,7 +650,7 @@
         float appearAmount = mNotificationStackScrollLayoutController
                 .calculateAppearFraction(mShadeExpandedHeight);
         float startHeight = -getExpansionHeight();
-        if (mBarState == StatusBarState.SHADE) {
+        if (mBarState == SHADE) {
             // Small parallax as we pull down and clip QS
             startHeight = -getExpansionHeight() * QS_PARALLAX_AMOUNT;
         }
@@ -1123,6 +1130,7 @@
                         mClippingAnimationEndBounds.left, fraction);
                 int animTop = (int) MathUtils.lerp(startTop,
                         mClippingAnimationEndBounds.top, fraction);
+                logClippingTopBound("interpolated top bound", top);
                 int animRight = (int) MathUtils.lerp(startRight,
                         mClippingAnimationEndBounds.right, fraction);
                 int animBottom = (int) MathUtils.lerp(startBottom,
@@ -1243,6 +1251,8 @@
             // the screen without clipping.
             return -mAmbientState.getStackTopMargin();
         } else {
+            logNotificationsClippingTopBound(qsTop,
+                    mNotificationStackScrollLayoutController.getTop());
             return qsTop - mNotificationStackScrollLayoutController.getTop();
         }
     }
@@ -1265,6 +1275,7 @@
     /** Calculate top padding for notifications */
     public float calculateNotificationsTopPadding(boolean isShadeExpanding,
             int keyguardNotificationStaticPadding, float expandedFraction) {
+        float topPadding;
         boolean keyguardShowing = mBarState == KEYGUARD;
         if (mSplitShadeEnabled) {
             return keyguardShowing
@@ -1281,19 +1292,27 @@
             int maxQsPadding = getMaxExpansionHeight();
             int max = keyguardShowing ? Math.max(
                     keyguardNotificationStaticPadding, maxQsPadding) : maxQsPadding;
-            return (int) MathUtils.lerp((float) getMinExpansionHeight(),
+            topPadding = (int) MathUtils.lerp((float) getMinExpansionHeight(),
                     (float) max, expandedFraction);
+            logNotificationsTopPadding("keyguard and expandImmediate", topPadding);
+            return topPadding;
         } else if (isSizeChangeAnimationRunning()) {
-            return Math.max((int) mSizeChangeAnimator.getAnimatedValue(),
+            topPadding = Math.max((int) mSizeChangeAnimator.getAnimatedValue(),
                     keyguardNotificationStaticPadding);
+            logNotificationsTopPadding("size change animation running", topPadding);
+            return topPadding;
         } else if (keyguardShowing) {
             // We can only do the smoother transition on Keyguard when we also are not collapsing
             // from a scrolled quick settings.
-            return MathUtils.lerp((float) keyguardNotificationStaticPadding,
+            topPadding = MathUtils.lerp((float) keyguardNotificationStaticPadding,
                     (float) (getMaxExpansionHeight()), computeExpansionFraction());
+            logNotificationsTopPadding("keyguard", topPadding);
+            return topPadding;
         } else {
-            return mQsFrameTranslateController.getNotificationsTopPadding(
+            topPadding = mQsFrameTranslateController.getNotificationsTopPadding(
                     mExpansionHeight, mNotificationStackScrollLayoutController);
+            logNotificationsTopPadding("default case", topPadding);
+            return topPadding;
         }
     }
 
@@ -1340,6 +1359,38 @@
                         - mAmbientState.getScrollY());
     }
 
+    /** TODO(b/273591201): remove after bug resolved */
+    private void logNotificationsTopPadding(String message, float rawPadding) {
+        int padding =  ((int) rawPadding / 10) * 10;
+        if (mBarState != KEYGUARD && padding != mLastNotificationsTopPadding && !mExpanded) {
+            mLastNotificationsTopPadding = padding;
+            mShadeLog.logNotificationsTopPadding(message, padding);
+        }
+    }
+
+    /** TODO(b/273591201): remove after bug resolved */
+    private void logClippingTopBound(String message, int top) {
+        top = (top / 10) * 10;
+        if (mBarState != KEYGUARD && mShadeExpandedFraction == 1
+                && top != mLastClippingTopBound && !mExpanded) {
+            mLastClippingTopBound = top;
+            mShadeLog.logClippingTopBound(message, top);
+        }
+    }
+
+    /** TODO(b/273591201): remove after bug resolved */
+    private void logNotificationsClippingTopBound(int top, int nsslTop) {
+        top = (top / 10) * 10;
+        nsslTop = (nsslTop / 10) * 10;
+        if (mBarState == SHADE && mShadeExpandedFraction == 1
+                && (top != mLastNotificationsClippingTopBound
+                || nsslTop != mLastNotificationsClippingTopBoundNssl) && !mExpanded) {
+            mLastNotificationsClippingTopBound = top;
+            mLastNotificationsClippingTopBoundNssl = nsslTop;
+            mShadeLog.logNotificationsClippingTopBound(top, nsslTop);
+        }
+    }
+
     private int calculateTopClippingBound(int qsPanelBottomY) {
         int top;
         if (mSplitShadeEnabled) {
@@ -1349,6 +1400,7 @@
                 // If we're transitioning, let's use the actual value. The else case
                 // can be wrong during transitions when waiting for the keyguard to unlock
                 top = mTransitionToFullShadePosition;
+                logClippingTopBound("set while transitioning to full shade", top);
             } else {
                 final float notificationTop = getEdgePosition();
                 if (mBarState == KEYGUARD) {
@@ -1357,8 +1409,10 @@
                         // this should go away once we unify the stackY position and don't have
                         // to do this min anymore below.
                         top = qsPanelBottomY;
+                        logClippingTopBound("bypassing keyguard", top);
                     } else {
                         top = (int) Math.min(qsPanelBottomY, notificationTop);
+                        logClippingTopBound("keyguard default case", top);
                     }
                 } else {
                     top = (int) notificationTop;
@@ -1366,12 +1420,14 @@
             }
             // TODO (b/265193930): remove dependency on NPVC
             top += mPanelViewControllerLazy.get().getOverStretchAmount();
+            logClippingTopBound("including overstretch", top);
             // Correction for instant expansion caused by HUN pull down/
             float minFraction = mPanelViewControllerLazy.get().getMinFraction();
             if (minFraction > 0f && minFraction < 1f) {
                 float realFraction = (mShadeExpandedFraction
                         - minFraction) / (1f - minFraction);
                 top *= MathUtils.saturate(realFraction / minFraction);
+                logClippingTopBound("after adjusted fraction", top);
             }
         }
         return top;
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt
index d34e127..da4944c 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt
@@ -280,4 +280,40 @@
             { "Split shade state changed: split shade ${if (bool1) "enabled" else "disabled"}" }
         )
     }
+
+    fun logNotificationsTopPadding(message: String, padding: Int) {
+        buffer.log(
+            TAG,
+            LogLevel.VERBOSE,
+            {
+                str1 = message
+                int1 = padding
+            },
+            { "QSC NotificationsTopPadding $str1: $int1"}
+        )
+    }
+
+    fun logClippingTopBound(message: String, top: Int) {
+        buffer.log(
+            TAG,
+            LogLevel.VERBOSE,
+            {
+                str1 = message
+                int1 = top
+            },
+            { "QSC ClippingTopBound $str1: $int1" }
+        )
+    }
+
+    fun logNotificationsClippingTopBound(top: Int, nsslTop: Int) {
+        buffer.log(
+            TAG,
+            LogLevel.VERBOSE,
+            {
+                int1 = top
+                int2 = nsslTop
+            },
+            { "QSC NotificationsClippingTopBound set to $int1 - $int2" }
+        )
+    }
 }