ColorFade draw should not be called after PowerState stopped
See also ag/25370441 - stop was setting Prepared falg to false and Ready to true before this change.
Bug: b/313038025
Test: atest DisplayPowerStateTest
Change-Id: Iba6eeaec7a813bbd6fa3494beb8b75e54258e0db
diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java
index bcf27b4..90bad12 100644
--- a/services/core/java/com/android/server/display/DisplayPowerState.java
+++ b/services/core/java/com/android/server/display/DisplayPowerState.java
@@ -333,6 +333,8 @@
public void stop() {
mStopped = true;
mPhotonicModulator.interrupt();
+ mColorFadePrepared = false;
+ mColorFadeReady = true;
if (mColorFade != null) {
mAsyncDestroyExecutor.execute(mColorFade::destroy);
}
@@ -419,7 +421,8 @@
}
};
- private final Runnable mColorFadeDrawRunnable = new Runnable() {
+ @VisibleForTesting
+ final Runnable mColorFadeDrawRunnable = new Runnable() {
@Override
public void run() {
mColorFadeDrawPending = false;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.kt b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.kt
index dafbbb3..33d3020 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.kt
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.kt
@@ -16,16 +16,24 @@
package com.android.server.display
+import android.content.Context
+import android.os.Looper
import android.view.Display
import androidx.test.filters.SmallTest
import org.junit.Before
import org.junit.Rule
import org.junit.Test
+import org.mockito.ArgumentMatchers.anyFloat
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.eq
import org.mockito.junit.MockitoJUnit
import org.mockito.kotlin.argumentCaptor
+import org.mockito.kotlin.clearInvocations
import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
import java.util.concurrent.Executor
@SmallTest
@@ -39,11 +47,16 @@
private val mockBlanker = mock<DisplayBlanker>()
private val mockColorFade = mock<ColorFade>()
private val mockExecutor = mock<Executor>()
+ private val mockContext = mock<Context>()
@Before
fun setUp() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare()
+ }
displayPowerState = DisplayPowerState(mockBlanker, mockColorFade, 123, Display.STATE_ON,
mockExecutor)
+ whenever(mockColorFade.prepare(eq(mockContext), anyInt())).thenReturn(true)
}
@Test
@@ -56,4 +69,31 @@
verify(mockColorFade).destroy()
}
+
+ @Test
+ fun `GIVEN not prepared WHEN draw runnable is called THEN colorFade not drawn`() {
+ displayPowerState.mColorFadeDrawRunnable.run()
+
+ verify(mockColorFade, never()).draw(anyFloat())
+ }
+ @Test
+ fun `GIVEN prepared WHEN draw runnable is called THEN colorFade is drawn`() {
+ displayPowerState.prepareColorFade(mockContext, ColorFade.MODE_FADE)
+ clearInvocations(mockColorFade)
+
+ displayPowerState.mColorFadeDrawRunnable.run()
+
+ verify(mockColorFade).draw(anyFloat())
+ }
+
+ @Test
+ fun `GIVEN prepared AND stopped WHEN draw runnable is called THEN colorFade is not drawn`() {
+ displayPowerState.prepareColorFade(mockContext, ColorFade.MODE_FADE)
+ clearInvocations(mockColorFade)
+ displayPowerState.stop()
+
+ displayPowerState.mColorFadeDrawRunnable.run()
+
+ verify(mockColorFade, never()).draw(anyFloat())
+ }
}
\ No newline at end of file