Loading packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/TaskbarDelegateTest.kt +47 −44 Original line number Diff line number Diff line Loading @@ -35,44 +35,30 @@ import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) class TaskbarDelegateTest : SysuiTestCase() { val DISPLAY_ID = 0; val MODE_GESTURE = 0; val MODE_THREE_BUTTON = 1; val DISPLAY_ID = 0 val MODE_GESTURE = 0 val MODE_THREE_BUTTON = 1 private lateinit var mTaskStackChangeListeners: TaskStackChangeListeners private lateinit var mTaskbarDelegate: TaskbarDelegate @Mock lateinit var mEdgeBackGestureHandler : EdgeBackGestureHandler @Mock lateinit var mLightBarControllerFactory : LightBarTransitionsController.Factory @Mock lateinit var mLightBarTransitionController: LightBarTransitionsController @Mock lateinit var mCommandQueue: CommandQueue @Mock lateinit var mOverviewProxyService: OverviewProxyService @Mock lateinit var mNavBarHelper: NavBarHelper @Mock lateinit var mNavigationModeController: NavigationModeController @Mock lateinit var mSysUiState: SysUiState @Mock lateinit var mDumpManager: DumpManager @Mock lateinit var mAutoHideController: AutoHideController @Mock lateinit var mLightBarController: LightBarController @Mock lateinit var mOptionalPip: Optional<Pip> @Mock lateinit var mBackAnimation: BackAnimation @Mock lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState @Mock lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager @Mock lateinit var mStatusBarStateController: StatusBarStateController @Mock lateinit var mEdgeBackGestureHandler: EdgeBackGestureHandler @Mock lateinit var mLightBarControllerFactory: LightBarTransitionsController.Factory @Mock lateinit var mLightBarTransitionController: LightBarTransitionsController @Mock lateinit var mCommandQueue: CommandQueue @Mock lateinit var mOverviewProxyService: OverviewProxyService @Mock lateinit var mNavBarHelper: NavBarHelper @Mock lateinit var mNavigationModeController: NavigationModeController @Mock lateinit var mSysUiState: SysUiState @Mock lateinit var mDumpManager: DumpManager @Mock lateinit var mAutoHideController: AutoHideController @Mock lateinit var mLightBarController: LightBarController @Mock lateinit var mOptionalPip: Optional<Pip> @Mock lateinit var mBackAnimation: BackAnimation @Mock lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState @Mock lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager @Mock lateinit var mStatusBarStateController: StatusBarStateController @Before fun setup() { Loading @@ -82,11 +68,26 @@ class TaskbarDelegateTest : SysuiTestCase() { `when`(mNavBarHelper.currentSysuiState).thenReturn(mCurrentSysUiState) `when`(mSysUiState.setFlag(anyLong(), anyBoolean())).thenReturn(mSysUiState) mTaskStackChangeListeners = TaskStackChangeListeners.getTestInstance() mTaskbarDelegate = TaskbarDelegate(context, mLightBarControllerFactory, mStatusBarKeyguardViewManager, mStatusBarStateController) mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper, mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController, mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners) mTaskbarDelegate = TaskbarDelegate( context, mLightBarControllerFactory, mStatusBarKeyguardViewManager, mStatusBarStateController, ) mTaskbarDelegate.setDependencies( mCommandQueue, mOverviewProxyService, mNavBarHelper, mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController, mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners, ) } @Test Loading @@ -108,10 +109,12 @@ class TaskbarDelegateTest : SysuiTestCase() { fun screenPinningEnabled_updatesSysuiState() { mTaskbarDelegate.init(DISPLAY_ID) mTaskStackChangeListeners.listenerImpl.onLockTaskModeChanged( ActivityManager.LOCK_TASK_MODE_PINNED) verify(mSysUiState, times(1)).setFlag( ActivityManager.LOCK_TASK_MODE_PINNED ) verify(mSysUiState, times(1)) .setFlag( ArgumentMatchers.eq(QuickStepContract.SYSUI_STATE_SCREEN_PINNING), ArgumentMatchers.eq(true) ArgumentMatchers.eq(true), ) } } packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/gestural/FloatingRotationButtonPositionCalculatorTest.kt +122 −100 Original line number Diff line number Diff line Loading @@ -8,23 +8,22 @@ import com.android.systemui.shared.rotation.FloatingRotationButtonPositionCalcul import com.android.systemui.shared.rotation.FloatingRotationButtonPositionCalculator.Position import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameter import platform.test.runner.parameterized.Parameters import org.junit.runner.RunWith @RunWith(ParameterizedAndroidJunit4::class) @SmallTest internal class FloatingRotationButtonPositionCalculatorTest( private val testCase: TestCase, ) : SysuiTestCase() { internal class FloatingRotationButtonPositionCalculatorTest(private val testCase: TestCase) : SysuiTestCase() { @Test fun calculatePosition() { val position = testCase.calculator.calculatePosition( val position = testCase.calculator.calculatePosition( testCase.rotation, testCase.taskbarVisible, testCase.taskbarStashed testCase.taskbarStashed, ) assertThat(position).isEqualTo(testCase.expectedPosition) } Loading @@ -34,16 +33,17 @@ internal class FloatingRotationButtonPositionCalculatorTest( val rotation: Int, val taskbarVisible: Boolean, val taskbarStashed: Boolean, val expectedPosition: Position val expectedPosition: Position, ) { override fun toString(): String = buildString { override fun toString(): String = buildString { append("when calculator = ") append(when (calculator) { append( when (calculator) { posLeftCalculator -> "LEFT" posRightCalculator -> "RIGHT" else -> error("Unknown calculator: $calculator") }) } ) append(", rotation = $rotation") append(", taskbarVisible = $taskbarVisible") append(", taskbarStashed = $taskbarStashed") Loading @@ -56,11 +56,19 @@ internal class FloatingRotationButtonPositionCalculatorTest( private const val MARGIN_TASKBAR_LEFT = 20 private const val MARGIN_TASKBAR_BOTTOM = 30 private val posLeftCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, true ) private val posRightCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, false private val posLeftCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, true, ) private val posRightCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, false, ) @Parameters(name = "{0}") Loading @@ -73,77 +81,84 @@ internal class FloatingRotationButtonPositionCalculatorTest( rotation = Surface.ROTATION_0, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_90, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_180, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_270, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_TASKBAR_LEFT, translationY = -MARGIN_TASKBAR_BOTTOM ) translationY = -MARGIN_TASKBAR_BOTTOM, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = true, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_90, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_TASKBAR_LEFT, translationY = -MARGIN_TASKBAR_BOTTOM ) translationY = -MARGIN_TASKBAR_BOTTOM, ), ), // Position right Loading @@ -152,78 +167,85 @@ internal class FloatingRotationButtonPositionCalculatorTest( rotation = Surface.ROTATION_0, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_90, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_180, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_270, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_TASKBAR_LEFT, translationY = -MARGIN_TASKBAR_BOTTOM ) translationY = -MARGIN_TASKBAR_BOTTOM, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = true, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_90, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.RIGHT, translationX = -MARGIN_TASKBAR_LEFT, translationY = MARGIN_TASKBAR_BOTTOM ) ) translationY = MARGIN_TASKBAR_BOTTOM, ), ), ) } } packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerEmptyImpl.kt +11 −1 Original line number Diff line number Diff line Loading @@ -18,9 +18,9 @@ package com.android.systemui.navigationbar import com.android.internal.statusbar.RegisterStatusBarResult import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shared.statusbar.phone.BarTransitions import com.android.systemui.navigationbar.views.NavigationBar import com.android.systemui.navigationbar.views.NavigationBarView import com.android.systemui.shared.statusbar.phone.BarTransitions import javax.inject.Inject /** A no-op version of [NavigationBarController] for variants like Arc and TV. */ Loading @@ -30,18 +30,28 @@ class NavigationBarControllerEmptyImpl @Inject constructor() : NavigationBarCont includeDefaultDisplay: Boolean, result: RegisterStatusBarResult?, ) {} override fun removeNavigationBar(displayId: Int) {} override fun checkNavBarModes(displayId: Int) {} override fun finishBarAnimations(displayId: Int) {} override fun touchAutoDim(displayId: Int) {} override fun transitionTo( displayId: Int, @BarTransitions.TransitionMode barMode: Int, animate: Boolean, ) {} override fun disableAnimationsDuringHide(displayId: Int, delay: Long) {} override fun getDefaultNavigationBarView(): NavigationBarView? = null override fun getNavigationBarView(displayId: Int): NavigationBarView? = null override fun isOverviewEnabled(displayId: Int) = false override fun getDefaultNavigationBar(): NavigationBar? = null } packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt +29 −29 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : private var arrowLength = AnimatedFloat( name = "arrowLength", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_PIXELS minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_PIXELS, ) /** Loading @@ -56,7 +56,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : var arrowHeight = AnimatedFloat( name = "arrowHeight", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ROTATION_DEGREES minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ROTATION_DEGREES, ) val backgroundWidth = Loading Loading @@ -89,7 +89,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : AnimatedFloat( name = "scale", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_SCALE, minimumValue = 0f minimumValue = 0f, ) val scalePivotX = Loading @@ -111,7 +111,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : name = "arrowAlpha", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ALPHA, minimumValue = 0f, maximumValue = 1f maximumValue = 1f, ) val backgroundAlpha = Loading @@ -119,7 +119,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : name = "backgroundAlpha", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ALPHA, minimumValue = 0f, maximumValue = 1f maximumValue = 1f, ) private val allAnimatedFloat = Loading @@ -133,7 +133,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : scale, horizontalTranslation, arrowAlpha, backgroundAlpha backgroundAlpha, ) /** Loading Loading @@ -162,7 +162,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : com.android.internal.R.attr.materialColorOnSecondaryContainer } else { com.android.internal.R.attr.materialColorOnSecondaryFixed } }, ) arrowBackgroundPaint.color = Loading @@ -172,7 +172,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : com.android.internal.R.attr.materialColorSecondaryContainer } else { com.android.internal.R.attr.materialColorSecondaryFixedDim } }, ) } Loading Loading @@ -242,7 +242,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : fun stretchTo( stretchAmount: Float, startingVelocity: Float? = null, springForce: SpringForce? = null springForce: SpringForce? = null, ) { animation.apply { startingVelocity?.let { Loading Loading @@ -303,7 +303,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : fun addAnimationEndListener( animatedFloat: AnimatedFloat, endListener: DelayedOnAnimationEndListener endListener: DelayedOnAnimationEndListener, ): Boolean { return if (animatedFloat.isRunning) { animatedFloat.addEndListener(endListener) Loading @@ -327,43 +327,43 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : backgroundHeightStretchAmount: Float, edgeCornerStretchAmount: Float, farCornerStretchAmount: Float, fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens, ) { horizontalTranslation.stretchBy( finalPosition = fullyStretchedDimens.horizontalTranslation, amount = horizontalTranslationStretchAmount amount = horizontalTranslationStretchAmount, ) arrowLength.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.length, amount = arrowStretchAmount amount = arrowStretchAmount, ) arrowHeight.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.height, amount = arrowStretchAmount amount = arrowStretchAmount, ) arrowAlpha.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.alpha, amount = arrowAlphaStretchAmount amount = arrowAlphaStretchAmount, ) backgroundAlpha.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.alpha, amount = backgroundAlphaStretchAmount amount = backgroundAlphaStretchAmount, ) backgroundWidth.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.width, amount = backgroundWidthStretchAmount amount = backgroundWidthStretchAmount, ) backgroundHeight.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.height, amount = backgroundHeightStretchAmount amount = backgroundHeightStretchAmount, ) backgroundEdgeCornerRadius.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.edgeCornerRadius, amount = edgeCornerStretchAmount amount = edgeCornerStretchAmount, ) backgroundFarCornerRadius.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.farCornerRadius, amount = farCornerStretchAmount amount = farCornerStretchAmount, ) } Loading @@ -381,7 +381,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : arrowAlpha.stretchTo( stretchAmount = 0f, startingVelocity = startingVelocity, springForce = springForce springForce = springForce, ) } Loading @@ -403,7 +403,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : /** Updates resting arrow and background size not accounting for stretch */ internal fun setRestingDimens( restingParams: EdgePanelParams.BackIndicatorDimens, animate: Boolean = true animate: Boolean = true, ) { horizontalTranslation.updateRestingPosition(restingParams.horizontalTranslation) scale.updateRestingPosition(restingParams.scale) Loading @@ -417,11 +417,11 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : backgroundHeight.updateRestingPosition(restingParams.backgroundDimens.height, animate) backgroundEdgeCornerRadius.updateRestingPosition( restingParams.backgroundDimens.edgeCornerRadius, animate animate, ) backgroundFarCornerRadius.updateRestingPosition( restingParams.backgroundDimens.farCornerRadius, animate animate, ) } Loading Loading @@ -483,11 +483,11 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : topLeft = edgeCorner, bottomLeft = edgeCorner, topRight = farCorner, bottomRight = farCorner bottomRight = farCorner, ) canvas.drawPath( arrowBackground, arrowBackgroundPaint.apply { alpha = (255 * backgroundAlpha.pos).toInt() } arrowBackgroundPaint.apply { alpha = (255 * backgroundAlpha.pos).toInt() }, ) val dx = arrowLength.pos Loading @@ -498,7 +498,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : val arrowOffset = (backgroundWidth - dx) / 2 canvas.translate( /* dx= */ arrowOffset, /* dy= */ 0f /* pass 0 for the y position since the canvas was already translated */ /* dy= */ 0f, /* pass 0 for the y position since the canvas was already translated */ ) val arrowPointsAwayFromEdge = !arrowsPointLeft.xor(isLeftPanel) Loading Loading @@ -532,7 +532,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : topLeft: Float = 0f, topRight: Float = 0f, bottomRight: Float = 0f, bottomLeft: Float = 0f bottomLeft: Float = 0f, ): Path = Path().apply { val corners = Loading @@ -544,7 +544,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : bottomRight, bottomRight, bottomLeft, bottomLeft bottomLeft, ) addRoundRect(this@toPathWithRoundCorners, corners, Path.Direction.CW) } Loading packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt +20 −20 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/TaskbarDelegateTest.kt +47 −44 Original line number Diff line number Diff line Loading @@ -35,44 +35,30 @@ import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) class TaskbarDelegateTest : SysuiTestCase() { val DISPLAY_ID = 0; val MODE_GESTURE = 0; val MODE_THREE_BUTTON = 1; val DISPLAY_ID = 0 val MODE_GESTURE = 0 val MODE_THREE_BUTTON = 1 private lateinit var mTaskStackChangeListeners: TaskStackChangeListeners private lateinit var mTaskbarDelegate: TaskbarDelegate @Mock lateinit var mEdgeBackGestureHandler : EdgeBackGestureHandler @Mock lateinit var mLightBarControllerFactory : LightBarTransitionsController.Factory @Mock lateinit var mLightBarTransitionController: LightBarTransitionsController @Mock lateinit var mCommandQueue: CommandQueue @Mock lateinit var mOverviewProxyService: OverviewProxyService @Mock lateinit var mNavBarHelper: NavBarHelper @Mock lateinit var mNavigationModeController: NavigationModeController @Mock lateinit var mSysUiState: SysUiState @Mock lateinit var mDumpManager: DumpManager @Mock lateinit var mAutoHideController: AutoHideController @Mock lateinit var mLightBarController: LightBarController @Mock lateinit var mOptionalPip: Optional<Pip> @Mock lateinit var mBackAnimation: BackAnimation @Mock lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState @Mock lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager @Mock lateinit var mStatusBarStateController: StatusBarStateController @Mock lateinit var mEdgeBackGestureHandler: EdgeBackGestureHandler @Mock lateinit var mLightBarControllerFactory: LightBarTransitionsController.Factory @Mock lateinit var mLightBarTransitionController: LightBarTransitionsController @Mock lateinit var mCommandQueue: CommandQueue @Mock lateinit var mOverviewProxyService: OverviewProxyService @Mock lateinit var mNavBarHelper: NavBarHelper @Mock lateinit var mNavigationModeController: NavigationModeController @Mock lateinit var mSysUiState: SysUiState @Mock lateinit var mDumpManager: DumpManager @Mock lateinit var mAutoHideController: AutoHideController @Mock lateinit var mLightBarController: LightBarController @Mock lateinit var mOptionalPip: Optional<Pip> @Mock lateinit var mBackAnimation: BackAnimation @Mock lateinit var mCurrentSysUiState: NavBarHelper.CurrentSysuiState @Mock lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager @Mock lateinit var mStatusBarStateController: StatusBarStateController @Before fun setup() { Loading @@ -82,11 +68,26 @@ class TaskbarDelegateTest : SysuiTestCase() { `when`(mNavBarHelper.currentSysuiState).thenReturn(mCurrentSysUiState) `when`(mSysUiState.setFlag(anyLong(), anyBoolean())).thenReturn(mSysUiState) mTaskStackChangeListeners = TaskStackChangeListeners.getTestInstance() mTaskbarDelegate = TaskbarDelegate(context, mLightBarControllerFactory, mStatusBarKeyguardViewManager, mStatusBarStateController) mTaskbarDelegate.setDependencies(mCommandQueue, mOverviewProxyService, mNavBarHelper, mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController, mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners) mTaskbarDelegate = TaskbarDelegate( context, mLightBarControllerFactory, mStatusBarKeyguardViewManager, mStatusBarStateController, ) mTaskbarDelegate.setDependencies( mCommandQueue, mOverviewProxyService, mNavBarHelper, mNavigationModeController, mSysUiState, mDumpManager, mAutoHideController, mLightBarController, mOptionalPip, mBackAnimation, mTaskStackChangeListeners, ) } @Test Loading @@ -108,10 +109,12 @@ class TaskbarDelegateTest : SysuiTestCase() { fun screenPinningEnabled_updatesSysuiState() { mTaskbarDelegate.init(DISPLAY_ID) mTaskStackChangeListeners.listenerImpl.onLockTaskModeChanged( ActivityManager.LOCK_TASK_MODE_PINNED) verify(mSysUiState, times(1)).setFlag( ActivityManager.LOCK_TASK_MODE_PINNED ) verify(mSysUiState, times(1)) .setFlag( ArgumentMatchers.eq(QuickStepContract.SYSUI_STATE_SCREEN_PINNING), ArgumentMatchers.eq(true) ArgumentMatchers.eq(true), ) } }
packages/SystemUI/multivalentTests/src/com/android/systemui/navigationbar/gestural/FloatingRotationButtonPositionCalculatorTest.kt +122 −100 Original line number Diff line number Diff line Loading @@ -8,23 +8,22 @@ import com.android.systemui.shared.rotation.FloatingRotationButtonPositionCalcul import com.android.systemui.shared.rotation.FloatingRotationButtonPositionCalculator.Position import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameter import platform.test.runner.parameterized.Parameters import org.junit.runner.RunWith @RunWith(ParameterizedAndroidJunit4::class) @SmallTest internal class FloatingRotationButtonPositionCalculatorTest( private val testCase: TestCase, ) : SysuiTestCase() { internal class FloatingRotationButtonPositionCalculatorTest(private val testCase: TestCase) : SysuiTestCase() { @Test fun calculatePosition() { val position = testCase.calculator.calculatePosition( val position = testCase.calculator.calculatePosition( testCase.rotation, testCase.taskbarVisible, testCase.taskbarStashed testCase.taskbarStashed, ) assertThat(position).isEqualTo(testCase.expectedPosition) } Loading @@ -34,16 +33,17 @@ internal class FloatingRotationButtonPositionCalculatorTest( val rotation: Int, val taskbarVisible: Boolean, val taskbarStashed: Boolean, val expectedPosition: Position val expectedPosition: Position, ) { override fun toString(): String = buildString { override fun toString(): String = buildString { append("when calculator = ") append(when (calculator) { append( when (calculator) { posLeftCalculator -> "LEFT" posRightCalculator -> "RIGHT" else -> error("Unknown calculator: $calculator") }) } ) append(", rotation = $rotation") append(", taskbarVisible = $taskbarVisible") append(", taskbarStashed = $taskbarStashed") Loading @@ -56,11 +56,19 @@ internal class FloatingRotationButtonPositionCalculatorTest( private const val MARGIN_TASKBAR_LEFT = 20 private const val MARGIN_TASKBAR_BOTTOM = 30 private val posLeftCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, true ) private val posRightCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, false private val posLeftCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, true, ) private val posRightCalculator = FloatingRotationButtonPositionCalculator( MARGIN_DEFAULT, MARGIN_TASKBAR_LEFT, MARGIN_TASKBAR_BOTTOM, false, ) @Parameters(name = "{0}") Loading @@ -73,77 +81,84 @@ internal class FloatingRotationButtonPositionCalculatorTest( rotation = Surface.ROTATION_0, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_90, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_180, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_270, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_TASKBAR_LEFT, translationY = -MARGIN_TASKBAR_BOTTOM ) translationY = -MARGIN_TASKBAR_BOTTOM, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = true, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posLeftCalculator, rotation = Surface.ROTATION_90, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_TASKBAR_LEFT, translationY = -MARGIN_TASKBAR_BOTTOM ) translationY = -MARGIN_TASKBAR_BOTTOM, ), ), // Position right Loading @@ -152,78 +167,85 @@ internal class FloatingRotationButtonPositionCalculatorTest( rotation = Surface.ROTATION_0, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_90, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_180, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = MARGIN_DEFAULT ) translationY = MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_270, taskbarVisible = false, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.LEFT, translationX = MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_TASKBAR_LEFT, translationY = -MARGIN_TASKBAR_BOTTOM ) translationY = -MARGIN_TASKBAR_BOTTOM, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_0, taskbarVisible = true, taskbarStashed = true, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.BOTTOM or Gravity.RIGHT, translationX = -MARGIN_DEFAULT, translationY = -MARGIN_DEFAULT ) translationY = -MARGIN_DEFAULT, ), ), TestCase( calculator = posRightCalculator, rotation = Surface.ROTATION_90, taskbarVisible = true, taskbarStashed = false, expectedPosition = Position( expectedPosition = Position( gravity = Gravity.TOP or Gravity.RIGHT, translationX = -MARGIN_TASKBAR_LEFT, translationY = MARGIN_TASKBAR_BOTTOM ) ) translationY = MARGIN_TASKBAR_BOTTOM, ), ), ) } }
packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerEmptyImpl.kt +11 −1 Original line number Diff line number Diff line Loading @@ -18,9 +18,9 @@ package com.android.systemui.navigationbar import com.android.internal.statusbar.RegisterStatusBarResult import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shared.statusbar.phone.BarTransitions import com.android.systemui.navigationbar.views.NavigationBar import com.android.systemui.navigationbar.views.NavigationBarView import com.android.systemui.shared.statusbar.phone.BarTransitions import javax.inject.Inject /** A no-op version of [NavigationBarController] for variants like Arc and TV. */ Loading @@ -30,18 +30,28 @@ class NavigationBarControllerEmptyImpl @Inject constructor() : NavigationBarCont includeDefaultDisplay: Boolean, result: RegisterStatusBarResult?, ) {} override fun removeNavigationBar(displayId: Int) {} override fun checkNavBarModes(displayId: Int) {} override fun finishBarAnimations(displayId: Int) {} override fun touchAutoDim(displayId: Int) {} override fun transitionTo( displayId: Int, @BarTransitions.TransitionMode barMode: Int, animate: Boolean, ) {} override fun disableAnimationsDuringHide(displayId: Int, delay: Long) {} override fun getDefaultNavigationBarView(): NavigationBarView? = null override fun getNavigationBarView(displayId: Int): NavigationBarView? = null override fun isOverviewEnabled(displayId: Int) = false override fun getDefaultNavigationBar(): NavigationBar? = null }
packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt +29 −29 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : private var arrowLength = AnimatedFloat( name = "arrowLength", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_PIXELS minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_PIXELS, ) /** Loading @@ -56,7 +56,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : var arrowHeight = AnimatedFloat( name = "arrowHeight", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ROTATION_DEGREES minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ROTATION_DEGREES, ) val backgroundWidth = Loading Loading @@ -89,7 +89,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : AnimatedFloat( name = "scale", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_SCALE, minimumValue = 0f minimumValue = 0f, ) val scalePivotX = Loading @@ -111,7 +111,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : name = "arrowAlpha", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ALPHA, minimumValue = 0f, maximumValue = 1f maximumValue = 1f, ) val backgroundAlpha = Loading @@ -119,7 +119,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : name = "backgroundAlpha", minimumVisibleChange = SpringAnimation.MIN_VISIBLE_CHANGE_ALPHA, minimumValue = 0f, maximumValue = 1f maximumValue = 1f, ) private val allAnimatedFloat = Loading @@ -133,7 +133,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : scale, horizontalTranslation, arrowAlpha, backgroundAlpha backgroundAlpha, ) /** Loading Loading @@ -162,7 +162,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : com.android.internal.R.attr.materialColorOnSecondaryContainer } else { com.android.internal.R.attr.materialColorOnSecondaryFixed } }, ) arrowBackgroundPaint.color = Loading @@ -172,7 +172,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : com.android.internal.R.attr.materialColorSecondaryContainer } else { com.android.internal.R.attr.materialColorSecondaryFixedDim } }, ) } Loading Loading @@ -242,7 +242,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : fun stretchTo( stretchAmount: Float, startingVelocity: Float? = null, springForce: SpringForce? = null springForce: SpringForce? = null, ) { animation.apply { startingVelocity?.let { Loading Loading @@ -303,7 +303,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : fun addAnimationEndListener( animatedFloat: AnimatedFloat, endListener: DelayedOnAnimationEndListener endListener: DelayedOnAnimationEndListener, ): Boolean { return if (animatedFloat.isRunning) { animatedFloat.addEndListener(endListener) Loading @@ -327,43 +327,43 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : backgroundHeightStretchAmount: Float, edgeCornerStretchAmount: Float, farCornerStretchAmount: Float, fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens, ) { horizontalTranslation.stretchBy( finalPosition = fullyStretchedDimens.horizontalTranslation, amount = horizontalTranslationStretchAmount amount = horizontalTranslationStretchAmount, ) arrowLength.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.length, amount = arrowStretchAmount amount = arrowStretchAmount, ) arrowHeight.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.height, amount = arrowStretchAmount amount = arrowStretchAmount, ) arrowAlpha.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.alpha, amount = arrowAlphaStretchAmount amount = arrowAlphaStretchAmount, ) backgroundAlpha.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.alpha, amount = backgroundAlphaStretchAmount amount = backgroundAlphaStretchAmount, ) backgroundWidth.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.width, amount = backgroundWidthStretchAmount amount = backgroundWidthStretchAmount, ) backgroundHeight.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.height, amount = backgroundHeightStretchAmount amount = backgroundHeightStretchAmount, ) backgroundEdgeCornerRadius.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.edgeCornerRadius, amount = edgeCornerStretchAmount amount = edgeCornerStretchAmount, ) backgroundFarCornerRadius.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.farCornerRadius, amount = farCornerStretchAmount amount = farCornerStretchAmount, ) } Loading @@ -381,7 +381,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : arrowAlpha.stretchTo( stretchAmount = 0f, startingVelocity = startingVelocity, springForce = springForce springForce = springForce, ) } Loading @@ -403,7 +403,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : /** Updates resting arrow and background size not accounting for stretch */ internal fun setRestingDimens( restingParams: EdgePanelParams.BackIndicatorDimens, animate: Boolean = true animate: Boolean = true, ) { horizontalTranslation.updateRestingPosition(restingParams.horizontalTranslation) scale.updateRestingPosition(restingParams.scale) Loading @@ -417,11 +417,11 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : backgroundHeight.updateRestingPosition(restingParams.backgroundDimens.height, animate) backgroundEdgeCornerRadius.updateRestingPosition( restingParams.backgroundDimens.edgeCornerRadius, animate animate, ) backgroundFarCornerRadius.updateRestingPosition( restingParams.backgroundDimens.farCornerRadius, animate animate, ) } Loading Loading @@ -483,11 +483,11 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : topLeft = edgeCorner, bottomLeft = edgeCorner, topRight = farCorner, bottomRight = farCorner bottomRight = farCorner, ) canvas.drawPath( arrowBackground, arrowBackgroundPaint.apply { alpha = (255 * backgroundAlpha.pos).toInt() } arrowBackgroundPaint.apply { alpha = (255 * backgroundAlpha.pos).toInt() }, ) val dx = arrowLength.pos Loading @@ -498,7 +498,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : val arrowOffset = (backgroundWidth - dx) / 2 canvas.translate( /* dx= */ arrowOffset, /* dy= */ 0f /* pass 0 for the y position since the canvas was already translated */ /* dy= */ 0f, /* pass 0 for the y position since the canvas was already translated */ ) val arrowPointsAwayFromEdge = !arrowsPointLeft.xor(isLeftPanel) Loading Loading @@ -532,7 +532,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : topLeft: Float = 0f, topRight: Float = 0f, bottomRight: Float = 0f, bottomLeft: Float = 0f bottomLeft: Float = 0f, ): Path = Path().apply { val corners = Loading @@ -544,7 +544,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : bottomRight, bottomRight, bottomLeft, bottomLeft bottomLeft, ) addRoundRect(this@toPathWithRoundCorners, corners, Path.Direction.CW) } Loading
packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt +20 −20 File changed.Preview size limit exceeded, changes collapsed. Show changes