diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java index ee12cc5679feb..7811401f1d612 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java @@ -336,6 +336,9 @@ public class StatusBarStateControllerImpl implements } private void setDozeAmountInternal(float dozeAmount) { + if (Float.compare(dozeAmount, mDozeAmount) == 0) { + return; + } mDozeAmount = dozeAmount; float interpolatedAmount = mDozeInterpolator.getInterpolation(dozeAmount); synchronized (mListeners) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt index a5ea897b6a6f8..6abdea5d92301 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt @@ -23,14 +23,18 @@ import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.testing.UiEventLoggerFake import com.android.systemui.SysuiTestCase import com.android.systemui.dump.DumpManager +import com.android.systemui.plugins.statusbar.StatusBarStateController import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.any +import org.mockito.ArgumentMatchers.anyFloat import org.mockito.ArgumentMatchers.anyInt +import org.mockito.ArgumentMatchers.eq import org.mockito.Mock import org.mockito.Mockito.mock +import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import org.mockito.Mockito.`when` as whenever @@ -73,4 +77,14 @@ class StatusBarStateControllerImplTest : SysuiTestCase() { assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_SHADE.id, ids[1]) assertEquals(StatusBarStateEvent.STATUS_BAR_STATE_SHADE_LOCKED.id, ids[2]) } + + @Test + fun testSetDozeAmountInternal_onlySetsOnce() { + val listener = mock(StatusBarStateController.StateListener::class.java) + controller.addCallback(listener) + + controller.setDozeAmount(0.5f, false /* animated */) + controller.setDozeAmount(0.5f, false /* animated */) + verify(listener).onDozeAmountChanged(eq(0.5f), anyFloat()) + } }