Add tests for TaskbarStashController.

Test: TaskbarStashControllerTest
Bug: 346394503
Flag: TEST_ONLY
Change-Id: I930e745826f2512d04434ad689a3e42cac7e9901
This commit is contained in:
Brian Isganitis
2024-07-15 14:19:01 -04:00
parent c2c7913134
commit 3231ba01e6
4 changed files with 734 additions and 15 deletions

View File

@@ -0,0 +1,681 @@
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.taskbar
import android.animation.AnimatorTestRule
import android.platform.test.annotations.EnableFlags
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.R
import com.android.launcher3.taskbar.StashedHandleViewController.ALPHA_INDEX_STASHED
import com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_EDU_OPEN
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_OVERVIEW
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_STASHED_LAUNCHER_STATE
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_DEVICE_LOCKED
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_IME
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_IN_APP_AUTO
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_SMALL_SCREEN
import com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_SYSUI
import com.android.launcher3.taskbar.TaskbarStashController.TASKBAR_STASH_DURATION
import com.android.launcher3.taskbar.TaskbarStashController.TASKBAR_STASH_DURATION_FOR_IME
import com.android.launcher3.taskbar.TaskbarStashController.TRANSIENT_TASKBAR_STASH_ALPHA_DURATION
import com.android.launcher3.taskbar.TaskbarStashController.TRANSIENT_TASKBAR_STASH_DURATION
import com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_STASH
import com.android.launcher3.taskbar.bubbles.BubbleControllers
import com.android.launcher3.taskbar.rules.TaskbarModeRule
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.PINNED
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.THREE_BUTTONS
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.TRANSIENT
import com.android.launcher3.taskbar.rules.TaskbarModeRule.TaskbarMode
import com.android.launcher3.taskbar.rules.TaskbarPinningPreferenceRule
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.InjectController
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.UserSetupMode
import com.android.launcher3.taskbar.rules.TaskbarWindowSandboxContext
import com.android.launcher3.util.LauncherMultivalentJUnit
import com.android.launcher3.util.LauncherMultivalentJUnit.EmulatedDevices
import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED
import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING
import com.android.wm.shell.Flags.FLAG_ENABLE_BUBBLE_BAR
import com.google.common.truth.Truth.assertThat
import java.util.Optional
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(LauncherMultivalentJUnit::class)
@EmulatedDevices(["pixelTablet2023"])
class TaskbarStashControllerTest {
private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
@get:Rule(order = 0) val taskbarModeRule = TaskbarModeRule(context)
@get:Rule(order = 1) val taskbarPinningPreferenceRule = TaskbarPinningPreferenceRule(context)
@get:Rule(order = 2) val animatorTestRule = AnimatorTestRule(this)
@get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var stashController: TaskbarStashController
@InjectController lateinit var viewController: TaskbarViewController
@InjectController lateinit var stashedHandleViewController: StashedHandleViewController
@InjectController lateinit var dragLayerController: TaskbarDragLayerController
@InjectController lateinit var autohideSuspendController: TaskbarAutohideSuspendController
@InjectController lateinit var bubbleControllers: Optional<BubbleControllers>
private val activityContext by taskbarUnitTestRule::activityContext
// Disable hardware keyboard mode during tests.
@Before fun enableSoftwareIme() = TaskbarStashController.enableSoftwareImeForTests(true)
@After fun resetIme() = TaskbarStashController.enableSoftwareImeForTests(false)
@After fun cancelTimeoutIfExists() = stashController.cancelTimeoutIfExists()
@Test
@TaskbarMode(TRANSIENT)
fun testInit_transientMode_stashedInApp() {
assertThat(stashController.isStashedInApp).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testInit_pinnedMode_unstashedInApp() {
assertThat(stashController.isStashedInApp).isFalse()
}
@Test
@UserSetupMode
@TaskbarMode(PINNED)
fun testInit_userSetupWithPinnedMode_stashedInApp() {
assertThat(stashController.isStashedInApp).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testSetSetupUiVisible_true_stashedInApp() {
getInstrumentation().runOnMainSync { stashController.setSetupUIVisible(true) }
assertThat(stashController.isStashedInApp).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testSetSetupUiVisible_false_unstashedInApp() {
getInstrumentation().runOnMainSync { stashController.setSetupUIVisible(false) }
assertThat(stashController.isStashedInApp).isFalse()
}
@Test
fun testRecreateAsTransient_timeoutStarted() {
taskbarPinningPreferenceRule.isPinned = true
activityContext.controllers.sharedState?.taskbarWasPinned = true
taskbarPinningPreferenceRule.isPinned = false
assertThat(stashController.timeoutAlarm.alarmPending()).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testSupportsVisualStashing_transientMode_supported() {
assertThat(stashController.supportsVisualStashing()).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testSupportsVisualStashing_pinnedMode_supported() {
assertThat(stashController.supportsVisualStashing()).isTrue()
}
@Test
@TaskbarMode(THREE_BUTTONS)
fun testSupportsVisualStashing_threeButtonsMode_unsupported() {
assertThat(stashController.supportsVisualStashing()).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testGetStashDuration_transientMode() {
assertThat(stashController.stashDuration).isEqualTo(TRANSIENT_TASKBAR_STASH_DURATION)
}
@Test
@TaskbarMode(PINNED)
fun testGetStashDuration_pinnedMode() {
assertThat(stashController.stashDuration).isEqualTo(TASKBAR_STASH_DURATION)
}
@Test
@TaskbarMode(PINNED)
fun testIsStashed_pinnedInApp_isUnstashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, true)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testIsStashed_transientInApp_isStashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, true)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testIsStashed_transientNotInApp_isUnstashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isFalse()
}
@Test
fun testIsStashed_stashedInLauncherState_isStashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.updateStateForFlag(FLAG_IN_STASHED_LAUNCHER_STATE, true)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testIsStashed_transientInOverview_isUnstashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.updateStateForFlag(FLAG_IN_OVERVIEW, true)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(PINNED)
fun testIsStashed_pinnedInOverviewWithIme_isStashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.updateStateForFlag(FLAG_IN_OVERVIEW, true)
stashController.updateStateForFlag(FLAG_STASHED_IME, true)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testIsStashed_pinnedTaskbarWithPinnedApp_isStashed() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, true)
stashController.updateStateForFlag(FLAG_STASHED_SYSUI, true) // App pinned.
stashController.applyState(0)
}
assertThat(stashController.isStashed).isTrue()
}
@Test
fun testIsInStashedLauncherState_flagUnset_false() {
stashController.updateStateForFlag(FLAG_IN_STASHED_LAUNCHER_STATE, false)
assertThat(stashController.isInStashedLauncherState).isFalse()
}
@Test
@TaskbarMode(THREE_BUTTONS)
fun testIsInStashedLauncherState_flagSetInThreeButtonsMode_false() {
stashController.updateStateForFlag(FLAG_IN_STASHED_LAUNCHER_STATE, true)
assertThat(stashController.isInStashedLauncherState).isFalse()
}
@Test
@TaskbarMode(PINNED)
fun testIsInStashedLauncherState_flagSetInPinnedMode_true() {
stashController.updateStateForFlag(FLAG_IN_STASHED_LAUNCHER_STATE, true)
assertThat(stashController.isInStashedLauncherState).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testIsTaskbarVisibleAndNotStashing_pinnedButNotVisible_false() {
getInstrumentation().runOnMainSync {
viewController.taskbarIconAlpha.get(ALPHA_INDEX_STASH).value = 0f
}
assertThat(stashController.isTaskbarVisibleAndNotStashing).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testIsTaskbarVisibleAndNotStashing_visibleButStashed_false() {
getInstrumentation().runOnMainSync {
viewController.taskbarIconAlpha.get(ALPHA_INDEX_STASH).value = 1f
}
assertThat(stashController.isTaskbarVisibleAndNotStashing).isFalse()
}
@Test
@TaskbarMode(PINNED)
fun testIsTaskbarVisibleAndNotStashing_pinnedAndVisible_true() {
getInstrumentation().runOnMainSync {
viewController.taskbarIconAlpha.get(ALPHA_INDEX_STASH).value = 1f
}
assertThat(stashController.isTaskbarVisibleAndNotStashing).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testGetTouchableHeight_isStashed_stashedHeight() {
assertThat(stashController.touchableHeight).isEqualTo(stashController.stashedHeight)
}
@Test
@TaskbarMode(TRANSIENT)
fun testGetTouchableHeight_unstashedTransientMode_heightAndBottomMargin() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_STASHED_IN_APP_AUTO, false)
stashController.applyState(0)
}
val expectedHeight =
activityContext.deviceProfile.run { taskbarHeight + taskbarBottomMargin }
assertThat(stashController.touchableHeight).isEqualTo(expectedHeight)
}
@Test
@TaskbarMode(PINNED)
fun testGetTouchableHeight_pinnedMode_taskbarHeight() {
assertThat(stashController.touchableHeight)
.isEqualTo(activityContext.deviceProfile.taskbarHeight)
}
@Test
@TaskbarMode(TRANSIENT)
fun testGetContentHeightToReportToApps_transientMode_stashedHeight() {
assertThat(stashController.contentHeightToReportToApps)
.isEqualTo(stashController.stashedHeight)
}
@Test
@TaskbarMode(THREE_BUTTONS)
fun testGetContentHeightToReportToApps_threeButtonsMode_taskbarHeight() {
assertThat(stashController.contentHeightToReportToApps)
.isEqualTo(activityContext.deviceProfile.taskbarHeight)
}
@Test
@TaskbarMode(PINNED)
fun testGetContentHeightToReportToApps_pinnedMode_taskbarHeight() {
assertThat(stashController.contentHeightToReportToApps)
.isEqualTo(activityContext.deviceProfile.taskbarHeight)
}
@Test
@TaskbarMode(PINNED)
@UserSetupMode
fun testGetContentHeightToReportToApps_pinnedInSetupMode_setupWizardInsets() {
assertThat(stashController.contentHeightToReportToApps)
.isEqualTo(context.resources.getDimensionPixelSize(R.dimen.taskbar_suw_insets))
}
@Test
@TaskbarMode(PINNED)
fun testGetContentHeightToReportToApps_pinnedModeButFolded_stashedHeight() {
getInstrumentation().runOnMainSync {
stashedHandleViewController.stashedHandleAlpha.get(ALPHA_INDEX_STASHED).value = 1f
stashController.updateStateForFlag(FLAG_STASHED_SMALL_SCREEN, true)
}
assertThat(stashController.contentHeightToReportToApps)
.isEqualTo(stashController.stashedHeight)
}
@Test
@TaskbarMode(PINNED)
fun testGetContentHeightToReportToApps_homeDisabledWhenFolded_zeroHeight() {
getInstrumentation().runOnMainSync {
stashedHandleViewController.stashedHandleAlpha.get(ALPHA_INDEX_STASHED).value = 1f
stashedHandleViewController.setIsHomeButtonDisabled(true)
stashController.updateStateForFlag(FLAG_STASHED_SMALL_SCREEN, true)
}
assertThat(stashController.contentHeightToReportToApps).isEqualTo(0)
}
@Test
@TaskbarMode(TRANSIENT)
fun testGetTappableHeightToReportToApps_transientMode_zeroHeight() {
assertThat(stashController.tappableHeightToReportToApps).isEqualTo(0)
}
@Test
@TaskbarMode(PINNED)
fun testGetTappableHeightToReportToApps_pinnedMode_taskbarHeight() {
assertThat(stashController.tappableHeightToReportToApps)
.isEqualTo(activityContext.deviceProfile.taskbarHeight)
}
@Test
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_unstashTaskbar_updatesState() {
getInstrumentation().runOnMainSync {
stashController.updateAndAnimateTransientTaskbar(false)
}
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_runUnstashAnimation_startsTaskbarTimeout() {
getInstrumentation().runOnMainSync {
stashController.updateAndAnimateTransientTaskbar(false)
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(stashController.timeoutAlarm.alarmPending()).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_finishTaskbarTimeout_taskbarStashes() {
getInstrumentation().runOnMainSync {
stashController.updateAndAnimateTransientTaskbar(false)
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(stashController.timeoutAlarm.alarmPending()).isTrue()
getInstrumentation().runOnMainSync {
stashController.timeoutAlarm.finishAlarm()
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(stashController.isStashed).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_autoHideSuspendedForEdu_remainsUnstashed() {
getInstrumentation().runOnMainSync {
stashController.updateAndAnimateTransientTaskbar(false)
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
getInstrumentation().runOnMainSync {
autohideSuspendController.updateFlag(FLAG_AUTOHIDE_SUSPEND_EDU_OPEN, true)
stashController.updateAndAnimateTransientTaskbar(true)
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(stashController.isStashed).isFalse()
}
@Test
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_unstashTaskbarWithBubbles_bubbleBarUnstashes() {
getInstrumentation().runOnMainSync {
bubbleControllers.get().bubbleBarViewController.setHiddenForBubbles(false)
bubbleControllers.get().bubbleStashController.stashBubbleBarImmediate()
stashController.updateAndAnimateTransientTaskbar(false, true)
}
assertThat(bubbleControllers.get().bubbleStashController.isStashed).isFalse()
}
@Test
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_unstashTaskbarWithoutBubbles_bubbleBarStashed() {
getInstrumentation().runOnMainSync {
bubbleControllers.get().bubbleBarViewController.setHiddenForBubbles(false)
bubbleControllers.get().bubbleStashController.stashBubbleBarImmediate()
stashController.updateAndAnimateTransientTaskbar(false, false)
}
assertThat(bubbleControllers.get().bubbleStashController.isStashed).isTrue()
}
@Test
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_stashTaskbarWithBubbles_bubbleBarStashes() {
getInstrumentation().runOnMainSync {
bubbleControllers.get().bubbleBarViewController.setHiddenForBubbles(false)
bubbleControllers.get().bubbleStashController.showBubbleBarImmediate()
stashController.updateAndAnimateTransientTaskbar(true, true)
}
assertThat(bubbleControllers.get().bubbleStashController.isStashed).isTrue()
}
@Test
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_stashTaskbarWithoutBubbles_bubbleBarUnstashed() {
getInstrumentation().runOnMainSync {
bubbleControllers.get().bubbleBarViewController.setHiddenForBubbles(false)
bubbleControllers.get().bubbleStashController.showBubbleBarImmediate()
stashController.updateAndAnimateTransientTaskbar(true, false)
}
assertThat(bubbleControllers.get().bubbleStashController.isStashed).isFalse()
}
@Test
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_bubbleBarExpandedBeforeTimeout_expandedAfterwards() {
getInstrumentation().runOnMainSync {
bubbleControllers.get().bubbleBarViewController.setHiddenForBubbles(false)
bubbleControllers.get().bubbleBarViewController.isExpanded = true
stashController.updateAndAnimateTransientTaskbar(false)
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(stashController.timeoutAlarm.alarmPending()).isTrue()
getInstrumentation().runOnMainSync {
stashController.timeoutAlarm.finishAlarm()
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(bubbleControllers.get().bubbleBarViewController.isExpanded).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testToggleTaskbarStash_pinnedMode_doesNothing() {
getInstrumentation().runOnMainSync { stashController.toggleTaskbarStash() }
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testToggleTaskbarStash_transientMode_unstashesTaskbar() {
getInstrumentation().runOnMainSync { stashController.toggleTaskbarStash() }
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testToggleTaskbarStash_twiceInTransientMode_stashesTaskbar() {
getInstrumentation().runOnMainSync {
stashController.toggleTaskbarStash()
stashController.toggleTaskbarStash()
}
assertThat(stashController.isStashed).isTrue()
}
@Test
@TaskbarMode(TRANSIENT)
fun testToggleTaskbarStash_notInAppWithTransientMode_doesNothing() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.applyState(0)
stashController.toggleTaskbarStash()
}
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testAnimateTransientTaskbar_bubblesShownInOverview_stashesTaskbar() {
// Start in Overview. Should unstash Taskbar.
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_STASHED_IN_APP_AUTO, false)
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.updateStateForFlag(FLAG_IN_OVERVIEW, true)
stashController.applyState(0)
}
assertThat(stashController.isStashed).isFalse()
// Expand bubbles. Should stash Taskbar.
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_BUBBLES_EXPANDED, false)
animatorTestRule.advanceTimeBy(TASKBAR_STASH_DURATION)
}
assertThat(stashController.isStashed).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testAnimatePinnedTaskbar_imeShown_replacesIconsWithHandle() {
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_IME_SHOWING, false)
animatorTestRule.advanceTimeBy(TASKBAR_STASH_DURATION_FOR_IME)
}
assertThat(viewController.areIconsVisible()).isFalse()
assertThat(stashedHandleViewController.isStashedHandleVisible).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testAnimatePinnedTaskbar_imeHidden_replacesHandleWithIcons() {
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_IME_SHOWING, true)
animatorTestRule.advanceTimeBy(0)
}
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(0, true)
animatorTestRule.advanceTimeBy(0)
}
assertThat(stashedHandleViewController.isStashedHandleVisible).isFalse()
assertThat(viewController.areIconsVisible()).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testAnimatePinnedTaskbar_imeHidden_verifyAnimationDuration() {
// Start with IME shown.
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_IME_SHOWING, true)
animatorTestRule.advanceTimeBy(0)
}
// Hide IME with animation.
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(0, false)
// Fast forward without start delay.
animatorTestRule.advanceTimeBy(TASKBAR_STASH_DURATION_FOR_IME)
}
// Icons should not be visible yet due to start delay.
assertThat(viewController.areIconsVisible()).isFalse()
// Advance by start delay retroactively. Animation should complete.
getInstrumentation().runOnMainSync {
animatorTestRule.advanceTimeBy(stashController.taskbarStashStartDelayForIme)
}
assertThat(viewController.areIconsVisible()).isTrue()
}
@Test
@TaskbarMode(THREE_BUTTONS)
fun testAnimateThreeButtonsTaskbar_imeShown_hidesIconsAndBg() {
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_IME_SHOWING, false)
animatorTestRule.advanceTimeBy(TASKBAR_STASH_DURATION_FOR_IME)
}
assertThat(viewController.areIconsVisible()).isFalse()
assertThat(dragLayerController.imeBgTaskbar.value).isEqualTo(0)
}
@Test
@TaskbarMode(THREE_BUTTONS)
fun testAnimateThreeButtonsTaskbar_imeHidden_showsIconsAndBg() {
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_IME_SHOWING, false)
animatorTestRule.advanceTimeBy(TASKBAR_STASH_DURATION_FOR_IME)
}
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(0, false)
animatorTestRule.advanceTimeBy(
TASKBAR_STASH_DURATION_FOR_IME + stashController.taskbarStashStartDelayForIme
)
}
assertThat(viewController.areIconsVisible()).isTrue()
assertThat(dragLayerController.imeBgTaskbar.value).isEqualTo(1)
}
@Test
@TaskbarMode(PINNED)
fun testSetSystemGestureInProgress_whileImeShown_unstashesTaskbar() {
getInstrumentation().runOnMainSync {
stashController.updateStateForSysuiFlags(SYSUI_STATE_IME_SHOWING, true)
animatorTestRule.advanceTimeBy(0)
}
getInstrumentation().runOnMainSync {
stashController.setSystemGestureInProgress(true)
animatorTestRule.advanceTimeBy(
TASKBAR_STASH_DURATION_FOR_IME + stashController.taskbarStashStartDelayForIme
)
}
assertThat(stashController.isStashed).isFalse()
}
@Test
@TaskbarMode(PINNED)
fun testUnlockTransition_pinnedMode_fadesOutHandle() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED, true)
stashController.applyState(0)
}
assertThat(stashedHandleViewController.isStashedHandleVisible).isTrue()
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED, false)
stashController.applyState()
animatorTestRule.advanceTimeBy(stashController.stashDuration)
}
assertThat(stashedHandleViewController.isStashedHandleVisible).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testUnlockTransition_transientMode_fadesOutHandleEarly() {
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_IN_APP, false)
stashController.updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED, true)
stashController.applyState(0)
}
assertThat(stashedHandleViewController.isStashedHandleVisible).isTrue()
getInstrumentation().runOnMainSync {
stashController.updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED, false)
stashController.applyState()
// Time it takes for just the handle to hide (full stash animation is longer).
animatorTestRule.advanceTimeBy(TRANSIENT_TASKBAR_STASH_ALPHA_DURATION)
}
assertThat(stashedHandleViewController.isStashedHandleVisible).isFalse()
}
}
private fun TaskbarStashController.updateStateForFlag(flag: Int, value: Boolean) {
updateStateForFlag(flag.toLong(), value)
}