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

Commit 6645cb8a authored by Jeff DeCew's avatar Jeff DeCew Committed by Android (Google) Code Review
Browse files

Merge "Ensure stackHeight accounts for pulseHeight and dozeAmount where we...

Merge "Ensure stackHeight accounts for pulseHeight and dozeAmount where we used to use innerHeight." into sc-dev
parents 34ce3656 d277f506
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.HeadsUpManager;
@@ -93,6 +94,10 @@ public interface NotificationsModule {
    StackScrollAlgorithm.SectionProvider bindSectionProvider(
            NotificationSectionsManager impl);

    @Binds
    StackScrollAlgorithm.BypassController bindBypassController(
            KeyguardBypassController impl);

    /** Provides an instance of {@link NotificationEntryManager} */
    @SysUISingleton
    @Provides
+21 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider;

import javax.inject.Inject;
@@ -43,6 +44,7 @@ public class AmbientState {
    private static final boolean NOTIFICATIONS_HAVE_SHADOWS = false;

    private final SectionProvider mSectionProvider;
    private final BypassController mBypassController;
    private int mScrollY;
    private boolean mDimmed;
    private ActivatableNotificationView mActivatedChild;
@@ -152,14 +154,25 @@ public class AmbientState {
        return mStackHeight;
    }

    /**
     * @return Height of notifications panel, with the animation from pulseHeight accounted for.
     */
    // TODO(b/192348384): move this logic to getStackHeight, and remove this and getInnerHeight
    public float getPulseStackHeight() {
        float pulseHeight = Math.min(mPulseHeight, mStackHeight);
        return MathUtils.lerp(mStackHeight, pulseHeight, mDozeAmount);
    }

    /** Tracks the state from AlertingNotificationManager#hasNotifications() */
    private boolean mHasAlertEntries;

    @Inject
    public AmbientState(
            Context context,
            @NonNull SectionProvider sectionProvider) {
            @NonNull SectionProvider sectionProvider,
            @NonNull BypassController bypassController) {
        mSectionProvider = sectionProvider;
        mBypassController = bypassController;
        reload(context);
    }

@@ -297,6 +310,13 @@ public class AmbientState {
        }
    }

    /**
     * Is bypass currently enabled?
     */
    public boolean isBypassEnabled() {
        return mBypassController.isBypassEnabled();
    }

    public float getOverScrollAmount(boolean top) {
        return top ? mOverScrollTopAmount : mOverScrollBottomAmount;
    }
+24 −4
Original line number Diff line number Diff line
@@ -421,10 +421,20 @@ public class StackScrollAlgorithm {
                    // When pulsing (incoming notification on AOD), innerHeight is 0; clamp all
                    // to shelf start, thereby hiding all notifications (except the first one, which
                    // we later unhide in updatePulsingState)
                    final int stackBottom =
                            !ambientState.isShadeExpanded() || ambientState.isDozing()
                    // TODO(b/192348384): merge InnerHeight with StackHeight
                    final int stackBottom;
                    if (ambientState.isBypassEnabled()) {
                        // We want to use the stackHeight when pulse expanding, since the animation
                        // isn't currently optimized if the pulseHeight is continuously changing
                        // Let's improve this when we're merging the heights above
                        stackBottom = ambientState.isPulseExpanding()
                                ? (int) ambientState.getStackHeight()
                                : ambientState.getInnerHeight();
                    } else {
                        stackBottom = !ambientState.isShadeExpanded() || ambientState.isDozing()
                                        ? ambientState.getInnerHeight()
                                    : (int) ambientState.getStackHeight();
                                        : (int) ambientState.getPulseStackHeight();
                    }
                    final int shelfStart =
                            stackBottom - ambientState.getShelf().getIntrinsicHeight();
                    viewState.yTranslation = Math.min(viewState.yTranslation, shelfStart);
@@ -742,4 +752,14 @@ public class StackScrollAlgorithm {
         */
        boolean beginsSection(@NonNull View view, @Nullable View previous);
    }

    /**
     * Interface for telling the StackScrollAlgorithm information about the bypass state
     */
    public interface BypassController {
        /**
         * True if bypass is enabled.  Note that this is always false if face auth is not enabled.
         */
        boolean isBypassEnabled();
    }
}
+5 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.tuner.TunerService
import java.io.FileDescriptor
@@ -35,7 +36,7 @@ import java.io.PrintWriter
import javax.inject.Inject

@SysUISingleton
open class KeyguardBypassController : Dumpable {
open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassController {

    private val mKeyguardStateController: KeyguardStateController
    private val statusBarStateController: StatusBarStateController
@@ -67,6 +68,9 @@ open class KeyguardBypassController : Dumpable {
    lateinit var unlockController: BiometricUnlockController
    var isPulseExpanding = false

    /** delegates to [bypassEnabled] but conforms to [StackScrollAlgorithm.BypassController] */
    override fun isBypassEnabled() = bypassEnabled

    /**
     * If face unlock dismisses the lock screen or keeps user on keyguard for the current user.
     */
+3 −1
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import com.android.systemui.statusbar.notification.collection.legacy.Notificatio
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.FooterView;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.KeyguardBypassEnabledProvider;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
@@ -101,6 +102,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
    @Mock private RemoteInputController mRemoteInputController;
    @Mock private NotificationRoundnessManager mNotificationRoundnessManager;
    @Mock private KeyguardBypassEnabledProvider mKeyguardBypassEnabledProvider;
    @Mock private KeyguardBypassController mBypassController;
    @Mock private NotificationSectionsManager mNotificationSectionsManager;
    @Mock private NotificationSection mNotificationSection;
    @Mock private SysuiStatusBarStateController mStatusBarStateController;
@@ -132,7 +134,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
        when(mRemoteInputManager.getController()).thenReturn(mRemoteInputController);

        // Interact with real instance of AmbientState.
        mAmbientState = new AmbientState(mContext, mNotificationSectionsManager);
        mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController);

        // The actual class under test.  You may need to work with this class directly when
        // testing anonymous class members of mStackScroller, like mMenuEventListener,