Loading packages/SystemUI/res/values/dimens.xml +9 −0 Original line number Diff line number Diff line Loading @@ -1246,6 +1246,15 @@ <!-- Maximum overshoot for the pulse expansion --> <dimen name="pulse_expansion_max_top_overshoot">32dp</dimen> <!-- The drag amount required for the split shade to fully expand. --> <dimen name="split_shade_full_transition_distance">200dp</dimen> <!-- The drag amount required for the scrim to fully fade in when expanding the split shade. Currently setting it a little longer than the full shade transition distance, to avoid having a state where the screen is fully black without any content showing. --> <dimen name="split_shade_scrim_transition_distance">300dp</dimen> <!-- Alpha in duration in ms for the auth ripple to become fully vislble. If set to 0, it is immediately visible. --> <integer name="auth_ripple_alpha_in_duration">100</integer> Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +16 −1 Original line number Diff line number Diff line Loading @@ -666,6 +666,9 @@ public class NotificationPanelViewController extends PanelViewController { private Optional<NotificationPanelUnfoldAnimationController> mNotificationPanelUnfoldAnimationController; /** The drag distance required to fully expand the split shade. */ private int mSplitShadeFullTransitionDistance; private final NotificationListContainer mNotificationListContainer; private final NotificationStackSizeCalculator mNotificationStackSizeCalculator; Loading Loading @@ -1165,6 +1168,9 @@ public class NotificationPanelViewController extends PanelViewController { if (splitShadeChanged) { onSplitShadeEnabledChanged(); } mSplitShadeFullTransitionDistance = mResources.getDimensionPixelSize(R.dimen.split_shade_full_transition_distance); } private void onSplitShadeEnabledChanged() { Loading Loading @@ -3054,7 +3060,16 @@ public class NotificationPanelViewController extends PanelViewController { int maxHeight; if (mQsExpandImmediate || mQsExpanded || mIsExpanding && mQsExpandedWhenExpandingStarted || mPulsing || mSplitShadeEnabled) { if (mSplitShadeEnabled && mBarState == SHADE) { // Max panel height is used to calculate the fraction of the shade expansion. // Traditionally the value is based on the number of notifications. // On split-shade, we want the required distance to be a specific and constant // value, to make sure the expansion motion has the expected speed. // We also only want this on non-lockscreen for now. maxHeight = mSplitShadeFullTransitionDistance; } else { maxHeight = calculatePanelHeightQsExpanded(); } } else { maxHeight = calculatePanelHeightShade(); } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +3 −10 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ import com.android.systemui.dock.DockManager; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.scrim.ScrimView; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.AlarmTimeout; Loading Loading @@ -265,7 +264,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, ConfigurationController configurationController, @Main Executor mainExecutor, ScreenOffAnimationController screenOffAnimationController, PanelExpansionStateManager panelExpansionStateManager, KeyguardUnlockAnimationController keyguardUnlockAnimationController, StatusBarKeyguardViewManager statusBarKeyguardViewManager) { mScrimStateListener = lightBarController::setScrimState; Loading Loading @@ -305,10 +303,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump ScrimController.this.onThemeChanged(); } }); panelExpansionStateManager.addExpansionListener( event -> setRawPanelExpansionFraction(event.getFraction()) ); mColors = new GradientColors(); } Loading Loading @@ -553,12 +547,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump * * The expansion fraction is tied to the scrim opacity. * * See {@link PanelExpansionListener#onPanelExpansionChanged}. * See {@link ScrimShadeTransitionController#onPanelExpansionChanged}. * * @param rawPanelExpansionFraction From 0 to 1 where 0 means collapsed and 1 expanded. */ @VisibleForTesting void setRawPanelExpansionFraction( public void setRawPanelExpansionFraction( @FloatRange(from = 0.0, to = 1.0) float rawPanelExpansionFraction) { if (isNaN(rawPanelExpansionFraction)) { throw new IllegalArgumentException("rawPanelExpansionFraction should not be NaN"); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt 0 → 100644 +78 −0 Original line number Diff line number Diff line package com.android.systemui.statusbar.phone.shade.transition import android.content.res.Configuration import android.content.res.Resources import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.LargeScreenUtils import java.io.PrintWriter import javax.inject.Inject /** Controls the scrim properties during the shade expansion transition on non-lockscreen. */ @SysUISingleton class ScrimShadeTransitionController @Inject constructor( configurationController: ConfigurationController, dumpManager: DumpManager, private val scrimController: ScrimController, @Main private val resources: Resources ) { private var inSplitShade = false private var splitShadeScrimTransitionDistance = 0 private var lastExpansionFraction: Float = 0f private var lastExpansionEvent: PanelExpansionChangeEvent? = null init { updateResources() configurationController.addCallback( object : ConfigurationController.ConfigurationListener { override fun onConfigChanged(newConfig: Configuration?) { updateResources() } }) dumpManager .registerDumpable(ScrimShadeTransitionController::class.java.simpleName, this::dump) } private fun updateResources() { inSplitShade = LargeScreenUtils.shouldUseSplitNotificationShade(resources) splitShadeScrimTransitionDistance = resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) } fun onPanelExpansionChanged(panelExpansionChangeEvent: PanelExpansionChangeEvent) { val expansionFraction = calculateScrimExpansionFraction(panelExpansionChangeEvent) scrimController.setRawPanelExpansionFraction(expansionFraction) lastExpansionFraction = expansionFraction lastExpansionEvent = panelExpansionChangeEvent } private fun calculateScrimExpansionFraction(expansionEvent: PanelExpansionChangeEvent): Float { return if (inSplitShade) { expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance } else { expansionEvent.fraction } } private fun dump(printWriter: PrintWriter, args: Array<String>) { printWriter.println( """ ScrimShadeTransitionController: Resources: inSplitShade: $inSplitShade splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance State: lastExpansionFraction: $lastExpansionFraction lastExpansionEvent: $lastExpansionEvent """.trimIndent() ) } } packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt +3 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ constructor( panelExpansionStateManager: PanelExpansionStateManager, private val context: Context, private val splitShadeOverScrollerFactory: SplitShadeOverScroller.Factory, private val noOpOverScroller: NoOpOverScroller private val noOpOverScroller: NoOpOverScroller, private val scrimShadeTransitionController: ScrimShadeTransitionController ) { lateinit var notificationPanelViewController: NotificationPanelViewController Loading Loading @@ -64,6 +65,7 @@ constructor( private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) { shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount) scrimShadeTransitionController.onPanelExpansionChanged(event) } private fun propertiesInitialized() = Loading Loading
packages/SystemUI/res/values/dimens.xml +9 −0 Original line number Diff line number Diff line Loading @@ -1246,6 +1246,15 @@ <!-- Maximum overshoot for the pulse expansion --> <dimen name="pulse_expansion_max_top_overshoot">32dp</dimen> <!-- The drag amount required for the split shade to fully expand. --> <dimen name="split_shade_full_transition_distance">200dp</dimen> <!-- The drag amount required for the scrim to fully fade in when expanding the split shade. Currently setting it a little longer than the full shade transition distance, to avoid having a state where the screen is fully black without any content showing. --> <dimen name="split_shade_scrim_transition_distance">300dp</dimen> <!-- Alpha in duration in ms for the auth ripple to become fully vislble. If set to 0, it is immediately visible. --> <integer name="auth_ripple_alpha_in_duration">100</integer> Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +16 −1 Original line number Diff line number Diff line Loading @@ -666,6 +666,9 @@ public class NotificationPanelViewController extends PanelViewController { private Optional<NotificationPanelUnfoldAnimationController> mNotificationPanelUnfoldAnimationController; /** The drag distance required to fully expand the split shade. */ private int mSplitShadeFullTransitionDistance; private final NotificationListContainer mNotificationListContainer; private final NotificationStackSizeCalculator mNotificationStackSizeCalculator; Loading Loading @@ -1165,6 +1168,9 @@ public class NotificationPanelViewController extends PanelViewController { if (splitShadeChanged) { onSplitShadeEnabledChanged(); } mSplitShadeFullTransitionDistance = mResources.getDimensionPixelSize(R.dimen.split_shade_full_transition_distance); } private void onSplitShadeEnabledChanged() { Loading Loading @@ -3054,7 +3060,16 @@ public class NotificationPanelViewController extends PanelViewController { int maxHeight; if (mQsExpandImmediate || mQsExpanded || mIsExpanding && mQsExpandedWhenExpandingStarted || mPulsing || mSplitShadeEnabled) { if (mSplitShadeEnabled && mBarState == SHADE) { // Max panel height is used to calculate the fraction of the shade expansion. // Traditionally the value is based on the number of notifications. // On split-shade, we want the required distance to be a specific and constant // value, to make sure the expansion motion has the expected speed. // We also only want this on non-lockscreen for now. maxHeight = mSplitShadeFullTransitionDistance; } else { maxHeight = calculatePanelHeightQsExpanded(); } } else { maxHeight = calculatePanelHeightShade(); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +3 −10 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ import com.android.systemui.dock.DockManager; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.scrim.ScrimView; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.AlarmTimeout; Loading Loading @@ -265,7 +264,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, ConfigurationController configurationController, @Main Executor mainExecutor, ScreenOffAnimationController screenOffAnimationController, PanelExpansionStateManager panelExpansionStateManager, KeyguardUnlockAnimationController keyguardUnlockAnimationController, StatusBarKeyguardViewManager statusBarKeyguardViewManager) { mScrimStateListener = lightBarController::setScrimState; Loading Loading @@ -305,10 +303,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump ScrimController.this.onThemeChanged(); } }); panelExpansionStateManager.addExpansionListener( event -> setRawPanelExpansionFraction(event.getFraction()) ); mColors = new GradientColors(); } Loading Loading @@ -553,12 +547,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump * * The expansion fraction is tied to the scrim opacity. * * See {@link PanelExpansionListener#onPanelExpansionChanged}. * See {@link ScrimShadeTransitionController#onPanelExpansionChanged}. * * @param rawPanelExpansionFraction From 0 to 1 where 0 means collapsed and 1 expanded. */ @VisibleForTesting void setRawPanelExpansionFraction( public void setRawPanelExpansionFraction( @FloatRange(from = 0.0, to = 1.0) float rawPanelExpansionFraction) { if (isNaN(rawPanelExpansionFraction)) { throw new IllegalArgumentException("rawPanelExpansionFraction should not be NaN"); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ScrimShadeTransitionController.kt 0 → 100644 +78 −0 Original line number Diff line number Diff line package com.android.systemui.statusbar.phone.shade.transition import android.content.res.Configuration import android.content.res.Resources import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.statusbar.phone.ScrimController import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.LargeScreenUtils import java.io.PrintWriter import javax.inject.Inject /** Controls the scrim properties during the shade expansion transition on non-lockscreen. */ @SysUISingleton class ScrimShadeTransitionController @Inject constructor( configurationController: ConfigurationController, dumpManager: DumpManager, private val scrimController: ScrimController, @Main private val resources: Resources ) { private var inSplitShade = false private var splitShadeScrimTransitionDistance = 0 private var lastExpansionFraction: Float = 0f private var lastExpansionEvent: PanelExpansionChangeEvent? = null init { updateResources() configurationController.addCallback( object : ConfigurationController.ConfigurationListener { override fun onConfigChanged(newConfig: Configuration?) { updateResources() } }) dumpManager .registerDumpable(ScrimShadeTransitionController::class.java.simpleName, this::dump) } private fun updateResources() { inSplitShade = LargeScreenUtils.shouldUseSplitNotificationShade(resources) splitShadeScrimTransitionDistance = resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance) } fun onPanelExpansionChanged(panelExpansionChangeEvent: PanelExpansionChangeEvent) { val expansionFraction = calculateScrimExpansionFraction(panelExpansionChangeEvent) scrimController.setRawPanelExpansionFraction(expansionFraction) lastExpansionFraction = expansionFraction lastExpansionEvent = panelExpansionChangeEvent } private fun calculateScrimExpansionFraction(expansionEvent: PanelExpansionChangeEvent): Float { return if (inSplitShade) { expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance } else { expansionEvent.fraction } } private fun dump(printWriter: PrintWriter, args: Array<String>) { printWriter.println( """ ScrimShadeTransitionController: Resources: inSplitShade: $inSplitShade splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance State: lastExpansionFraction: $lastExpansionFraction lastExpansionEvent: $lastExpansionEvent """.trimIndent() ) } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt +3 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ constructor( panelExpansionStateManager: PanelExpansionStateManager, private val context: Context, private val splitShadeOverScrollerFactory: SplitShadeOverScroller.Factory, private val noOpOverScroller: NoOpOverScroller private val noOpOverScroller: NoOpOverScroller, private val scrimShadeTransitionController: ScrimShadeTransitionController ) { lateinit var notificationPanelViewController: NotificationPanelViewController Loading Loading @@ -64,6 +65,7 @@ constructor( private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) { shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount) scrimShadeTransitionController.onPanelExpansionChanged(event) } private fun propertiesInitialized() = Loading