Loading packages/SystemUI/src/com/android/systemui/flags/Flags.kt +7 −0 Original line number Diff line number Diff line Loading @@ -534,6 +534,13 @@ object Flags { val OUTPUT_SWITCHER_SHOW_API_ENABLED = unreleasedFlag(2503, "output_switcher_show_api_enabled", teamfood = true) // 2600 - unfold transitions // TODO(b/265764985): Tracking Bug @Keep @JvmField val ENABLE_DARK_VIGNETTE_WHEN_FOLDING = unreleasedFlag(2600, "enable_dark_vignette_when_folding") // TODO(b259590361): Tracking bug val EXPERIMENTAL_FLAG = unreleasedFlag(2, "exp_flag_release") Loading packages/SystemUI/src/com/android/systemui/unfold/UnfoldLightRevealOverlayAnimation.kt +33 −6 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import android.view.SurfaceSession import android.view.WindowManager import android.view.WindowlessWindowManager import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.statusbar.LightRevealEffect import com.android.systemui.statusbar.LightRevealScrim import com.android.systemui.statusbar.LinearLightRevealEffect Loading @@ -57,6 +59,7 @@ class UnfoldLightRevealOverlayAnimation @Inject constructor( private val context: Context, private val featureFlags: FeatureFlags, private val deviceStateManager: DeviceStateManager, private val contentResolver: ContentResolver, private val displayManager: DisplayManager, Loading @@ -81,6 +84,7 @@ constructor( private var scrimView: LightRevealScrim? = null private var isFolded: Boolean = false private var isUnfoldHandled: Boolean = true private var overlayAddReason: AddOverlayReason? = null private var currentRotation: Int = context.display!!.rotation Loading Loading @@ -158,6 +162,8 @@ constructor( ensureInBackground() ensureOverlayRemoved() overlayAddReason = reason val newRoot = SurfaceControlViewHost(context, context.display!!, wwm) val params = getLayoutParams() val newView = Loading @@ -170,11 +176,7 @@ constructor( .apply { revealEffect = createLightRevealEffect() isScrimOpaqueChangedListener = Consumer {} revealAmount = when (reason) { FOLD -> TRANSPARENT UNFOLD -> BLACK } revealAmount = calculateRevealAmount() } newRoot.setView(newView, params) Loading Loading @@ -207,6 +209,31 @@ constructor( root = newRoot } private fun calculateRevealAmount(animationProgress: Float? = null): Float { val overlayAddReason = overlayAddReason ?: UNFOLD if (animationProgress == null) { // Animation progress is unknown, calculate the initial value based on the overlay // add reason return when (overlayAddReason) { FOLD -> TRANSPARENT UNFOLD -> BLACK } } val showVignetteWhenFolding = featureFlags.isEnabled(Flags.ENABLE_DARK_VIGNETTE_WHEN_FOLDING) return if (!showVignetteWhenFolding && overlayAddReason == FOLD) { // Do not darken the content when SHOW_VIGNETTE_WHEN_FOLDING flag is off // and we are folding the device. We still add the overlay to block touches // while the animation is running but the overlay is transparent. TRANSPARENT } else { animationProgress } } private fun getLayoutParams(): WindowManager.LayoutParams { val params: WindowManager.LayoutParams = WindowManager.LayoutParams() Loading Loading @@ -259,7 +286,7 @@ constructor( private inner class TransitionListener : TransitionProgressListener { override fun onTransitionProgress(progress: Float) { executeInBackground { scrimView?.revealAmount = progress } executeInBackground { scrimView?.revealAmount = calculateRevealAmount(progress) } } override fun onTransitionFinished() { Loading Loading
packages/SystemUI/src/com/android/systemui/flags/Flags.kt +7 −0 Original line number Diff line number Diff line Loading @@ -534,6 +534,13 @@ object Flags { val OUTPUT_SWITCHER_SHOW_API_ENABLED = unreleasedFlag(2503, "output_switcher_show_api_enabled", teamfood = true) // 2600 - unfold transitions // TODO(b/265764985): Tracking Bug @Keep @JvmField val ENABLE_DARK_VIGNETTE_WHEN_FOLDING = unreleasedFlag(2600, "enable_dark_vignette_when_folding") // TODO(b259590361): Tracking bug val EXPERIMENTAL_FLAG = unreleasedFlag(2, "exp_flag_release") Loading
packages/SystemUI/src/com/android/systemui/unfold/UnfoldLightRevealOverlayAnimation.kt +33 −6 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import android.view.SurfaceSession import android.view.WindowManager import android.view.WindowlessWindowManager import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.statusbar.LightRevealEffect import com.android.systemui.statusbar.LightRevealScrim import com.android.systemui.statusbar.LinearLightRevealEffect Loading @@ -57,6 +59,7 @@ class UnfoldLightRevealOverlayAnimation @Inject constructor( private val context: Context, private val featureFlags: FeatureFlags, private val deviceStateManager: DeviceStateManager, private val contentResolver: ContentResolver, private val displayManager: DisplayManager, Loading @@ -81,6 +84,7 @@ constructor( private var scrimView: LightRevealScrim? = null private var isFolded: Boolean = false private var isUnfoldHandled: Boolean = true private var overlayAddReason: AddOverlayReason? = null private var currentRotation: Int = context.display!!.rotation Loading Loading @@ -158,6 +162,8 @@ constructor( ensureInBackground() ensureOverlayRemoved() overlayAddReason = reason val newRoot = SurfaceControlViewHost(context, context.display!!, wwm) val params = getLayoutParams() val newView = Loading @@ -170,11 +176,7 @@ constructor( .apply { revealEffect = createLightRevealEffect() isScrimOpaqueChangedListener = Consumer {} revealAmount = when (reason) { FOLD -> TRANSPARENT UNFOLD -> BLACK } revealAmount = calculateRevealAmount() } newRoot.setView(newView, params) Loading Loading @@ -207,6 +209,31 @@ constructor( root = newRoot } private fun calculateRevealAmount(animationProgress: Float? = null): Float { val overlayAddReason = overlayAddReason ?: UNFOLD if (animationProgress == null) { // Animation progress is unknown, calculate the initial value based on the overlay // add reason return when (overlayAddReason) { FOLD -> TRANSPARENT UNFOLD -> BLACK } } val showVignetteWhenFolding = featureFlags.isEnabled(Flags.ENABLE_DARK_VIGNETTE_WHEN_FOLDING) return if (!showVignetteWhenFolding && overlayAddReason == FOLD) { // Do not darken the content when SHOW_VIGNETTE_WHEN_FOLDING flag is off // and we are folding the device. We still add the overlay to block touches // while the animation is running but the overlay is transparent. TRANSPARENT } else { animationProgress } } private fun getLayoutParams(): WindowManager.LayoutParams { val params: WindowManager.LayoutParams = WindowManager.LayoutParams() Loading Loading @@ -259,7 +286,7 @@ constructor( private inner class TransitionListener : TransitionProgressListener { override fun onTransitionProgress(progress: Float) { executeInBackground { scrimView?.revealAmount = progress } executeInBackground { scrimView?.revealAmount = calculateRevealAmount(progress) } } override fun onTransitionFinished() { Loading