2024-07-24 17:50:35 -07:00
|
|
|
/*
|
|
|
|
|
* 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
|
|
|
|
|
|
Show desktop tasks when taskbar is pinned on home
Updates taskbar and KQS to show (running) desktop tasks when taskbar is
shown on the home screen - adds `shouldShowDesktopTasksInTaskbar` method
to TaskbarDesktopModeController to be used instead of
`areDesktopTasksVisible*()` to determine whether to show desktop tasks
in the taskbar. The method, in addition to desktop tasks visibility,
also considers whether taskbar should be shown on the home screen, and
whether current launcher state is home.
The launcher state is fetched from `TaskbarStashController`, which
already keeps track of this state. This is likely not ideal, but can be
removed in the long term - see http://b/390665752.
Furthermore, updates ReventsModel login not to always filter out desktop
tasks with no non-minimized tasks (which is currently expected behavior
in overview) in `getTasks()`. The filtering is now done by the filter
passed to `getTasks()` method, instead of when processing tasks in the
background. The filter used by default is updated to filter out such
desktop tasks, but callsites from `KeyboardQuickSwitchController` and
`TaskbarRecentAppsController` are updated to use an empty filter, so
they can display desktop tasks when they're all minimized.
Bug: 376711722
Bug: 390665160
Test: Manual on desktop device - verify that taskbar and KQS when shown
on home screen display desktop tasks, including the case all tasks are
minimized.
Flag: com.android.window.flags.enter_desktop_by_default_on_freeform_displays
Change-Id: Iabc22e20bf64aa9a826b4a5952f1edc6ea639cdc
2025-01-17 23:05:14 +00:00
|
|
|
import android.content.Context
|
2024-07-24 17:50:35 -07:00
|
|
|
import com.android.launcher3.statehandlers.DesktopVisibilityController
|
|
|
|
|
import com.android.launcher3.statehandlers.DesktopVisibilityController.TaskbarDesktopModeListener
|
|
|
|
|
import com.android.launcher3.taskbar.TaskbarBackgroundRenderer.Companion.MAX_ROUNDNESS
|
|
|
|
|
|
|
|
|
|
/** Handles Taskbar in Desktop Windowing mode. */
|
|
|
|
|
class TaskbarDesktopModeController(
|
Show desktop tasks when taskbar is pinned on home
Updates taskbar and KQS to show (running) desktop tasks when taskbar is
shown on the home screen - adds `shouldShowDesktopTasksInTaskbar` method
to TaskbarDesktopModeController to be used instead of
`areDesktopTasksVisible*()` to determine whether to show desktop tasks
in the taskbar. The method, in addition to desktop tasks visibility,
also considers whether taskbar should be shown on the home screen, and
whether current launcher state is home.
The launcher state is fetched from `TaskbarStashController`, which
already keeps track of this state. This is likely not ideal, but can be
removed in the long term - see http://b/390665752.
Furthermore, updates ReventsModel login not to always filter out desktop
tasks with no non-minimized tasks (which is currently expected behavior
in overview) in `getTasks()`. The filtering is now done by the filter
passed to `getTasks()` method, instead of when processing tasks in the
background. The filter used by default is updated to filter out such
desktop tasks, but callsites from `KeyboardQuickSwitchController` and
`TaskbarRecentAppsController` are updated to use an empty filter, so
they can display desktop tasks when they're all minimized.
Bug: 376711722
Bug: 390665160
Test: Manual on desktop device - verify that taskbar and KQS when shown
on home screen display desktop tasks, including the case all tasks are
minimized.
Flag: com.android.window.flags.enter_desktop_by_default_on_freeform_displays
Change-Id: Iabc22e20bf64aa9a826b4a5952f1edc6ea639cdc
2025-01-17 23:05:14 +00:00
|
|
|
private val context: Context,
|
|
|
|
|
private val desktopVisibilityController: DesktopVisibilityController,
|
2024-07-24 17:50:35 -07:00
|
|
|
) : TaskbarDesktopModeListener {
|
|
|
|
|
private lateinit var taskbarControllers: TaskbarControllers
|
|
|
|
|
private lateinit var taskbarSharedState: TaskbarSharedState
|
|
|
|
|
|
|
|
|
|
fun init(controllers: TaskbarControllers, sharedState: TaskbarSharedState) {
|
|
|
|
|
taskbarControllers = controllers
|
|
|
|
|
taskbarSharedState = sharedState
|
2024-08-28 13:24:14 -04:00
|
|
|
desktopVisibilityController.registerTaskbarDesktopModeListener(this)
|
2024-07-24 17:50:35 -07:00
|
|
|
}
|
|
|
|
|
|
2025-02-05 03:21:36 +00:00
|
|
|
fun isInDesktopMode(displayId: Int) = desktopVisibilityController.isInDesktopMode(displayId)
|
|
|
|
|
|
|
|
|
|
fun isInDesktopModeAndNotInOverview(displayId: Int) =
|
|
|
|
|
desktopVisibilityController.isInDesktopModeAndNotInOverview(displayId)
|
|
|
|
|
|
2024-07-24 17:50:35 -07:00
|
|
|
override fun onTaskbarCornerRoundingUpdate(doesAnyTaskRequireTaskbarRounding: Boolean) {
|
2024-12-05 17:01:45 -08:00
|
|
|
if (taskbarControllers.taskbarActivityContext.isDestroyed) return
|
2024-07-24 17:50:35 -07:00
|
|
|
taskbarSharedState.showCornerRadiusInDesktopMode = doesAnyTaskRequireTaskbarRounding
|
|
|
|
|
val cornerRadius = getTaskbarCornerRoundness(doesAnyTaskRequireTaskbarRounding)
|
|
|
|
|
taskbarControllers.taskbarCornerRoundness.animateToValue(cornerRadius).start()
|
|
|
|
|
}
|
|
|
|
|
|
Show desktop tasks when taskbar is pinned on home
Updates taskbar and KQS to show (running) desktop tasks when taskbar is
shown on the home screen - adds `shouldShowDesktopTasksInTaskbar` method
to TaskbarDesktopModeController to be used instead of
`areDesktopTasksVisible*()` to determine whether to show desktop tasks
in the taskbar. The method, in addition to desktop tasks visibility,
also considers whether taskbar should be shown on the home screen, and
whether current launcher state is home.
The launcher state is fetched from `TaskbarStashController`, which
already keeps track of this state. This is likely not ideal, but can be
removed in the long term - see http://b/390665752.
Furthermore, updates ReventsModel login not to always filter out desktop
tasks with no non-minimized tasks (which is currently expected behavior
in overview) in `getTasks()`. The filtering is now done by the filter
passed to `getTasks()` method, instead of when processing tasks in the
background. The filter used by default is updated to filter out such
desktop tasks, but callsites from `KeyboardQuickSwitchController` and
`TaskbarRecentAppsController` are updated to use an empty filter, so
they can display desktop tasks when they're all minimized.
Bug: 376711722
Bug: 390665160
Test: Manual on desktop device - verify that taskbar and KQS when shown
on home screen display desktop tasks, including the case all tasks are
minimized.
Flag: com.android.window.flags.enter_desktop_by_default_on_freeform_displays
Change-Id: Iabc22e20bf64aa9a826b4a5952f1edc6ea639cdc
2025-01-17 23:05:14 +00:00
|
|
|
fun shouldShowDesktopTasksInTaskbar(): Boolean {
|
2025-03-14 04:20:30 -07:00
|
|
|
val activityContext = taskbarControllers.taskbarActivityContext
|
2025-02-05 03:21:36 +00:00
|
|
|
return isInDesktopMode(context.displayId) ||
|
2025-03-14 04:20:30 -07:00
|
|
|
activityContext.showDesktopTaskbarForFreeformDisplay() ||
|
|
|
|
|
(activityContext.showLockedTaskbarOnHome() &&
|
2025-01-23 18:58:15 +00:00
|
|
|
taskbarControllers.taskbarStashController.isOnHome)
|
Show desktop tasks when taskbar is pinned on home
Updates taskbar and KQS to show (running) desktop tasks when taskbar is
shown on the home screen - adds `shouldShowDesktopTasksInTaskbar` method
to TaskbarDesktopModeController to be used instead of
`areDesktopTasksVisible*()` to determine whether to show desktop tasks
in the taskbar. The method, in addition to desktop tasks visibility,
also considers whether taskbar should be shown on the home screen, and
whether current launcher state is home.
The launcher state is fetched from `TaskbarStashController`, which
already keeps track of this state. This is likely not ideal, but can be
removed in the long term - see http://b/390665752.
Furthermore, updates ReventsModel login not to always filter out desktop
tasks with no non-minimized tasks (which is currently expected behavior
in overview) in `getTasks()`. The filtering is now done by the filter
passed to `getTasks()` method, instead of when processing tasks in the
background. The filter used by default is updated to filter out such
desktop tasks, but callsites from `KeyboardQuickSwitchController` and
`TaskbarRecentAppsController` are updated to use an empty filter, so
they can display desktop tasks when they're all minimized.
Bug: 376711722
Bug: 390665160
Test: Manual on desktop device - verify that taskbar and KQS when shown
on home screen display desktop tasks, including the case all tasks are
minimized.
Flag: com.android.window.flags.enter_desktop_by_default_on_freeform_displays
Change-Id: Iabc22e20bf64aa9a826b4a5952f1edc6ea639cdc
2025-01-17 23:05:14 +00:00
|
|
|
}
|
|
|
|
|
|
2024-07-24 17:50:35 -07:00
|
|
|
fun getTaskbarCornerRoundness(doesAnyTaskRequireTaskbarRounding: Boolean): Float {
|
|
|
|
|
return if (doesAnyTaskRequireTaskbarRounding) {
|
|
|
|
|
MAX_ROUNDNESS
|
|
|
|
|
} else {
|
|
|
|
|
0f
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-28 13:24:14 -04:00
|
|
|
fun onDestroy() = desktopVisibilityController.unregisterTaskbarDesktopModeListener(this)
|
2024-07-24 17:50:35 -07:00
|
|
|
}
|