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

Commit c003cb87 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Revert suppression of recalculation to fix jump after aod->ls animation

The change I6575f733b17d6c8905150c0a7854d752dd0a5cfe suppressed recalculation of the number of notifications whenever dozeAmount != 0.  However, this meant that from the time the device was locked to the time it finished the screen on animation, the number of notifications that fit on the device was never updated.  In cases where notifications changed while on aod, this meant the number could be completely wrong.  But even without that, this meant that when locking the device and then unlocking, the count would be based on the height of the notifications given their non-keyguard expansion state (i.e. first notification expanded) which meant that we almost always showed too few notifications during the aod->ls transition.

I am unable to reproduce b/229882633 (which that CL was fixing) until I also revert I139d25e2bb57257a18f18f6288f3e18b7a1b72d1 which landed a week later.

Bug: 229882633
Fixes: 232079794
Test: atest NotificationPanelViewControllerTest
Test: numerous failed attempts to reproduce b/229882633#comment2
Test: unlock; screen off (to aod); screen on (to ls); observe no jumps
Test: post notify notifications with "no text" ; slow animations; lock; aod -> ls; post notifications via shell during animation; observe no jumps during or at end of animation
Change-Id: Ib3a3c6377a71cc4c1a1b06eb652237a5493a56d0
parent 0b2c39c7
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ import kotlin.properties.Delegates.notNull


private const val TAG = "NotifStackSizeCalc"
private const val TAG = "NotifStackSizeCalc"
private val DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG)
private val DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG)
private val SPEW = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE)


/** Calculates number of notifications to display and the height of the notification stack. */
/** Calculates number of notifications to display and the height of the notification stack. */
@SysUISingleton
@SysUISingleton
@@ -87,9 +88,10 @@ constructor(
        // Could be < 0 if the space available is less than the shelf size. Returns 0 in this case.
        // Could be < 0 if the space available is less than the shelf size. Returns 0 in this case.
        maxNotifications = max(0, maxNotifications)
        maxNotifications = max(0, maxNotifications)
        log {
        log {
            val sequence = if (SPEW) " stackHeightSequence=${stackHeightSequence.toList()}" else ""
            "computeMaxKeyguardNotifications(" +
            "computeMaxKeyguardNotifications(" +
                "availableSpace=$totalAvailableSpace" +
                "availableSpace=$totalAvailableSpace" +
                " shelfHeight=$shelfIntrinsicHeight) -> $maxNotifications"
                " shelfHeight=$shelfIntrinsicHeight) -> $maxNotifications$sequence"
        }
        }
        return maxNotifications
        return maxNotifications
    }
    }
+24 −2
Original line number Original line Diff line number Diff line
@@ -192,6 +192,7 @@ import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.statusbar.window.StatusBarWindowStateController;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.util.Compile;
import com.android.systemui.util.LargeScreenUtils;
import com.android.systemui.util.LargeScreenUtils;
import com.android.systemui.util.ListenerSet;
import com.android.systemui.util.ListenerSet;
import com.android.systemui.util.Utils;
import com.android.systemui.util.Utils;
@@ -216,7 +217,8 @@ import javax.inject.Provider;
@CentralSurfacesComponent.CentralSurfacesScope
@CentralSurfacesComponent.CentralSurfacesScope
public class NotificationPanelViewController extends PanelViewController {
public class NotificationPanelViewController extends PanelViewController {


    private static final boolean DEBUG_LOGCAT = Log.isLoggable(TAG, Log.DEBUG);
    private static final boolean DEBUG_LOGCAT = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG);
    private static final boolean SPEW_LOGCAT = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE);
    private static final boolean DEBUG_DRAWABLE = false;
    private static final boolean DEBUG_DRAWABLE = false;


    /**
    /**
@@ -1294,6 +1296,8 @@ public class NotificationPanelViewController extends PanelViewController {
    private void updateMaxDisplayedNotifications(boolean recompute) {
    private void updateMaxDisplayedNotifications(boolean recompute) {
        if (recompute) {
        if (recompute) {
            mMaxAllowedKeyguardNotifications = Math.max(computeMaxKeyguardNotifications(), 1);
            mMaxAllowedKeyguardNotifications = Math.max(computeMaxKeyguardNotifications(), 1);
        } else {
            if (SPEW_LOGCAT) Log.d(TAG, "Skipping computeMaxKeyguardNotifications() by request");
        }
        }


        if (mKeyguardShowing && !mKeyguardBypassController.getBypassEnabled()) {
        if (mKeyguardShowing && !mKeyguardBypassController.getBypassEnabled()) {
@@ -1546,6 +1550,19 @@ public class NotificationPanelViewController extends PanelViewController {
                mNotificationStackScrollLayoutController.getHeight()
                mNotificationStackScrollLayoutController.getHeight()
                        - staticTopPadding
                        - staticTopPadding
                        - bottomPadding;
                        - bottomPadding;

        if (SPEW_LOGCAT) {
            Log.d(TAG, "getSpaceForLockscreenNotifications()"
                    + " availableSpace=" + availableSpace
                    + " NSSL.height=" + mNotificationStackScrollLayoutController.getHeight()
                    + " NSSL.top=" + mNotificationStackScrollLayoutController.getTop()
                    + " staticTopPadding=" + staticTopPadding
                    + " bottomPadding=" + bottomPadding
                    + " lockIconPadding=" + lockIconPadding
                    + " mIndicationBottomPadding=" + mIndicationBottomPadding
                    + " mAmbientIndicationBottomPadding=" + mAmbientIndicationBottomPadding
            );
        }
        return availableSpace;
        return availableSpace;
    }
    }


@@ -1554,7 +1571,12 @@ public class NotificationPanelViewController extends PanelViewController {
     */
     */
    @VisibleForTesting
    @VisibleForTesting
    int computeMaxKeyguardNotifications() {
    int computeMaxKeyguardNotifications() {
        if (mAmbientState.getFractionToShade() > 0 || mAmbientState.getDozeAmount() > 0) {
        if (mAmbientState.getFractionToShade() > 0) {
            if (SPEW_LOGCAT) {
                Log.v(TAG, "Internally skipping computeMaxKeyguardNotifications()"
                        + " fractionToShade=" + mAmbientState.getFractionToShade()
                );
            }
            return mMaxAllowedKeyguardNotifications;
            return mMaxAllowedKeyguardNotifications;
        }
        }


+0 −11
Original line number Original line Diff line number Diff line
@@ -577,20 +577,9 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
                .isEqualTo(-1);
                .isEqualTo(-1);
    }
    }


    @Test
    public void computeMaxKeyguardNotifications_dozeAmountNotZero_returnsExistingMax() {
        when(mAmbientState.getDozeAmount()).thenReturn(0.5f);
        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);

        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value
        assertThat(mNotificationPanelViewController.computeMaxKeyguardNotifications())
                .isEqualTo(-1);
    }

    @Test
    @Test
    public void computeMaxKeyguardNotifications_noTransition_updatesMax() {
    public void computeMaxKeyguardNotifications_noTransition_updatesMax() {
        when(mAmbientState.getFractionToShade()).thenReturn(0f);
        when(mAmbientState.getFractionToShade()).thenReturn(0f);
        when(mAmbientState.getDozeAmount()).thenReturn(0f);
        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);
        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);


        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value
        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value