Merge "[Motion][Split shade] Fix left side of split shade sometimes not overscrolling" into tm-qpr-dev
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index c1ea6bf..9d80d5f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -178,7 +178,7 @@
     val touchHelper = DragDownHelper(falsingManager, falsingCollector, this, context)
 
     private val splitShadeOverScroller: SplitShadeLockScreenOverScroller by lazy {
-        splitShadeOverScrollerFactory.create(qS, nsslController)
+        splitShadeOverScrollerFactory.create({ qS }, { nsslController })
     }
 
     private val phoneShadeOverScroller: SingleShadeLockScreenOverScroller by lazy {
@@ -911,4 +911,4 @@
         host.getLocationOnScreen(temp2)
         return expandCallback.getChildAtRawPosition(x + temp2[0], y + temp2[1])
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt
index 96ce6b4..13d8adb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt
@@ -9,6 +9,7 @@
 import com.android.internal.annotations.VisibleForTesting
 import com.android.systemui.R
 import com.android.systemui.animation.Interpolators
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.qs.QS
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
 import com.android.systemui.statusbar.phone.ScrimController
@@ -16,16 +17,18 @@
 import dagger.assisted.Assisted
 import dagger.assisted.AssistedFactory
 import dagger.assisted.AssistedInject
+import java.io.PrintWriter
 
 class SplitShadeLockScreenOverScroller
 @AssistedInject
 constructor(
     configurationController: ConfigurationController,
+    dumpManager: DumpManager,
     private val context: Context,
     private val scrimController: ScrimController,
     private val statusBarStateController: SysuiStatusBarStateController,
-    @Assisted private val qS: QS,
-    @Assisted private val nsslController: NotificationStackScrollLayoutController
+    @Assisted private val qSProvider: () -> QS,
+    @Assisted private val nsslControllerProvider: () -> NotificationStackScrollLayoutController
 ) : LockScreenShadeOverScroller {
 
     private var releaseOverScrollAnimator: Animator? = null
@@ -34,6 +37,12 @@
     private var maxOverScrollAmount = 0
     private var previousOverscrollAmount = 0
 
+    private val qS: QS
+        get() = qSProvider()
+
+    private val nsslController: NotificationStackScrollLayoutController
+        get() = nsslControllerProvider()
+
     init {
         updateResources()
         configurationController.addCallback(
@@ -42,6 +51,9 @@
                     updateResources()
                 }
             })
+        dumpManager.registerDumpable("SplitShadeLockscreenOverScroller") { printWriter, _ ->
+            dump(printWriter)
+        }
     }
 
     private fun updateResources() {
@@ -114,11 +126,25 @@
         releaseOverScrollAnimator = null
     }
 
+    private fun dump(printWriter: PrintWriter) {
+        printWriter.println(
+            """
+            SplitShadeLockScreenOverScroller:
+                Resources:
+                    transitionToFullShadeDistance: $transitionToFullShadeDistance
+                    maxOverScrollAmount: $maxOverScrollAmount
+                    releaseOverScrollDuration: $releaseOverScrollDuration
+                State:
+                    previousOverscrollAmount: $previousOverscrollAmount
+                    expansionDragDownAmount: $expansionDragDownAmount
+            """.trimIndent())
+    }
+
     @AssistedFactory
     fun interface Factory {
         fun create(
-            qS: QS,
-            nsslController: NotificationStackScrollLayoutController
+            qSProvider: () -> QS,
+            nsslControllerProvider: () -> NotificationStackScrollLayoutController
         ): SplitShadeLockScreenOverScroller
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt
index 4b4f1e0..e967d4a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt
@@ -4,6 +4,7 @@
 import android.content.res.Configuration
 import com.android.systemui.R
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.qs.QS
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
 import com.android.systemui.statusbar.phone.NotificationPanelViewController
@@ -11,6 +12,7 @@
 import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
 import com.android.systemui.statusbar.phone.panelstate.PanelState
 import com.android.systemui.statusbar.policy.ConfigurationController
+import java.io.PrintWriter
 import javax.inject.Inject
 
 /** Controls the shade expansion transition on non-lockscreen. */
@@ -20,6 +22,7 @@
 constructor(
     configurationController: ConfigurationController,
     panelExpansionStateManager: PanelExpansionStateManager,
+    dumpManager: DumpManager,
     private val context: Context,
     private val splitShadeOverScrollerFactory: SplitShadeOverScroller.Factory,
     private val noOpOverScroller: NoOpOverScroller,
@@ -33,7 +36,7 @@
     private var inSplitShade = false
 
     private val splitShadeOverScroller by lazy {
-        splitShadeOverScrollerFactory.create(qs, notificationStackScrollLayoutController)
+        splitShadeOverScrollerFactory.create({ qs }, { notificationStackScrollLayoutController })
     }
     private val shadeOverScroller: ShadeOverScroller
         get() =
@@ -53,6 +56,9 @@
             })
         panelExpansionStateManager.addExpansionListener(this::onPanelExpansionChanged)
         panelExpansionStateManager.addStateListener(this::onPanelStateChanged)
+        dumpManager.registerDumpable("ShadeTransitionController") { printWriter, _ ->
+            dump(printWriter)
+        }
     }
 
     private fun updateResources() {
@@ -72,4 +78,15 @@
         this::qs.isInitialized &&
             this::notificationPanelViewController.isInitialized &&
             this::notificationStackScrollLayoutController.isInitialized
+
+    private fun dump(pw: PrintWriter) {
+        pw.println(
+            """
+            ShadeTransitionController:
+                inSplitShade: $inSplitShade
+                qs.isInitialized: ${this::qs.isInitialized}
+                npvc.isInitialized: ${this::notificationPanelViewController.isInitialized}
+                nssl.isInitialized: ${this::notificationStackScrollLayoutController.isInitialized}
+            """.trimIndent())
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt
index d9ccc7f..c25aab8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt
@@ -28,8 +28,8 @@
     dumpManager: DumpManager,
     private val context: Context,
     private val scrimController: ScrimController,
-    @Assisted private val qS: QS,
-    @Assisted private val nsslController: NotificationStackScrollLayoutController
+    @Assisted private val qSProvider: () -> QS,
+    @Assisted private val nsslControllerProvider: () -> NotificationStackScrollLayoutController
 ) : ShadeOverScroller {
 
     private var releaseOverScrollDuration = 0L
@@ -39,6 +39,12 @@
     @PanelState private var panelState: Int = STATE_CLOSED
     private var releaseOverScrollAnimator: Animator? = null
 
+    private val qS: QS
+        get() = qSProvider()
+
+    private val nsslController: NotificationStackScrollLayoutController
+        get() = nsslControllerProvider()
+
     init {
         updateResources()
         configurationController.addCallback(
@@ -47,7 +53,9 @@
                     updateResources()
                 }
             })
-        dumpManager.registerDumpable(this::dump)
+        dumpManager.registerDumpable("SplitShadeOverScroller") { printWriter, _ ->
+            dump(printWriter)
+        }
     }
 
     private fun updateResources() {
@@ -118,7 +126,7 @@
         releaseOverScrollAnimator = null
     }
 
-    private fun dump(pw: PrintWriter, strings: Array<String>) {
+    private fun dump(pw: PrintWriter) {
         pw.println(
             """
             SplitShadeOverScroller:
@@ -129,15 +137,14 @@
                     previousOverscrollAmount: $previousOverscrollAmount
                     dragDownAmount: $dragDownAmount
                     panelState: $panelState
-            """.trimIndent()
-        )
+            """.trimIndent())
     }
 
     @AssistedFactory
     fun interface Factory {
         fun create(
-            qS: QS,
-            nsslController: NotificationStackScrollLayoutController
+            qSProvider: () -> QS,
+            nsslControllerProvider: () -> NotificationStackScrollLayoutController
         ): SplitShadeOverScroller
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt
index 9d5099c..81d5c4d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt
@@ -1,10 +1,10 @@
 package com.android.systemui.statusbar
 
-import org.mockito.Mockito.`when` as whenever
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.qs.QS
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
 import com.android.systemui.statusbar.phone.ScrimController
@@ -19,6 +19,7 @@
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
 import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -32,6 +33,7 @@
     @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController
     @Mock private lateinit var qS: QS
     @Mock private lateinit var nsslController: NotificationStackScrollLayoutController
+    @Mock private lateinit var dumpManager: DumpManager
 
     private lateinit var overScroller: SplitShadeLockScreenOverScroller
 
@@ -44,11 +46,12 @@
         overScroller =
             SplitShadeLockScreenOverScroller(
                 configurationController,
+                dumpManager,
                 context,
                 scrimController,
                 statusBarStateController,
-                qS,
-                nsslController)
+                { qS },
+                { nsslController })
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt
index c78a2a7..85a8c6b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt
@@ -4,6 +4,7 @@
 import androidx.test.filters.SmallTest
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.qs.QS
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
 import com.android.systemui.statusbar.phone.NotificationPanelViewController
@@ -29,6 +30,7 @@
     @Mock private lateinit var noOpOverScroller: NoOpOverScroller
     @Mock private lateinit var splitShadeOverScroller: SplitShadeOverScroller
     @Mock private lateinit var scrimShadeTransitionController: ScrimShadeTransitionController
+    @Mock private lateinit var dumpManager: DumpManager
 
     private lateinit var controller: ShadeTransitionController
 
@@ -43,6 +45,7 @@
             ShadeTransitionController(
                 configurationController,
                 panelExpansionStateManager,
+                dumpManager,
                 context,
                 splitShadeOverScrollerFactory = { _, _ -> splitShadeOverScroller },
                 noOpOverScroller,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt
index 4456207..5ca15bb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt
@@ -43,8 +43,12 @@
         whenever(nsslController.height).thenReturn(1000)
         overScroller =
             SplitShadeOverScroller(
-                configurationController, dumpManager, context, scrimController, qs, nsslController
-            )
+                configurationController,
+                dumpManager,
+                context,
+                scrimController,
+                { qs },
+                { nsslController })
     }
 
     @Test