Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c38736cf authored by Christian Göllner's avatar Christian Göllner Committed by Automerger Merge Worker
Browse files

Merge "[Motion] Split-shade expansion: shorten the required drag down amount...

Merge "[Motion] Split-shade expansion: shorten the required drag down amount to fully expand shade" into tm-qpr-dev am: 1be8f40a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18437163



Change-Id: Id4bbe1d0d9e80e0c7c73790c317f219a759d78ab
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 9e880e1b 1be8f40a
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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>
+16 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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() {
@@ -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();
        }
+3 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -305,10 +303,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
                ScrimController.this.onThemeChanged();
            }
        });
        panelExpansionStateManager.addExpansionListener(
                event -> setRawPanelExpansionFraction(event.getFraction())
        );

        mColors = new GradientColors();
    }

@@ -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");
+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()
        )
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -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
@@ -64,6 +65,7 @@ constructor(

    private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) {
        shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount)
        scrimShadeTransitionController.onPanelExpansionChanged(event)
    }

    private fun propertiesInitialized() =
Loading