Merge "Call onDrawn on main thread to delay the callback" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2023-01-05 12:46:20 +00:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 9 deletions

View File

@@ -17,8 +17,10 @@
package com.android.keyguard.mediator package com.android.keyguard.mediator
import android.annotation.BinderThread import android.annotation.BinderThread
import android.os.Handler
import android.os.Trace import android.os.Trace
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.unfold.SysUIUnfoldComponent import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.util.concurrency.PendingTasksContainer import com.android.systemui.util.concurrency.PendingTasksContainer
import com.android.systemui.util.kotlin.getOrNull import com.android.systemui.util.kotlin.getOrNull
@@ -33,7 +35,8 @@ import javax.inject.Inject
*/ */
@SysUISingleton @SysUISingleton
class ScreenOnCoordinator @Inject constructor( class ScreenOnCoordinator @Inject constructor(
unfoldComponent: Optional<SysUIUnfoldComponent> unfoldComponent: Optional<SysUIUnfoldComponent>,
@Main private val mainHandler: Handler
) { ) {
private val unfoldLightRevealAnimation = unfoldComponent.map( private val unfoldLightRevealAnimation = unfoldComponent.map(
@@ -55,7 +58,11 @@ class ScreenOnCoordinator @Inject constructor(
unfoldLightRevealAnimation?.onScreenTurningOn(pendingTasks.registerTask("unfold-reveal")) unfoldLightRevealAnimation?.onScreenTurningOn(pendingTasks.registerTask("unfold-reveal"))
foldAodAnimationController?.onScreenTurningOn(pendingTasks.registerTask("fold-to-aod")) foldAodAnimationController?.onScreenTurningOn(pendingTasks.registerTask("fold-to-aod"))
pendingTasks.onTasksComplete { onDrawn.run() } pendingTasks.onTasksComplete {
mainHandler.post {
onDrawn.run()
}
}
Trace.endSection() Trace.endSection()
} }

View File

@@ -16,29 +16,25 @@
package com.android.keyguard.mediator package com.android.keyguard.mediator
import android.os.Handler
import android.os.Looper
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.ScreenLifecycle
import com.android.systemui.unfold.FoldAodAnimationController import com.android.systemui.unfold.FoldAodAnimationController
import com.android.systemui.unfold.SysUIUnfoldComponent import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation
import com.android.systemui.util.concurrency.FakeExecution
import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.capture
import java.util.Optional
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor
import org.mockito.Captor import org.mockito.Captor
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import java.util.Optional
@SmallTest @SmallTest
@RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class)
@@ -55,6 +51,8 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
@Captor @Captor
private lateinit var readyCaptor: ArgumentCaptor<Runnable> private lateinit var readyCaptor: ArgumentCaptor<Runnable>
private val testHandler = Handler(Looper.getMainLooper())
private lateinit var screenOnCoordinator: ScreenOnCoordinator private lateinit var screenOnCoordinator: ScreenOnCoordinator
@Before @Before
@@ -68,6 +66,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
screenOnCoordinator = ScreenOnCoordinator( screenOnCoordinator = ScreenOnCoordinator(
Optional.of(unfoldComponent), Optional.of(unfoldComponent),
testHandler
) )
} }
@@ -77,6 +76,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
onUnfoldOverlayReady() onUnfoldOverlayReady()
onFoldAodReady() onFoldAodReady()
waitHandlerIdle(testHandler)
// Should be called when both unfold overlay and keyguard drawn ready // Should be called when both unfold overlay and keyguard drawn ready
verify(runnable).run() verify(runnable).run()
@@ -87,8 +87,10 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
// Recreate with empty unfoldComponent // Recreate with empty unfoldComponent
screenOnCoordinator = ScreenOnCoordinator( screenOnCoordinator = ScreenOnCoordinator(
Optional.empty(), Optional.empty(),
testHandler
) )
screenOnCoordinator.onScreenTurningOn(runnable) screenOnCoordinator.onScreenTurningOn(runnable)
waitHandlerIdle(testHandler)
// Should be called when only keyguard drawn // Should be called when only keyguard drawn
verify(runnable).run() verify(runnable).run()
@@ -103,4 +105,8 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
verify(foldAodAnimationController).onScreenTurningOn(capture(readyCaptor)) verify(foldAodAnimationController).onScreenTurningOn(capture(readyCaptor))
readyCaptor.value.run() readyCaptor.value.run()
} }
private fun waitHandlerIdle(handler: Handler) {
handler.runWithScissors({}, /* timeout= */ 0)
}
} }