Loading packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt +25 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.shade import android.animation.Animator import android.annotation.IdRes import android.app.StatusBarManager import android.content.res.Configuration Loading Loading @@ -175,11 +176,15 @@ class LargeScreenShadeHeaderController @Inject constructor( var shadeExpandedFraction = -1f set(value) { if (field != value) { val oldAlpha = header.alpha header.alpha = ShadeInterpolation.getContentAlpha(value) field = value if ((oldAlpha == 0f && header.alpha > 0f) || (oldAlpha > 0f && header.alpha == 0f)) { updateVisibility() } } } /** * Expansion fraction of the QQS <-> QS animation. Loading Loading @@ -336,9 +341,28 @@ class LargeScreenShadeHeaderController @Inject constructor( .setUpdateListener { updateVisibility() } .setListener(endAnimationListener) .start() } private val endAnimationListener = object : Animator.AnimatorListener { override fun onAnimationCancel(animation: Animator?) { clearListeners() } override fun onAnimationEnd(animation: Animator?) { clearListeners() } override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {} private fun clearListeners() { header.animate().setListener(null).setUpdateListener(null) } } private fun loadConstraints() { if (header is MotionLayout) { // Use resources.getXml instead of passing the resource id due to bug b/205018300 Loading packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt +30 −1 Original line number Diff line number Diff line package com.android.systemui.shade import android.animation.Animator import android.animation.ValueAnimator import android.app.StatusBarManager import android.content.Context Loading Loading @@ -45,8 +46,8 @@ import org.mockito.Mock import org.mockito.Mockito.mock import org.mockito.Mockito.verify import org.mockito.Mockito.verifyZeroInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.junit.MockitoJUnit import org.mockito.Mockito.`when` as whenever @SmallTest @RunWith(AndroidTestingRunner::class) Loading Loading @@ -292,6 +293,34 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { assertThat(viewVisibility).isEqualTo(View.INVISIBLE) } @Test fun animatorListenersClearedAtEnd() { val animator = mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF) whenever(view.animate()).thenReturn(animator) mLargeScreenShadeHeaderController.startCustomizingAnimation(show = true, 0L) val listenerCaptor = argumentCaptor<Animator.AnimatorListener>() verify(animator).setListener(capture(listenerCaptor)) listenerCaptor.value.onAnimationEnd(mock()) verify(animator).setListener(null) verify(animator).setUpdateListener(null) } @Test fun animatorListenersClearedOnCancel() { val animator = mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF) whenever(view.animate()).thenReturn(animator) mLargeScreenShadeHeaderController.startCustomizingAnimation(show = true, 0L) val listenerCaptor = argumentCaptor<Animator.AnimatorListener>() verify(animator).setListener(capture(listenerCaptor)) listenerCaptor.value.onAnimationCancel(mock()) verify(animator).setListener(null) verify(animator).setUpdateListener(null) } @Test fun demoMode_attachDemoMode() { val cb = argumentCaptor<DemoMode>() Loading Loading
packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt +25 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.shade import android.animation.Animator import android.annotation.IdRes import android.app.StatusBarManager import android.content.res.Configuration Loading Loading @@ -175,11 +176,15 @@ class LargeScreenShadeHeaderController @Inject constructor( var shadeExpandedFraction = -1f set(value) { if (field != value) { val oldAlpha = header.alpha header.alpha = ShadeInterpolation.getContentAlpha(value) field = value if ((oldAlpha == 0f && header.alpha > 0f) || (oldAlpha > 0f && header.alpha == 0f)) { updateVisibility() } } } /** * Expansion fraction of the QQS <-> QS animation. Loading Loading @@ -336,9 +341,28 @@ class LargeScreenShadeHeaderController @Inject constructor( .setUpdateListener { updateVisibility() } .setListener(endAnimationListener) .start() } private val endAnimationListener = object : Animator.AnimatorListener { override fun onAnimationCancel(animation: Animator?) { clearListeners() } override fun onAnimationEnd(animation: Animator?) { clearListeners() } override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {} private fun clearListeners() { header.animate().setListener(null).setUpdateListener(null) } } private fun loadConstraints() { if (header is MotionLayout) { // Use resources.getXml instead of passing the resource id due to bug b/205018300 Loading
packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt +30 −1 Original line number Diff line number Diff line package com.android.systemui.shade import android.animation.Animator import android.animation.ValueAnimator import android.app.StatusBarManager import android.content.Context Loading Loading @@ -45,8 +46,8 @@ import org.mockito.Mock import org.mockito.Mockito.mock import org.mockito.Mockito.verify import org.mockito.Mockito.verifyZeroInteractions import org.mockito.Mockito.`when` as whenever import org.mockito.junit.MockitoJUnit import org.mockito.Mockito.`when` as whenever @SmallTest @RunWith(AndroidTestingRunner::class) Loading Loading @@ -292,6 +293,34 @@ class LargeScreenShadeHeaderControllerTest : SysuiTestCase() { assertThat(viewVisibility).isEqualTo(View.INVISIBLE) } @Test fun animatorListenersClearedAtEnd() { val animator = mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF) whenever(view.animate()).thenReturn(animator) mLargeScreenShadeHeaderController.startCustomizingAnimation(show = true, 0L) val listenerCaptor = argumentCaptor<Animator.AnimatorListener>() verify(animator).setListener(capture(listenerCaptor)) listenerCaptor.value.onAnimationEnd(mock()) verify(animator).setListener(null) verify(animator).setUpdateListener(null) } @Test fun animatorListenersClearedOnCancel() { val animator = mock(ViewPropertyAnimator::class.java, Answers.RETURNS_SELF) whenever(view.animate()).thenReturn(animator) mLargeScreenShadeHeaderController.startCustomizingAnimation(show = true, 0L) val listenerCaptor = argumentCaptor<Animator.AnimatorListener>() verify(animator).setListener(capture(listenerCaptor)) listenerCaptor.value.onAnimationCancel(mock()) verify(animator).setListener(null) verify(animator).setUpdateListener(null) } @Test fun demoMode_attachDemoMode() { val cb = argumentCaptor<DemoMode>() Loading