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

Commit ebf42346 authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed a bug where an incoming call wasn't launching

When the lockscreen isn't showing, but aod is, an incomming
call would not launch its fullscreen intent but show up in
AOD1. In addition was the display completely messed up and
overlapping other parts of the AOD screen.

Test: receive call while in AOD but not locked
Change-Id: Icc3e989167e72289ddcd0a62064526db9004cdc2
Fixes: 62402251
parent b02cbdee
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -298,7 +298,8 @@ public class NotificationShelf extends ActivatableNotificationView implements
    private void updateNotificationClipHeight(ExpandableNotificationRow row,
            float notificationClipEnd) {
        float viewEnd = row.getTranslationY() + row.getActualHeight();
        boolean isPinned = row.isPinned() || row.isHeadsUpAnimatingAway();
        boolean isPinned = (row.isPinned() || row.isHeadsUpAnimatingAway())
                && !mAmbientState.isDozingAndNotPulsing(row);
        if (viewEnd > notificationClipEnd
                && (mAmbientState.isShadeExpanded() || !isPinned)) {
            int clipBottomAmount = (int) (viewEnd - notificationClipEnd);
@@ -450,7 +451,7 @@ public class NotificationShelf extends ActivatableNotificationView implements
                ? fullTransitionAmount
                : transitionAmount;
        iconState.clampedAppearAmount = clampedAmount;
        float contentTransformationAmount = !row.isAboveShelf()
        float contentTransformationAmount = !mAmbientState.isAboveShelf(row)
                    && (isLastChild || iconState.translateContent)
                ? iconTransitionAmount
                : 0.0f;
@@ -519,7 +520,7 @@ public class NotificationShelf extends ActivatableNotificationView implements
                iconState.scaleY = 1.0f;
                iconState.hidden = false;
            }
            if (row.isAboveShelf() || (!row.isInShelf() && (isLastChild && row.areGutsExposed()
            if (mAmbientState.isAboveShelf(row) || (!row.isInShelf() && (isLastChild && row.areGutsExposed()
                    || row.getTranslationZ() > mAmbientState.getBaseZHeight()))) {
                iconState.hidden = true;
            }
+3 −0
Original line number Diff line number Diff line
@@ -7233,6 +7233,9 @@ public class StatusBar extends SystemUI implements DemoMode,
            if (mAccessibilityManager.isTouchExplorationEnabled()) {
                if (DEBUG) Log.d(TAG, "No peeking: accessible fullscreen: " + sbn.getKey());
                return false;
            } else if (mDozing) {
                // We never want heads up when we are dozing.
                return false;
            } else {
                // we only allow head-up on the lockscreen if it doesn't have a fullscreen intent
                return !mStatusBarKeyguardViewManager.isShowing()
+50 −4
Original line number Diff line number Diff line
@@ -21,11 +21,15 @@ import android.view.View;

import com.android.systemui.R;
import com.android.systemui.statusbar.ActivatableNotificationView;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.NotificationData;
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.policy.HeadsUpManager;

import java.util.ArrayList;
import java.util.Collection;

/**
 * A global state to track all input states for the algorithm.
@@ -59,7 +63,7 @@ public class AmbientState {
    private boolean mPanelTracking;
    private boolean mExpansionChanging;
    private boolean mPanelFullWidth;
    private boolean mHasPulsingNotifications;
    private Collection<HeadsUpManager.HeadsUpEntry> mPulsing;
    private boolean mUnlockHintRunning;
    private boolean mQsCustomizerShowing;
    private int mIntrinsicPadding;
@@ -290,11 +294,23 @@ public class AmbientState {
    }

    public boolean hasPulsingNotifications() {
        return mHasPulsingNotifications;
        return mPulsing != null;
    }

    public void setHasPulsingNotifications(boolean hasPulsing) {
        mHasPulsingNotifications = hasPulsing;
    public void setPulsing(Collection<HeadsUpManager.HeadsUpEntry> hasPulsing) {
        mPulsing = hasPulsing;
    }

    public boolean isPulsing(NotificationData.Entry entry) {
        if (mPulsing == null) {
            return false;
        }
        for (HeadsUpManager.HeadsUpEntry e : mPulsing) {
            if (e.entry == entry) {
                return true;
            }
        }
        return false;
    }

    public boolean isPanelTracking() {
@@ -332,4 +348,34 @@ public class AmbientState {
    public int getIntrinsicPadding() {
        return mIntrinsicPadding;
    }

    /**
     * Similar to the normal is above shelf logic but doesn't allow it to be above in AOD1.
     *
     * @param expandableView the view to check
     */
    public boolean isAboveShelf(ExpandableView expandableView) {
        if (!(expandableView instanceof ExpandableNotificationRow)) {
            return expandableView.isAboveShelf();
        }
        ExpandableNotificationRow row = (ExpandableNotificationRow) expandableView;
        return row.isAboveShelf() && !isDozingAndNotPulsing(row);
    }

    /**
     * @return whether a view is dozing and not pulsing right now
     */
    public boolean isDozingAndNotPulsing(ExpandableView view) {
        if (view instanceof ExpandableNotificationRow) {
            return isDozingAndNotPulsing((ExpandableNotificationRow) view);
        }
        return false;
    }

    /**
     * @return whether a row is dozing and not pulsing right now
     */
    public boolean isDozingAndNotPulsing(ExpandableNotificationRow row) {
        return isDark() && !isPulsing(row.getEntry());
    }
}
+5 −9
Original line number Diff line number Diff line
@@ -805,7 +805,7 @@ public class NotificationStackScrollLayout extends ViewGroup
     */
    private float getAppearStartPosition() {
        if (mTrackingHeadsUp && mFirstVisibleBackgroundChild != null) {
            if (mFirstVisibleBackgroundChild.isAboveShelf()) {
            if (mAmbientState.isAboveShelf(mFirstVisibleBackgroundChild)) {
                // If we ever expanded beyond the first notification, it's allowed to merge into
                // the shelf
                return mFirstVisibleBackgroundChild.getPinnedHeadsUpHeight();
@@ -823,7 +823,8 @@ public class NotificationStackScrollLayout extends ViewGroup
        int notGoneChildCount = getNotGoneChildCount();
        if (mEmptyShadeView.getVisibility() == GONE && notGoneChildCount != 0) {
            int minNotificationsForShelf = 1;
            if (mTrackingHeadsUp || mHeadsUpManager.hasPinnedHeadsUp()) {
            if (mTrackingHeadsUp
                    || (mHeadsUpManager.hasPinnedHeadsUp() && !mAmbientState.isDark())) {
                appearPosition = mHeadsUpManager.getTopHeadsUpPinnedHeight();
                minNotificationsForShelf = 2;
            } else {
@@ -2008,12 +2009,7 @@ public class NotificationStackScrollLayout extends ViewGroup
    }

    private boolean isPulsing(NotificationData.Entry entry) {
        for (HeadsUpManager.HeadsUpEntry e : mPulsing) {
            if (e.entry == entry) {
                return true;
            }
        }
        return false;
        return mAmbientState.isPulsing(entry);
    }

    public boolean hasPulsingNotifications() {
@@ -4148,7 +4144,7 @@ public class NotificationStackScrollLayout extends ViewGroup
            return;
        }
        mPulsing = pulsing;
        mAmbientState.setHasPulsingNotifications(hasPulsingNotifications());
        mAmbientState.setPulsing(pulsing);
        updateNotificationAnimationStates();
        updateContentHeight();
        notifyHeightChangeListener(mShelf);
+3 −3
Original line number Diff line number Diff line
@@ -413,7 +413,7 @@ public class StackScrollAlgorithm {
            if (mIsExpanded) {
                // Ensure that the heads up is always visible even when scrolled off
                clampHunToTop(ambientState, row, childState);
                if (i == 0 && row.isAboveShelf()) {
                if (i == 0 && ambientState.isAboveShelf(row)) {
                    // the first hun can't get off screen.
                    clampHunToMaxTranslation(ambientState, row, childState);
                    childState.hidden = false;
@@ -515,7 +515,7 @@ public class StackScrollAlgorithm {
        ExpandableViewState childViewState = resultState.getViewStateForView(child);
        int zDistanceBetweenElements = ambientState.getZDistanceBetweenElements();
        float baseZ = ambientState.getBaseZHeight();
        if (child.mustStayOnScreen()
        if (child.mustStayOnScreen() && !ambientState.isDozingAndNotPulsing(child)
                && childViewState.yTranslation < ambientState.getTopPadding()
                + ambientState.getStackTranslation()) {
            if (childrenOnTop != 0.0f) {
@@ -527,7 +527,7 @@ public class StackScrollAlgorithm {
            }
            childViewState.zTranslation = baseZ
                    + childrenOnTop * zDistanceBetweenElements;
        } else if (i == 0 && child.isAboveShelf()) {
        } else if (i == 0 && ambientState.isAboveShelf(child)) {
            // In case this is a new view that has never been measured before, we don't want to
            // elevate if we are currently expanded more then the notification
            int shelfHeight = ambientState.getShelf().getIntrinsicHeight();