blob: a5ba52a39e2b9e05d7fdf79c6f6a962ba6a8be67 [file] [edit]
/*
* 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.quickstep
import android.content.Context
import com.android.launcher3.R
import com.android.launcher3.Utilities
import com.android.launcher3.util.DisplayController
import com.android.launcher3.util.SafeCloseable
import com.android.launcher3.views.ActivityContext
import com.android.quickstep.util.TaskCornerRadius
import com.android.systemui.shared.system.QuickStepContract
/**
* Class for computing corner radius by interpolating between overview and fullscreen corner radius
* with fullscreenProgress set in [setProgress].
*/
open class FullscreenDrawParams
@JvmOverloads
constructor(
context: Context,
private val taskCornerRadiusProvider: (Context) -> Float = ::computeTaskCornerRadius,
private val windowCornerRadiusProvider: (Context) -> Float = ::computeWindowCornerRadius,
) : SafeCloseable {
private var taskCornerRadius = 0f
private var windowCornerRadius = 0f
var currentCornerRadius = 0f
init {
updateCornerRadius(context)
}
/** Recomputes the start and end corner radius for the given Context. */
fun updateCornerRadius(context: Context) {
taskCornerRadius = taskCornerRadiusProvider(context)
windowCornerRadius = windowCornerRadiusProvider(context)
}
/** Sets the progress in range [0, 1] */
fun setProgress(fullscreenProgress: Float, parentScale: Float, taskViewScale: Float) {
currentCornerRadius =
Utilities.mapRange(fullscreenProgress, taskCornerRadius, windowCornerRadius) /
parentScale /
taskViewScale
}
override fun close() {}
companion object {
private fun computeTaskCornerRadius(context: Context): Float = TaskCornerRadius.get(context)
private fun computeWindowCornerRadius(context: Context): Float {
val activityContext: ActivityContext? = ActivityContext.lookupContextNoThrow(context)
return if (
activityContext?.deviceProfile?.isTaskbarPresent == true &&
DisplayController.isTransientTaskbar(context)
) {
context.resources
.getDimensionPixelSize(R.dimen.persistent_taskbar_corner_radius)
.toFloat()
} else {
// The corner radius is fixed to match when Taskbar is persistent mode
QuickStepContract.getWindowCornerRadius(context)
}
}
}
}