Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d2a40270 authored by petsjonkin's avatar petsjonkin
Browse files

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
parent 72a6bece
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -333,6 +333,8 @@ final class DisplayPowerState {
    public void stop() {
        mStopped = true;
        mPhotonicModulator.interrupt();
        mColorFadePrepared = false;
        mColorFadeReady = true;
        if (mColorFade != null) {
            mAsyncDestroyExecutor.execute(mColorFade::destroy);
        }
@@ -419,7 +421,8 @@ final class DisplayPowerState {
        }
    };

    private final Runnable mColorFadeDrawRunnable = new Runnable() {
    @VisibleForTesting
    final Runnable mColorFadeDrawRunnable = new Runnable() {
        @Override
        public void run() {
            mColorFadeDrawPending = false;
+40 −0
Original line number Diff line number Diff line
@@ -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 @@ class DisplayPowerStateTest {
    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 @@ class DisplayPowerStateTest {

        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