1 package com.android.systemui.statusbar.phone 2 3 import android.graphics.Point 4 import android.view.Display 5 import android.view.Surface 6 import android.view.View 7 import android.view.WindowManager 8 import androidx.test.filters.SmallTest 9 import com.android.systemui.SysuiTestCase 10 import com.android.systemui.unfold.TestUnfoldTransitionProvider 11 import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider 12 import com.google.common.truth.Truth.assertThat 13 import org.junit.Before 14 import org.junit.Test 15 import org.mockito.ArgumentMatchers.any 16 import org.mockito.Mock 17 import org.mockito.Mockito.`when` 18 import org.mockito.MockitoAnnotations 19 20 @SmallTest 21 class StatusBarMoveFromCenterAnimationControllerTest : SysuiTestCase() { 22 23 @Mock 24 private lateinit var windowManager: WindowManager 25 26 @Mock 27 private lateinit var display: Display 28 29 private val view: View = View(context) 30 private val progressProvider = TestUnfoldTransitionProvider() 31 private val scopedProvider = ScopedUnfoldTransitionProgressProvider(progressProvider) 32 33 private lateinit var controller: StatusBarMoveFromCenterAnimationController 34 35 @Before 36 fun setUp() { 37 MockitoAnnotations.initMocks(this) 38 39 `when`(windowManager.defaultDisplay).thenReturn(display) 40 `when`(display.rotation).thenReturn(Surface.ROTATION_0) 41 `when`(display.getSize(any())).thenAnswer { 42 val point = it.arguments[0] as Point 43 point.x = 100 44 point.y = 100 45 Unit 46 } 47 48 scopedProvider.setReadyToHandleTransition(true) 49 50 controller = StatusBarMoveFromCenterAnimationController(scopedProvider, windowManager) 51 } 52 53 @Test 54 fun onTransitionProgressAndFinished_resetsTranslations() { 55 controller.onViewsReady(arrayOf(view)) 56 57 progressProvider.onTransitionProgress(0.5f) 58 progressProvider.onTransitionFinished() 59 60 assertThat(view.translationX).isZero() 61 } 62 63 @Test 64 fun onTransitionProgress_updatesTranslations() { 65 controller.onViewsReady(arrayOf(view)) 66 67 progressProvider.onTransitionProgress(0.5f) 68 69 assertThat(view.translationX).isNonZero() 70 } 71 72 @Test 73 fun onTransitionProgress_whenDetached_doesNotUpdateTranslations() { 74 controller.onViewsReady(arrayOf(view)) 75 controller.onViewDetached() 76 77 progressProvider.onTransitionProgress(0.5f) 78 79 assertThat(view.translationX).isZero() 80 } 81 82 @Test 83 fun detachedAfterProgress_resetsTranslations() { 84 controller.onViewsReady(arrayOf(view)) 85 progressProvider.onTransitionProgress(0.5f) 86 87 controller.onViewDetached() 88 89 assertThat(view.translationX).isZero() 90 } 91 92 @Test 93 fun transitionFinished_viewReAttached_noChangesToTranslation() { 94 controller.onViewsReady(arrayOf(view)) 95 progressProvider.onTransitionProgress(0.5f) 96 progressProvider.onTransitionFinished() 97 controller.onViewDetached() 98 99 controller.onViewsReady(arrayOf(view)) 100 controller.onStatusBarWidthChanged() 101 102 assertThat(view.translationX).isZero() 103 } 104 } 105