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

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

Merge "Split shade expansion: adjust alpha interpolation to match motion...

Merge "Split shade expansion: adjust alpha interpolation to match motion specs" into tm-qpr-dev am: 186e7cbd

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



Change-Id: Id381a1c73cc70df5cb86211133e12dba152f4ca0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents b71453f4 186e7cbd
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -70,6 +70,8 @@ import com.android.systemui.security.data.repository.SecurityRepositoryModule;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.dagger.MultiUserUtilsModule;
import com.android.systemui.settings.dagger.MultiUserUtilsModule;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl;
import com.android.systemui.smartspace.dagger.SmartspaceModule;
import com.android.systemui.smartspace.dagger.SmartspaceModule;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
@@ -306,4 +308,8 @@ public abstract class SystemUIModule {


    @Binds
    @Binds
    abstract FgsManagerController bindFgsManagerController(FgsManagerControllerImpl impl);
    abstract FgsManagerController bindFgsManagerController(FgsManagerControllerImpl impl);

    @Binds
    abstract LargeScreenShadeInterpolator largeScreensShadeInterpolator(
            LargeScreenShadeInterpolatorImpl impl);
}
}
+5 −0
Original line number Original line Diff line number Diff line
@@ -665,4 +665,9 @@ object Flags {
    // TODO(b/259428678): Tracking Bug
    // TODO(b/259428678): Tracking Bug
    @JvmField
    @JvmField
    val KEYBOARD_BACKLIGHT_INDICATOR = unreleasedFlag(2601, "keyboard_backlight_indicator")
    val KEYBOARD_BACKLIGHT_INDICATOR = unreleasedFlag(2601, "keyboard_backlight_indicator")

    // TODO(b/272036292): Tracking Bug
    @JvmField
    val LARGE_SHADE_GRANULAR_ALPHA_INTERPOLATION =
            unreleasedFlag(2602, "large_shade_granular_alpha_interpolation")
}
}
+19 −10
Original line number Original line Diff line number Diff line
@@ -51,6 +51,8 @@ import com.android.systemui.animation.Interpolators;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.compose.ComposeFacade;
import com.android.systemui.compose.ComposeFacade;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.media.controls.ui.MediaHost;
import com.android.systemui.media.controls.ui.MediaHost;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QSContainerController;
import com.android.systemui.plugins.qs.QSContainerController;
@@ -60,6 +62,7 @@ import com.android.systemui.qs.dagger.QSFragmentComponent;
import com.android.systemui.qs.footer.ui.binder.FooterActionsViewBinder;
import com.android.systemui.qs.footer.ui.binder.FooterActionsViewBinder;
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel;
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
@@ -112,6 +115,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    private final MediaHost mQqsMediaHost;
    private final MediaHost mQqsMediaHost;
    private final QSFragmentComponent.Factory mQsComponentFactory;
    private final QSFragmentComponent.Factory mQsComponentFactory;
    private final QSFragmentDisableFlagsLogger mQsFragmentDisableFlagsLogger;
    private final QSFragmentDisableFlagsLogger mQsFragmentDisableFlagsLogger;
    private final LargeScreenShadeInterpolator mLargeScreenShadeInterpolator;
    private final FeatureFlags mFeatureFlags;
    private final QSLogger mLogger;
    private final QSLogger mLogger;
    private final FooterActionsController mFooterActionsController;
    private final FooterActionsController mFooterActionsController;
    private final FooterActionsViewModel.Factory mFooterActionsViewModelFactory;
    private final FooterActionsViewModel.Factory mFooterActionsViewModelFactory;
@@ -159,12 +164,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    // visible;
    // visible;
    private boolean mQsVisible;
    private boolean mQsVisible;


    /**
    private boolean mIsSmallScreen;
     * Whether the notification panel uses the full width of the screen.
     *
     * Usually {@code true} on small screens, and {@code false} on large screens.
     */
    private boolean mIsNotificationPanelFullWidth;


    @Inject
    @Inject
    public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
    public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
@@ -176,13 +176,17 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
            QSFragmentDisableFlagsLogger qsFragmentDisableFlagsLogger,
            QSFragmentDisableFlagsLogger qsFragmentDisableFlagsLogger,
            DumpManager dumpManager, QSLogger qsLogger,
            DumpManager dumpManager, QSLogger qsLogger,
            FooterActionsController footerActionsController,
            FooterActionsController footerActionsController,
            FooterActionsViewModel.Factory footerActionsViewModelFactory) {
            FooterActionsViewModel.Factory footerActionsViewModelFactory,
            LargeScreenShadeInterpolator largeScreenShadeInterpolator,
            FeatureFlags featureFlags) {
        mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
        mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
        mQsMediaHost = qsMediaHost;
        mQsMediaHost = qsMediaHost;
        mQqsMediaHost = qqsMediaHost;
        mQqsMediaHost = qqsMediaHost;
        mQsComponentFactory = qsComponentFactory;
        mQsComponentFactory = qsComponentFactory;
        mQsFragmentDisableFlagsLogger = qsFragmentDisableFlagsLogger;
        mQsFragmentDisableFlagsLogger = qsFragmentDisableFlagsLogger;
        mLogger = qsLogger;
        mLogger = qsLogger;
        mLargeScreenShadeInterpolator = largeScreenShadeInterpolator;
        mFeatureFlags = featureFlags;
        commandQueue.observe(getLifecycle(), this);
        commandQueue.observe(getLifecycle(), this);
        mBypassController = keyguardBypassController;
        mBypassController = keyguardBypassController;
        mStatusBarStateController = statusBarStateController;
        mStatusBarStateController = statusBarStateController;
@@ -607,7 +611,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca


    @Override
    @Override
    public void setIsNotificationPanelFullWidth(boolean isFullWidth) {
    public void setIsNotificationPanelFullWidth(boolean isFullWidth) {
        mIsNotificationPanelFullWidth = isFullWidth;
        mIsSmallScreen = isFullWidth;
    }
    }


    @Override
    @Override
@@ -710,7 +714,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    }
    }


    private float calculateAlphaProgress(float panelExpansionFraction) {
    private float calculateAlphaProgress(float panelExpansionFraction) {
        if (mIsNotificationPanelFullWidth) {
        if (mIsSmallScreen) {
            // Small screens. QS alpha is not animated.
            // Small screens. QS alpha is not animated.
            return 1;
            return 1;
        }
        }
@@ -745,7 +749,12 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
            // Alpha progress should be linear on lockscreen shade expansion.
            // Alpha progress should be linear on lockscreen shade expansion.
            return progress;
            return progress;
        }
        }
        if (mIsSmallScreen || !mFeatureFlags.isEnabled(
                Flags.LARGE_SHADE_GRANULAR_ALPHA_INTERPOLATION)) {
            return ShadeInterpolation.getContentAlpha(progress);
            return ShadeInterpolation.getContentAlpha(progress);
        } else {
            return mLargeScreenShadeInterpolator.getQsAlpha(progress);
        }
    }
    }


    @VisibleForTesting
    @VisibleForTesting
+4 −1
Original line number Original line Diff line number Diff line
@@ -2861,7 +2861,10 @@ public final class NotificationPanelViewController implements Dumpable {
        mHeadsUpStartHeight = startHeight;
        mHeadsUpStartHeight = startHeight;
        float scrimMinFraction;
        float scrimMinFraction;
        if (mSplitShadeEnabled) {
        if (mSplitShadeEnabled) {
            boolean highHun = mHeadsUpStartHeight * 2.5 > mSplitShadeScrimTransitionDistance;
            boolean highHun = mHeadsUpStartHeight * 2.5
                    >
                    (mFeatureFlags.isEnabled(Flags.LARGE_SHADE_GRANULAR_ALPHA_INTERPOLATION)
                    ? mSplitShadeFullTransitionDistance : mSplitShadeScrimTransitionDistance);
            // if HUN height is higher than 40% of predefined transition distance, it means HUN
            // if HUN height is higher than 40% of predefined transition distance, it means HUN
            // is too high for regular transition. In that case we need to calculate transition
            // is too high for regular transition. In that case we need to calculate transition
            // distance - here we take scrim transition distance as equal to shade transition
            // distance - here we take scrim transition distance as equal to shade transition
+46 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.shade.transition

import android.util.MathUtils
import com.android.systemui.animation.ShadeInterpolation
import javax.inject.Inject

/** Interpolator responsible for the shade when in portrait on a large screen. */
internal class LargeScreenPortraitShadeInterpolator @Inject internal constructor() :
    LargeScreenShadeInterpolator {

    override fun getBehindScrimAlpha(fraction: Float): Float {
        return MathUtils.constrainedMap(0f, 1f, 0f, 0.3f, fraction)
    }

    override fun getNotificationScrimAlpha(fraction: Float): Float {
        return MathUtils.constrainedMap(0f, 1f, 0.3f, 0.75f, fraction)
    }

    override fun getNotificationContentAlpha(fraction: Float): Float {
        return ShadeInterpolation.getContentAlpha(fraction)
    }

    override fun getNotificationFooterAlpha(fraction: Float): Float {
        return ShadeInterpolation.getContentAlpha(fraction)
    }

    override fun getQsAlpha(fraction: Float): Float {
        return ShadeInterpolation.getContentAlpha(fraction)
    }
}
Loading