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

Commit 7a401652 authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz
Browse files

Show FSI Hun on lock screen in fully expanded shade

FSI HUN does not show up when shade is fully expanded on lockscreen. With this CL, we extend FSI Hun behavior for keyguard state.

To do that:
  - We need to prevent setting alpha of NSSL to 0. `updateNotificationTranslucency`
  - We need to set the initial position of  NotificationShelf to the end of the Stack, to fix unnecessary shelf animation issue.
   We don't need to position it in the middle of the screen and it's position is going to be managed by SSA after.
Bug: 277939036
Fixes: 271805874
Test: Manual. Incoming HUN is pinned to top of stack while notifications are scrolled (no regressions)
atest NotificationPanelViewControllerTest
atest NotificationShelfTest
atest StackScrollAlgorithmTest.kt

Change-Id: I35fd450aea9cdb863d04049cf60e6f8e94df7f4c
parent 5dc4f71d
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -114,6 +114,8 @@ import com.android.systemui.R;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.animation.LaunchAnimator;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.classifier.Classifier;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.dagger.qualifiers.DisplayId;
@@ -126,12 +128,10 @@ import com.android.systemui.flags.Flags;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.KeyguardViewConfigurator;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardBottomAreaInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.keyguard.shared.model.TransitionState;
import com.android.systemui.keyguard.shared.model.TransitionStep;
import com.android.systemui.keyguard.shared.model.WakefulnessModel;
@@ -224,8 +224,6 @@ import com.android.systemui.util.Utils;
import com.android.systemui.util.time.SystemClock;
import com.android.wm.shell.animation.FlingAnimationUtils;

import kotlin.Unit;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
@@ -236,6 +234,8 @@ import java.util.function.Consumer;
import javax.inject.Inject;
import javax.inject.Provider;

import kotlin.Unit;

import kotlinx.coroutines.CoroutineDispatcher;

@CentralSurfacesComponent.CentralSurfacesScope
@@ -2475,7 +2475,8 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
            alpha = getFadeoutAlpha();
        }
        if (mBarState == KEYGUARD && !mHintAnimationRunning
                && !mKeyguardBypassController.getBypassEnabled()) {
                && !mKeyguardBypassController.getBypassEnabled()
                && !mQsController.getFullyExpanded()) {
            alpha *= mClockPositionResult.clockAlpha;
        }
        mNotificationStackScrollLayoutController.setAlpha(alpha);
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ public class LegacyNotificationShelfControllerImpl implements NotificationShelfC
        mActivatableNotificationViewController = activatableNotificationViewController;
        mKeyguardBypassController = keyguardBypassController;
        mStatusBarStateController = statusBarStateController;
        mView.setSensitiveRevealAnimEndabled(featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM));
        mView.setSensitiveRevealAnimEnabled(featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM));
        mOnAttachStateChangeListener = new View.OnAttachStateChangeListener() {
            @Override
            public void onViewAttachedToWindow(View v) {
+15 −15
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ public class NotificationShelf extends ActivatableNotificationView implements St
    private float mCornerAnimationDistance;
    private NotificationShelfController mController;
    private float mActualWidth = -1;
    private boolean mSensitiveRevealAnimEndabled;
    private boolean mSensitiveRevealAnimEnabled;
    private boolean mShelfRefactorFlagEnabled;
    private boolean mCanModifyColorOfNotifications;
    private boolean mCanInteract;
@@ -261,9 +261,14 @@ public class NotificationShelf extends ActivatableNotificationView implements St
                    viewState.hidden = true;
                }
            }
        } else {
            viewState.hidden = true;
            viewState.location = ExpandableViewState.LOCATION_GONE;
            viewState.hasItemsInStableShelf = false;
        }

        final float stackEnd = ambientState.getStackY() + ambientState.getStackHeight();
            if (mSensitiveRevealAnimEndabled && viewState.hidden) {
        if (mSensitiveRevealAnimEnabled && viewState.hidden) {
            // if the shelf is hidden, position it at the end of the stack (plus the clip
            // padding), such that when it appears animated, it will smoothly move in from the
            // bottom, without jump cutting any notifications
@@ -271,11 +276,6 @@ public class NotificationShelf extends ActivatableNotificationView implements St
        } else {
            viewState.setYTranslation(stackEnd - viewState.height);
        }
        } else {
            viewState.hidden = true;
            viewState.location = ExpandableViewState.LOCATION_GONE;
            viewState.hasItemsInStableShelf = false;
        }
    }

    private int getSpeedBumpIndex() {
@@ -413,7 +413,7 @@ public class NotificationShelf extends ActivatableNotificationView implements St
                    expandingAnimated, isLastChild, shelfClipStart);

            // TODO(b/172289889) scale mPaddingBetweenElements with expansion amount
            if ((!mSensitiveRevealAnimEndabled && ((isLastChild && !child.isInShelf())
            if ((!mSensitiveRevealAnimEnabled && ((isLastChild && !child.isInShelf())
                    || backgroundForceHidden)) || aboveShelf) {
                notificationClipEnd = shelfStart + getIntrinsicHeight();
            } else {
@@ -462,7 +462,7 @@ public class NotificationShelf extends ActivatableNotificationView implements St
                // if the shelf is visible, but if the shelf is hidden, it causes incorrect curling.
                // notificationClipEnd handles the discrepancy between a visible and hidden shelf,
                // so we use that when on the keyguard (and while animating away) to reduce curling.
                final float keyguardSafeShelfStart = !mSensitiveRevealAnimEndabled
                final float keyguardSafeShelfStart = !mSensitiveRevealAnimEnabled
                        && mAmbientState.isOnKeyguard() ? notificationClipEnd : shelfStart;
                updateCornerRoundnessOnScroll(anv, viewStart, keyguardSafeShelfStart);
            }
@@ -1064,8 +1064,8 @@ public class NotificationShelf extends ActivatableNotificationView implements St
     * Set whether the sensitive reveal animation feature flag is enabled
     * @param enabled true if enabled
     */
    public void setSensitiveRevealAnimEndabled(boolean enabled) {
        mSensitiveRevealAnimEndabled = enabled;
    public void setSensitiveRevealAnimEnabled(boolean enabled) {
        mSensitiveRevealAnimEnabled = enabled;
    }

    public void setRefactorFlagEnabled(boolean enabled) {
+1 −1
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ object NotificationShelfViewBinder {
        ActivatableNotificationViewBinder.bind(viewModel, shelf, falsingManager)
        shelf.apply {
            setRefactorFlagEnabled(true)
            setSensitiveRevealAnimEndabled(featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM))
            setSensitiveRevealAnimEnabled(featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM))
            // TODO(278765923): Replace with eventual NotificationIconContainerViewBinder#bind()
            notificationIconAreaController.setShelfIcons(shelfIcons)
            repeatWhenAttached {
+3 −0
Original line number Diff line number Diff line
@@ -5051,6 +5051,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
            println(pw, "intrinsicPadding", mIntrinsicPadding);
            println(pw, "topPadding", mTopPadding);
            println(pw, "bottomPadding", mBottomPadding);
            println(pw, "translationX", getTranslationX());
            println(pw, "translationY", getTranslationY());
            println(pw, "translationZ", getTranslationZ());
            mNotificationStackSizeCalculator.dump(pw, args);
        });
        pw.println();
Loading