Files
lawnchair/quickstep/src/com/android/launcher3/taskbar/TaskbarDesktopModeController.kt

68 lines
2.9 KiB
Kotlin
Raw Normal View History

/*
* 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
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,
) : TaskbarDesktopModeListener {
private lateinit var taskbarControllers: TaskbarControllers
private lateinit var taskbarSharedState: TaskbarSharedState
fun init(controllers: TaskbarControllers, sharedState: TaskbarSharedState) {
taskbarControllers = controllers
taskbarSharedState = sharedState
desktopVisibilityController.registerTaskbarDesktopModeListener(this)
}
fun isInDesktopMode(displayId: Int) = desktopVisibilityController.isInDesktopMode(displayId)
fun isInDesktopModeAndNotInOverview(displayId: Int) =
desktopVisibilityController.isInDesktopModeAndNotInOverview(displayId)
override fun onTaskbarCornerRoundingUpdate(doesAnyTaskRequireTaskbarRounding: Boolean) {
if (taskbarControllers.taskbarActivityContext.isDestroyed) return
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 {
val activityContext = taskbarControllers.taskbarActivityContext
return isInDesktopMode(context.displayId) ||
activityContext.showDesktopTaskbarForFreeformDisplay() ||
(activityContext.showLockedTaskbarOnHome() &&
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
}
fun getTaskbarCornerRoundness(doesAnyTaskRequireTaskbarRounding: Boolean): Float {
return if (doesAnyTaskRequireTaskbarRounding) {
MAX_ROUNDNESS
} else {
0f
}
}
fun onDestroy() = desktopVisibilityController.unregisterTaskbarDesktopModeListener(this)
}