blob: 886ad684649f4cbe3d18515b269959d027ffd13a [file] [log] [blame]
package com.android.systemui.statusbar
import android.content.Context
import android.util.IndentingPrintWriter
import android.util.MathUtils
import com.android.systemui.R
import com.android.systemui.dump.DumpManager
import com.android.systemui.media.MediaHierarchyManager
import com.android.systemui.shade.NotificationPanelViewController
import com.android.systemui.statusbar.policy.ConfigurationController
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
/** Controls the lockscreen to shade transition for the keyguard elements. */
class LockscreenShadeKeyguardTransitionController
@AssistedInject
constructor(
private val mediaHierarchyManager: MediaHierarchyManager,
@Assisted private val notificationPanelController: NotificationPanelViewController,
context: Context,
configurationController: ConfigurationController,
dumpManager: DumpManager
) : AbstractLockscreenShadeTransitionController(context, configurationController, dumpManager) {
/**
* Distance that the full shade transition takes in order for the keyguard content on
* NotificationPanelViewController to fully fade (e.g. Clock & Smartspace).
*/
private var alphaTransitionDistance = 0
/**
* Distance that the full shade transition takes in order for the keyguard elements to fully
* translate into their final position
*/
private var keyguardTransitionDistance = 0
/** The amount of vertical offset for the keyguard during the full shade transition. */
private var keyguardTransitionOffset = 0
/** The amount of alpha that was last set on the keyguard elements. */
private var alpha = 0f
/** The latest progress [0,1] of the alpha transition. */
private var alphaProgress = 0f
/** The amount of alpha that was last set on the keyguard status bar. */
private var statusBarAlpha = 0f
/** The amount of translationY that was last set on the keyguard elements. */
private var translationY = 0
/** The latest progress [0,1] of the translationY progress. */
private var translationYProgress = 0f
override fun updateResources() {
alphaTransitionDistance =
context.resources.getDimensionPixelSize(
R.dimen.lockscreen_shade_npvc_keyguard_content_alpha_transition_distance)
keyguardTransitionDistance =
context.resources.getDimensionPixelSize(
R.dimen.lockscreen_shade_keyguard_transition_distance)
keyguardTransitionOffset =
context.resources.getDimensionPixelSize(
R.dimen.lockscreen_shade_keyguard_transition_vertical_offset)
}
override fun onDragDownAmountChanged(dragDownAmount: Float) {
alphaProgress = MathUtils.saturate(dragDownAmount / alphaTransitionDistance)
alpha = 1f - alphaProgress
translationY = calculateKeyguardTranslationY(dragDownAmount)
notificationPanelController.setKeyguardTransitionProgress(alpha, translationY)
statusBarAlpha = if (useSplitShade) alpha else -1f
notificationPanelController.setKeyguardStatusBarAlpha(statusBarAlpha)
}
private fun calculateKeyguardTranslationY(dragDownAmount: Float): Int {
if (!useSplitShade) {
return 0
}
// On split-shade, the translationY of the keyguard should stay in sync with the
// translation of media.
if (mediaHierarchyManager.isCurrentlyInGuidedTransformation()) {
return mediaHierarchyManager.getGuidedTransformationTranslationY()
}
// When media is not showing, apply the default distance
translationYProgress = MathUtils.saturate(dragDownAmount / keyguardTransitionDistance)
val translationY = translationYProgress * keyguardTransitionOffset
return translationY.toInt()
}
override fun dump(indentingPrintWriter: IndentingPrintWriter) {
indentingPrintWriter.let {
it.println("LockscreenShadeKeyguardTransitionController:")
it.increaseIndent()
it.println("Resources:")
it.increaseIndent()
it.println("alphaTransitionDistance: $alphaTransitionDistance")
it.println("keyguardTransitionDistance: $keyguardTransitionDistance")
it.println("keyguardTransitionOffset: $keyguardTransitionOffset")
it.decreaseIndent()
it.println("State:")
it.increaseIndent()
it.println("dragDownAmount: $dragDownAmount")
it.println("alpha: $alpha")
it.println("alphaProgress: $alphaProgress")
it.println("statusBarAlpha: $statusBarAlpha")
it.println("translationProgress: $translationYProgress")
it.println("translationY: $translationY")
}
}
@AssistedFactory
fun interface Factory {
fun create(
notificationPanelController: NotificationPanelViewController
): LockscreenShadeKeyguardTransitionController
}
}