Merge "Call onDrawn on main thread to delay the callback" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
043714104a
@@ -17,8 +17,10 @@
|
||||
package com.android.keyguard.mediator
|
||||
|
||||
import android.annotation.BinderThread
|
||||
import android.os.Handler
|
||||
import android.os.Trace
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.unfold.SysUIUnfoldComponent
|
||||
import com.android.systemui.util.concurrency.PendingTasksContainer
|
||||
import com.android.systemui.util.kotlin.getOrNull
|
||||
@@ -33,7 +35,8 @@ import javax.inject.Inject
|
||||
*/
|
||||
@SysUISingleton
|
||||
class ScreenOnCoordinator @Inject constructor(
|
||||
unfoldComponent: Optional<SysUIUnfoldComponent>
|
||||
unfoldComponent: Optional<SysUIUnfoldComponent>,
|
||||
@Main private val mainHandler: Handler
|
||||
) {
|
||||
|
||||
private val unfoldLightRevealAnimation = unfoldComponent.map(
|
||||
@@ -55,7 +58,11 @@ class ScreenOnCoordinator @Inject constructor(
|
||||
unfoldLightRevealAnimation?.onScreenTurningOn(pendingTasks.registerTask("unfold-reveal"))
|
||||
foldAodAnimationController?.onScreenTurningOn(pendingTasks.registerTask("fold-to-aod"))
|
||||
|
||||
pendingTasks.onTasksComplete { onDrawn.run() }
|
||||
pendingTasks.onTasksComplete {
|
||||
mainHandler.post {
|
||||
onDrawn.run()
|
||||
}
|
||||
}
|
||||
Trace.endSection()
|
||||
}
|
||||
|
||||
|
||||
@@ -16,29 +16,25 @@
|
||||
|
||||
package com.android.keyguard.mediator
|
||||
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.testing.AndroidTestingRunner
|
||||
import androidx.test.filters.SmallTest
|
||||
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.keyguard.ScreenLifecycle
|
||||
import com.android.systemui.unfold.FoldAodAnimationController
|
||||
import com.android.systemui.unfold.SysUIUnfoldComponent
|
||||
import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation
|
||||
import com.android.systemui.util.concurrency.FakeExecution
|
||||
import com.android.systemui.util.mockito.capture
|
||||
|
||||
import java.util.Optional
|
||||
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.Captor
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
import java.util.Optional
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
@@ -55,6 +51,8 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
|
||||
@Captor
|
||||
private lateinit var readyCaptor: ArgumentCaptor<Runnable>
|
||||
|
||||
private val testHandler = Handler(Looper.getMainLooper())
|
||||
|
||||
private lateinit var screenOnCoordinator: ScreenOnCoordinator
|
||||
|
||||
@Before
|
||||
@@ -68,6 +66,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
|
||||
|
||||
screenOnCoordinator = ScreenOnCoordinator(
|
||||
Optional.of(unfoldComponent),
|
||||
testHandler
|
||||
)
|
||||
}
|
||||
|
||||
@@ -77,6 +76,7 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
|
||||
|
||||
onUnfoldOverlayReady()
|
||||
onFoldAodReady()
|
||||
waitHandlerIdle(testHandler)
|
||||
|
||||
// Should be called when both unfold overlay and keyguard drawn ready
|
||||
verify(runnable).run()
|
||||
@@ -87,8 +87,10 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
|
||||
// Recreate with empty unfoldComponent
|
||||
screenOnCoordinator = ScreenOnCoordinator(
|
||||
Optional.empty(),
|
||||
testHandler
|
||||
)
|
||||
screenOnCoordinator.onScreenTurningOn(runnable)
|
||||
waitHandlerIdle(testHandler)
|
||||
|
||||
// Should be called when only keyguard drawn
|
||||
verify(runnable).run()
|
||||
@@ -103,4 +105,8 @@ class ScreenOnCoordinatorTest : SysuiTestCase() {
|
||||
verify(foldAodAnimationController).onScreenTurningOn(capture(readyCaptor))
|
||||
readyCaptor.value.run()
|
||||
}
|
||||
|
||||
private fun waitHandlerIdle(handler: Handler) {
|
||||
handler.runWithScissors({}, /* timeout= */ 0)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user