Loading packages/SystemUI/shared/src/com/android/systemui/shared/animation/UnfoldMoveFromCenterAnimator.kt +27 −8 Original line number Diff line number Diff line Loading @@ -42,7 +42,9 @@ class UnfoldMoveFromCenterAnimator @JvmOverloads constructor( * are different than actual bounds (e.g. view container may * have larger width than width of the items in the container) */ private val viewCenterProvider: ViewCenterProvider = object : ViewCenterProvider {} private val viewCenterProvider: ViewCenterProvider = object : ViewCenterProvider {}, /** Allows to set the alpha based on the progress. */ private val alphaProvider: AlphaProvider? = null ) : UnfoldTransitionProgressProvider.TransitionProgressListener { private val screenSize = Point() Loading Loading @@ -99,15 +101,25 @@ class UnfoldMoveFromCenterAnimator @JvmOverloads constructor( override fun onTransitionProgress(progress: Float) { animatedViews.forEach { it.view.get()?.let { view -> it.applyTransition(progress) it.applyAlpha(progress) } lastAnimationProgress = progress } private fun AnimatedView.applyTransition(progress: Float) { view.get()?.let { view -> translationApplier.apply( view = view, x = it.startTranslationX * (1 - progress), y = it.startTranslationY * (1 - progress) x = startTranslationX * (1 - progress), y = startTranslationY * (1 - progress) ) } } lastAnimationProgress = progress private fun AnimatedView.applyAlpha(progress: Float) { if (alphaProvider == null) return view.get()?.alpha = alphaProvider.getAlpha(progress) } private fun createAnimatedView(view: View): AnimatedView = Loading Loading @@ -146,6 +158,13 @@ class UnfoldMoveFromCenterAnimator @JvmOverloads constructor( } } /** Allows to set a custom alpha based on the progress. */ interface AlphaProvider { /** Returns the alpha views should have at a given progress. */ fun getAlpha(progress: Float): Float } /** * Interface that allows to use custom logic to get the center of the view */ Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +23 −25 Original line number Diff line number Diff line Loading @@ -49,7 +49,8 @@ class PhoneStatusBarViewController private constructor( } override fun onViewAttached() { moveFromCenterAnimationController?.let { animationController -> if (moveFromCenterAnimationController == null) return val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_left_side) val systemIconArea: ViewGroup = mView.findViewById(R.id.system_icon_area) Loading @@ -61,7 +62,7 @@ class PhoneStatusBarViewController private constructor( mView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { animationController.onViewsReady(viewsToAnimate) moveFromCenterAnimationController.onViewsReady(viewsToAnimate) mView.viewTreeObserver.removeOnPreDrawListener(this) return true } Loading @@ -73,7 +74,6 @@ class PhoneStatusBarViewController private constructor( moveFromCenterAnimationController.onStatusBarWidthChanged() } } } progressProvider?.setReadyToHandleTransition(true) configurationController.addCallback(configurationListener) Loading Loading @@ -162,9 +162,7 @@ class PhoneStatusBarViewController private constructor( PhoneStatusBarViewController( view, progressProvider.getOrNull(), unfoldComponent.map { it.getStatusBarMoveFromCenterAnimationController() }.getOrNull(), unfoldComponent.getOrNull()?.getStatusBarMoveFromCenterAnimationController(), touchEventHandler, configurationController ) Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationController.kt +18 −2 Original line number Diff line number Diff line Loading @@ -18,11 +18,13 @@ package com.android.systemui.statusbar.phone import android.view.View import android.view.WindowManager import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.AlphaProvider import com.android.systemui.statusbar.phone.PhoneStatusBarViewController.StatusBarViewsCenterProvider import com.android.systemui.unfold.SysUIUnfoldScope import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider import javax.inject.Inject import kotlin.math.max @SysUIUnfoldScope class StatusBarMoveFromCenterAnimationController @Inject constructor( Loading @@ -31,8 +33,11 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor( ) { private val transitionListener = TransitionListener() private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(windowManager, viewCenterProvider = StatusBarViewsCenterProvider()) private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator( windowManager, viewCenterProvider = StatusBarViewsCenterProvider(), alphaProvider = StatusBarIconsAlphaProvider() ) fun onViewsReady(viewsToAnimate: Array<View>) { moveFromCenterAnimator.updateDisplayProperties() Loading Loading @@ -65,4 +70,15 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor( moveFromCenterAnimator.onTransitionProgress(1f) } } private class StatusBarIconsAlphaProvider : AlphaProvider { override fun getAlpha(progress: Float): Float { return max( 0f, (progress - ICONS_START_APPEARING_PROGRESS) / (1 - ICONS_START_APPEARING_PROGRESS) ) } } } private const val ICONS_START_APPEARING_PROGRESS = 0.75F Loading
packages/SystemUI/shared/src/com/android/systemui/shared/animation/UnfoldMoveFromCenterAnimator.kt +27 −8 Original line number Diff line number Diff line Loading @@ -42,7 +42,9 @@ class UnfoldMoveFromCenterAnimator @JvmOverloads constructor( * are different than actual bounds (e.g. view container may * have larger width than width of the items in the container) */ private val viewCenterProvider: ViewCenterProvider = object : ViewCenterProvider {} private val viewCenterProvider: ViewCenterProvider = object : ViewCenterProvider {}, /** Allows to set the alpha based on the progress. */ private val alphaProvider: AlphaProvider? = null ) : UnfoldTransitionProgressProvider.TransitionProgressListener { private val screenSize = Point() Loading Loading @@ -99,15 +101,25 @@ class UnfoldMoveFromCenterAnimator @JvmOverloads constructor( override fun onTransitionProgress(progress: Float) { animatedViews.forEach { it.view.get()?.let { view -> it.applyTransition(progress) it.applyAlpha(progress) } lastAnimationProgress = progress } private fun AnimatedView.applyTransition(progress: Float) { view.get()?.let { view -> translationApplier.apply( view = view, x = it.startTranslationX * (1 - progress), y = it.startTranslationY * (1 - progress) x = startTranslationX * (1 - progress), y = startTranslationY * (1 - progress) ) } } lastAnimationProgress = progress private fun AnimatedView.applyAlpha(progress: Float) { if (alphaProvider == null) return view.get()?.alpha = alphaProvider.getAlpha(progress) } private fun createAnimatedView(view: View): AnimatedView = Loading Loading @@ -146,6 +158,13 @@ class UnfoldMoveFromCenterAnimator @JvmOverloads constructor( } } /** Allows to set a custom alpha based on the progress. */ interface AlphaProvider { /** Returns the alpha views should have at a given progress. */ fun getAlpha(progress: Float): Float } /** * Interface that allows to use custom logic to get the center of the view */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +23 −25 Original line number Diff line number Diff line Loading @@ -49,7 +49,8 @@ class PhoneStatusBarViewController private constructor( } override fun onViewAttached() { moveFromCenterAnimationController?.let { animationController -> if (moveFromCenterAnimationController == null) return val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_left_side) val systemIconArea: ViewGroup = mView.findViewById(R.id.system_icon_area) Loading @@ -61,7 +62,7 @@ class PhoneStatusBarViewController private constructor( mView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { animationController.onViewsReady(viewsToAnimate) moveFromCenterAnimationController.onViewsReady(viewsToAnimate) mView.viewTreeObserver.removeOnPreDrawListener(this) return true } Loading @@ -73,7 +74,6 @@ class PhoneStatusBarViewController private constructor( moveFromCenterAnimationController.onStatusBarWidthChanged() } } } progressProvider?.setReadyToHandleTransition(true) configurationController.addCallback(configurationListener) Loading Loading @@ -162,9 +162,7 @@ class PhoneStatusBarViewController private constructor( PhoneStatusBarViewController( view, progressProvider.getOrNull(), unfoldComponent.map { it.getStatusBarMoveFromCenterAnimationController() }.getOrNull(), unfoldComponent.getOrNull()?.getStatusBarMoveFromCenterAnimationController(), touchEventHandler, configurationController ) Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarMoveFromCenterAnimationController.kt +18 −2 Original line number Diff line number Diff line Loading @@ -18,11 +18,13 @@ package com.android.systemui.statusbar.phone import android.view.View import android.view.WindowManager import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.AlphaProvider import com.android.systemui.statusbar.phone.PhoneStatusBarViewController.StatusBarViewsCenterProvider import com.android.systemui.unfold.SysUIUnfoldScope import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider import javax.inject.Inject import kotlin.math.max @SysUIUnfoldScope class StatusBarMoveFromCenterAnimationController @Inject constructor( Loading @@ -31,8 +33,11 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor( ) { private val transitionListener = TransitionListener() private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator(windowManager, viewCenterProvider = StatusBarViewsCenterProvider()) private val moveFromCenterAnimator = UnfoldMoveFromCenterAnimator( windowManager, viewCenterProvider = StatusBarViewsCenterProvider(), alphaProvider = StatusBarIconsAlphaProvider() ) fun onViewsReady(viewsToAnimate: Array<View>) { moveFromCenterAnimator.updateDisplayProperties() Loading Loading @@ -65,4 +70,15 @@ class StatusBarMoveFromCenterAnimationController @Inject constructor( moveFromCenterAnimator.onTransitionProgress(1f) } } private class StatusBarIconsAlphaProvider : AlphaProvider { override fun getAlpha(progress: Float): Float { return max( 0f, (progress - ICONS_START_APPEARING_PROGRESS) / (1 - ICONS_START_APPEARING_PROGRESS) ) } } } private const val ICONS_START_APPEARING_PROGRESS = 0.75F