mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-03 17:36:49 +00:00
Add tests for TaskbarStashController.
Test: TaskbarStashControllerTest Bug: 346394503 Flag: TEST_ONLY Change-Id: I930e745826f2512d04434ad689a3e42cac7e9901
This commit is contained in:
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user