Auto-Stashing Functionality for Pinned Taskbar

This cl includes :
- Refactor to remove unpinning/pinning in desktop mode with refactor of DisplayController, TaksbarPinningController, and its tests.
- Combined the auto stashing conditions under one method shouldAllowTaskbarToAutoStash() which takes in consideration isTransientTaskbar, isInDesktop, and Always Show Taskbar option is turned on/off in desktop mode.
- enabled taksbar divider popup support in desktop mode.
- Intorduced animation for pinned taksbar when autostadhing is enabled.
- Enable to onSwipeToUnstashTaskbar for TaskbarInputStashController for pinned taksbar in desktop mode.

Test: Presubmit, Unit, Manual
Bug: 381535785
Flag: com.android.window.flags.enable_desktop_windowing_mode
Change-Id: Ie5ecf3a3c72bf8dfadf2d0c908269305fe5bad0b
This commit is contained in:
Jagrut Desai
2025-04-25 09:46:12 -07:00
parent dd367a2218
commit f52ffc1232
14 changed files with 171 additions and 119 deletions

View File

@@ -20,9 +20,12 @@ import android.animation.AnimatorTestRule
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.LauncherPrefs
import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING
import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING_IN_DESKTOP_MODE
import com.android.launcher3.QuickstepTransitionManager.PINNED_TASKBAR_TRANSITION_DURATION
import com.android.launcher3.R
import com.android.launcher3.statehandlers.DesktopVisibilityController
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.TaskbarControllerTestUtil.asProperty
@@ -61,6 +64,7 @@ import org.junit.After
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.whenever
@RunWith(LauncherMultivalentJUnit::class)
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@@ -80,6 +84,9 @@ class TaskbarStashControllerTest {
@InjectController lateinit var bubbleBarViewController: BubbleBarViewController
@InjectController lateinit var bubbleStashController: BubbleStashController
private val desktopVisibilityController: DesktopVisibilityController
get() = DesktopVisibilityController.INSTANCE[context]
private val activityContext by taskbarUnitTestRule::activityContext
@After fun cancelTimeoutIfExists() = stashController.cancelTimeoutIfExists()
@@ -387,6 +394,24 @@ class TaskbarStashControllerTest {
assertThat(stashController.timeoutAlarm.alarmPending()).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testUpdateTaskbarTimeout_unPinnedTaskbarInDesktopMode_startsTaskbarTimeout() {
LauncherPrefs.get(context).put(TASKBAR_PINNING_IN_DESKTOP_MODE, false)
whenever(desktopVisibilityController.isInDesktopMode(context.displayId)).thenReturn(true)
stashController.updateTaskbarTimeout(false)
assertThat(stashController.timeoutAlarm.alarmPending()).isTrue()
}
@Test
@TaskbarMode(PINNED)
fun testUpdateTaskbarTimeout_pinnedTaskbarInDesktopMode_shouldNotStartsTaskbarTimeout() {
LauncherPrefs.get(context).put(TASKBAR_PINNING_IN_DESKTOP_MODE, true)
whenever(desktopVisibilityController.isInDesktopMode(context.displayId)).thenReturn(true)
stashController.updateTaskbarTimeout(false)
assertThat(stashController.timeoutAlarm.alarmPending()).isFalse()
}
@Test
@TaskbarMode(TRANSIENT)
fun testUpdateAndAnimateTransientTaskbar_finishTaskbarTimeout_taskbarStashes() {

View File

@@ -117,6 +117,14 @@ class TaskbarPinningControllerTest : TaskbarBaseTestCase() {
verify(pinningController, times(1)).animateTaskbarPinning(PINNING_PERSISTENT)
}
@Test
fun testOnCloseCallback_whenLauncherPreferenceChanged_shouldNotAnimateToTaskbarInDesktopMode() {
isInDesktopMode = true
whenever(launcherPrefs.get(TASKBAR_PINNING_IN_DESKTOP_MODE)).thenReturn(false)
pinningController.onCloseCallback(true)
verify(pinningController, never()).animateTaskbarPinning(any())
}
@Test
fun testOnCloseCallback_whenLauncherPreferenceChanged_shouldAnimateToTransientTaskbar() {
whenever(launcherPrefs.get(TASKBAR_PINNING)).thenReturn(true)
@@ -211,13 +219,4 @@ class TaskbarPinningControllerTest : TaskbarBaseTestCase() {
assertThat(pinningController.isAnimatingTaskbarPinning).isFalse()
verify(launcherPrefs, times(1)).put(TASKBAR_PINNING, true)
}
@Test
fun testRecreateTaskbarAndUpdatePinningValue_whenAnimationEnds_shouldUpdateTaskbarPinningDesktopModePref() {
isInDesktopMode = true
pinningController.recreateTaskbarAndUpdatePinningValue()
verify(taskbarDragLayer, times(1)).setAnimatingTaskbarPinning(false)
assertThat(pinningController.isAnimatingTaskbarPinning).isFalse()
verify(launcherPrefs, times(1)).put(TASKBAR_PINNING_IN_DESKTOP_MODE, true)
}
}