Adjusting the notification header appearance on the lock screen
Now the notification looks like a regular heads up and can
transform through the unlock without any change.
Bug: 130327302
Test: add hun on lockscreen, pull down
Change-Id: Id59188130eb5b01376c868874c24afdef9a694fa
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index e97055f0..2e2666ec 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -94,6 +94,10 @@
<item type="id" name="top_roundess_animator_start_tag"/>
<item type="id" name="top_roundess_animator_end_tag"/>
+ <item type="id" name="keyguard_hun_animator_tag"/>
+ <item type="id" name="keyguard_hun_animator_start_tag"/>
+ <item type="id" name="keyguard_hun_animator_end_tag"/>
+
<!-- Accessibility actions for the notification menu -->
<item type="id" name="action_snooze_undo"/>
<item type="id" name="action_snooze_shorter"/>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
index 3a7e2a1..986486a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
@@ -36,6 +36,7 @@
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
+import com.android.systemui.statusbar.notification.stack.NotificationRoundnessManager
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
import com.android.systemui.statusbar.phone.KeyguardBypassController
@@ -54,7 +55,8 @@
constructor(context: Context,
private val wakeUpCoordinator: NotificationWakeUpCoordinator,
private val bypassController: KeyguardBypassController,
- private val headsUpManager: HeadsUpManagerPhone) : Gefingerpoken {
+ private val headsUpManager: HeadsUpManagerPhone,
+ private val roundnessManager: NotificationRoundnessManager) : Gefingerpoken {
companion object {
private val RUBBERBAND_FACTOR_STATIC = 0.25f
private val SPRING_BACK_ANIMATION_LENGTH_MS = 375
@@ -71,11 +73,19 @@
field = value
bypassController.isPulseExpanding = value
if (changed) {
- headsUpManager.unpinAll(true /* userUnPinned */)
- if (!value && !leavingLockscreen) {
- bypassController.maybePerformPendingUnlock()
- pulseExpandAbortListener?.run()
+ if (value) {
+ val topEntry = headsUpManager.topEntry
+ topEntry?.let {
+ roundnessManager.setTrackingHeadsUp(it.row)
+ }
+ } else {
+ roundnessManager.setTrackingHeadsUp(null)
+ if (!leavingLockscreen) {
+ bypassController.maybePerformPendingUnlock()
+ pulseExpandAbortListener?.run()
+ }
}
+ headsUpManager.unpinAll(true /* userUnPinned */)
}
}
var leavingLockscreen: Boolean = false
@@ -237,7 +247,7 @@
}
private fun captureStartingChild(x: Float, y: Float) {
- if (mStartingChild == null) {
+ if (mStartingChild == null && !bypassController.bypassEnabled) {
mStartingChild = findView(x, y)
if (mStartingChild != null) {
setUserLocked(mStartingChild!!, true)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java
index aacb22d..fe56552 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java
@@ -115,7 +115,20 @@
view.setTag(animationEndTag, newEndValue);
}
- public static <T extends View> boolean isAnimating(T view, AnimatableProperty property) {
- return view.getTag(property.getAnimatorTag()) != null;
+ public static <T extends View> void applyImmediately(T view, AnimatableProperty property,
+ float newValue) {
+ cancelAnimation(view, property);
+ property.getProperty().set(view, newValue);
+ }
+
+ public static void cancelAnimation(View view, AnimatableProperty property) {
+ ValueAnimator animator = (ValueAnimator) view.getTag(property.getAnimatorTag());
+ if (animator != null) {
+ animator.cancel();
+ }
+ }
+
+ public static boolean isAnimating(View view, AnimatableProperty property) {
+ return view.getTag(property.getAnimatorTag()) != null;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index 6d9d5ec..dca152f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -1040,6 +1040,10 @@
return false;
}
+ public int getHeadsUpHeightWithoutHeader() {
+ return getHeight();
+ }
+
public interface OnActivatedListener {
void onActivated(ActivatableNotificationView view);
void onActivationReset(ActivatableNotificationView view);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 0ca8814..ae534d2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -2637,7 +2637,7 @@
private int getHeadsUpHeight() {
- return getShowingLayout().getHeadsUpHeight();
+ return getShowingLayout().getHeadsUpHeight(false /* forceNoHeader */);
}
public boolean areGutsExposed() {
@@ -2775,6 +2775,17 @@
}
@Override
+ public int getHeadsUpHeightWithoutHeader() {
+ if (!canShowHeadsUp() || !mIsHeadsUp) {
+ return getCollapsedHeight();
+ }
+ if (mIsSummaryWithChildren && !shouldShowPublic()) {
+ return mChildrenContainer.getCollapsedHeightWithoutHeader();
+ }
+ return getShowingLayout().getHeadsUpHeight(true /* forceNoHeader */);
+ }
+
+ @Override
public void setClipTopAmount(int clipTopAmount) {
super.setClipTopAmount(clipTopAmount);
for (NotificationContentView l : mLayouts) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index d6b7cf3..90f6324 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -713,11 +713,15 @@
}
private int getViewHeight(int visibleType) {
+ return getViewHeight(visibleType, false /* forceNoHeader */);
+ }
+
+ private int getViewHeight(int visibleType, boolean forceNoHeader) {
View view = getViewForVisibleType(visibleType);
int height = view.getHeight();
NotificationViewWrapper viewWrapper = getWrapperForView(view);
if (viewWrapper != null) {
- height += viewWrapper.getHeaderTranslation();
+ height += viewWrapper.getHeaderTranslation(forceNoHeader);
}
return height;
}
@@ -1748,14 +1752,15 @@
return getViewHeight(viewType) + getExtraRemoteInputHeight(mExpandedRemoteInput);
}
- public int getHeadsUpHeight() {
+ public int getHeadsUpHeight(boolean forceNoHeader) {
int viewType = VISIBLE_TYPE_HEADSUP;
if (mHeadsUpChild == null) {
viewType = VISIBLE_TYPE_CONTRACTED;
}
// The headsUp remote input quickly switches to the expanded one, so lets also include that
// one
- return getViewHeight(viewType) + getExtraRemoteInputHeight(mHeadsUpRemoteInput)
+ return getViewHeight(viewType, forceNoHeader)
+ + getExtraRemoteInputHeight(mHeadsUpRemoteInput)
+ getExtraRemoteInputHeight(mExpandedRemoteInput);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
index 7ebdb93..97d8443 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
@@ -51,7 +51,7 @@
*/
public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapper {
- private final int mTranslationForHeader;
+ private final int mFullHeaderTranslation;
protected ImageView mPicture;
private ProgressBar mProgressBar;
private TextView mTitle;
@@ -135,7 +135,7 @@
}
}, TRANSFORMING_VIEW_TEXT);
- mTranslationForHeader = ctx.getResources().getDimensionPixelSize(
+ mFullHeaderTranslation = ctx.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.notification_content_margin)
- ctx.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.notification_content_margin_top);
@@ -340,20 +340,20 @@
// We also need to compensate for any header translation, since we're always at the end.
mActionsContainer.setTranslationY(constrainedContentHeight - mView.getHeight()
- - getHeaderTranslation());
+ - getHeaderTranslation(false /* forceNoHeader */));
}
}
@Override
- public int getHeaderTranslation() {
- return (int) mHeaderTranslation;
+ public int getHeaderTranslation(boolean forceNoHeader) {
+ return forceNoHeader ? mFullHeaderTranslation : (int) mHeaderTranslation;
}
@Override
public void setHeaderVisibleAmount(float headerVisibleAmount) {
super.setHeaderVisibleAmount(headerVisibleAmount);
mNotificationHeader.setAlpha(headerVisibleAmount);
- mHeaderTranslation = (1.0f - headerVisibleAmount) * mTranslationForHeader;
+ mHeaderTranslation = (1.0f - headerVisibleAmount) * mFullHeaderTranslation;
mView.setTranslationY(mHeaderTranslation);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
index 3808702..47906a7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
@@ -224,7 +224,7 @@
return null;
}
- public int getHeaderTranslation() {
+ public int getHeaderTranslation(boolean forceNoHeader) {
return 0;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
index 1242431..45f7b3a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
@@ -1067,6 +1067,11 @@
false /* likeHighPriority */);
}
+ public int getCollapsedHeightWithoutHeader() {
+ return getMinHeight(getMaxAllowedVisibleChildren(true /* forceCollapsed */),
+ false /* likeHighPriority */, 0);
+ }
+
/**
* Get the minimum Height for this group.
*
@@ -1074,10 +1079,22 @@
* @param likeHighPriority if the height should be calculated as if it were not low priority
*/
private int getMinHeight(int maxAllowedVisibleChildren, boolean likeHighPriority) {
+ return getMinHeight(maxAllowedVisibleChildren, likeHighPriority, mCurrentHeaderTranslation);
+ }
+
+ /**
+ * Get the minimum Height for this group.
+ *
+ * @param maxAllowedVisibleChildren the number of children that should be visible
+ * @param likeHighPriority if the height should be calculated as if it were not low priority
+ * @param headerTranslation the translation amount of the header
+ */
+ private int getMinHeight(int maxAllowedVisibleChildren, boolean likeHighPriority,
+ int headerTranslation) {
if (!likeHighPriority && showingAsLowPriority()) {
return mNotificationHeaderLowPriority.getHeight();
}
- int minExpandHeight = mNotificationHeaderMargin + mCurrentHeaderTranslation;
+ int minExpandHeight = mNotificationHeaderMargin + headerTranslation;
int visibleChildren = 0;
boolean firstChild = true;
int childCount = mChildren.size();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java
index d8ccd3a..4221846 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManager.java
@@ -18,10 +18,14 @@
import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.NUM_SECTIONS;
+
+import android.util.MathUtils;
+
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.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import java.util.HashSet;
@@ -33,12 +37,13 @@
* A class that manages the roundness for notification views
*/
@Singleton
-class NotificationRoundnessManager implements OnHeadsUpChangedListener {
+public class NotificationRoundnessManager implements OnHeadsUpChangedListener {
private final ActivatableNotificationView[] mFirstInSectionViews;
private final ActivatableNotificationView[] mLastInSectionViews;
private final ActivatableNotificationView[] mTmpFirstInSectionViews;
private final ActivatableNotificationView[] mTmpLastInSectionViews;
+ private final KeyguardBypassController mBypassController;
private boolean mExpanded;
private HashSet<ExpandableView> mAnimatedChildren;
private Runnable mRoundingChangedCallback;
@@ -46,11 +51,12 @@
private float mAppearFraction;
@Inject
- NotificationRoundnessManager() {
+ NotificationRoundnessManager(KeyguardBypassController keyguardBypassController) {
mFirstInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
mLastInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
mTmpFirstInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
mTmpLastInSectionViews = new ActivatableNotificationView[NUM_SECTIONS];
+ mBypassController = keyguardBypassController;
}
@Override
@@ -124,18 +130,18 @@
if ((view.isPinned() || view.isHeadsUpAnimatingAway()) && !mExpanded) {
return 1.0f;
}
- if (view.showingPulsing()) {
- return 1.0f;
- }
if (isFirstInSection(view, true /* include first section */) && top) {
return 1.0f;
}
if (isLastInSection(view, true /* include last section */) && !top) {
return 1.0f;
}
- if (view == mTrackedHeadsUp && mAppearFraction <= 0.0f) {
+ if (view == mTrackedHeadsUp) {
// If we're pushing up on a headsup the appear fraction is < 0 and it needs to still be
// rounded.
+ return MathUtils.saturate(1.0f - mAppearFraction);
+ }
+ if (view.showingPulsing() && !mBypassController.getBypassEnabled()) {
return 1.0f;
}
return 0.0f;
@@ -232,6 +238,10 @@
}
public void setTrackingHeadsUp(ExpandableNotificationRow row) {
+ ExpandableNotificationRow previous = mTrackedHeadsUp;
mTrackedHeadsUp = row;
+ if (previous != null) {
+ updateView(previous, true /* animate */);
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 92b8090..097f92c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -466,12 +466,10 @@
private int mCornerRadius;
private int mSidePaddings;
private final Rect mBackgroundAnimationRect = new Rect();
- private int mAntiBurnInOffsetX;
private ArrayList<BiConsumer<Float, Float>> mExpandedHeightListeners = new ArrayList<>();
private int mHeadsUpInset;
private HeadsUpAppearanceController mHeadsUpAppearanceController;
private NotificationIconAreaController mIconAreaController;
- private float mHorizontalPanelTranslation;
private final NotificationLockscreenUserManager mLockscreenUserManager =
Dependency.get(NotificationLockscreenUserManager.class);
private final Rect mTmpRect = new Rect();
@@ -500,6 +498,8 @@
mNotificationGutsManager = Dependency.get(NotificationGutsManager.class);
private final NotificationSectionsManager mSectionsManager;
private boolean mAnimateBottomOnLayout;
+ private float mLastSentAppear;
+ private float mLastSentExpandedHeight;
@Inject
public NotificationStackScrollLayout(
@@ -561,13 +561,13 @@
res.getBoolean(R.bool.config_fadeNotificationsOnDismiss);
mRoundnessManager.setAnimatedChildren(mChildrenToAddAnimated);
mRoundnessManager.setOnRoundingChangedCallback(this::invalidate);
- addOnExpandedHeightListener(mRoundnessManager::setExpanded);
+ addOnExpandedHeightChangedListener(mRoundnessManager::setExpanded);
setOutlineProvider(mOutlineProvider);
// Blocking helper manager wants to know the expanded state, update as well.
NotificationBlockingHelperManager blockingHelperManager =
Dependency.get(NotificationBlockingHelperManager.class);
- addOnExpandedHeightListener((height, unused) -> {
+ addOnExpandedHeightChangedListener((height, unused) -> {
blockingHelperManager.setNotificationShadeExpanded(height);
});
@@ -634,7 +634,11 @@
public float getWakeUpHeight() {
ActivatableNotificationView firstChild = getFirstChildWithBackground();
if (firstChild != null) {
- return firstChild.getCollapsedHeight();
+ if (mKeyguardBypassController.getBypassEnabled()) {
+ return firstChild.getHeadsUpHeightWithoutHeader();
+ } else {
+ return firstChild.getCollapsedHeight();
+ }
}
return 0f;
}
@@ -1306,7 +1310,7 @@
stackHeight = (int) height;
}
} else {
- appearFraction = getAppearFraction(height);
+ appearFraction = calculateAppearFraction(height);
if (appearFraction >= 0) {
translationY = NotificationUtils.interpolate(getExpandTranslationStart(), 0,
appearFraction);
@@ -1329,9 +1333,26 @@
requestChildrenUpdate();
}
setStackTranslation(translationY);
- for (int i = 0; i < mExpandedHeightListeners.size(); i++) {
- BiConsumer<Float, Float> listener = mExpandedHeightListeners.get(i);
- listener.accept(mExpandedHeight, appearFraction);
+ notifyAppearChangedListeners();
+ }
+
+ private void notifyAppearChangedListeners() {
+ float appear;
+ float expandAmount;
+ if (mKeyguardBypassController.getBypassEnabled() && onKeyguard()) {
+ appear = calculateAppearFractionBypass();
+ expandAmount = getPulseHeight();
+ } else {
+ appear = MathUtils.saturate(calculateAppearFraction(mExpandedHeight));
+ expandAmount = mExpandedHeight;
+ }
+ if (appear != mLastSentAppear || expandAmount != mLastSentExpandedHeight) {
+ mLastSentAppear = appear;
+ mLastSentExpandedHeight = expandAmount;
+ for (int i = 0; i < mExpandedHeightListeners.size(); i++) {
+ BiConsumer<Float, Float> listener = mExpandedHeightListeners.get(i);
+ listener.accept(expandAmount, appear);
+ }
}
}
@@ -1453,7 +1474,7 @@
* @return the fraction of the appear animation that has been performed
*/
@ShadeViewRefactor(RefactorComponent.COORDINATOR)
- public float getAppearFraction(float height) {
+ public float calculateAppearFraction(float height) {
float appearEndPosition = getAppearEndPosition();
float appearStartPosition = getAppearStartPosition();
return (height - appearStartPosition)
@@ -4707,17 +4728,6 @@
notifyHeightChangeListener(mShelf);
}
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- private void updatePanelTranslation() {
- setTranslationX(mHorizontalPanelTranslation + mAntiBurnInOffsetX * mInterpolatedHideAmount);
- }
-
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public void setHorizontalPanelTranslation(float verticalPanelTranslation) {
- mHorizontalPanelTranslation = verticalPanelTranslation;
- updatePanelTranslation();
- }
-
/**
* Sets the current hide amount.
*
@@ -4747,7 +4757,6 @@
}
updateAlgorithmHeightAndPadding();
updateBackgroundDimming();
- updatePanelTranslation();
requestChildrenUpdate();
}
@@ -5297,12 +5306,6 @@
}
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public void setAntiBurnInOffsetX(int antiBurnInOffsetX) {
- mAntiBurnInOffsetX = antiBurnInOffsetX;
- updatePanelTranslation();
- }
-
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println(String.format("[%s: pulsing=%s qsCustomizerShowing=%s visibility=%s"
+ " alpha:%f scrollY:%d maxTopPadding:%d showShelfOnly=%s"
@@ -5360,13 +5363,13 @@
}
/**
- * Add a listener whenever the expanded height changes. The first value passed as an argument
- * is the expanded height and the second one is the appearFraction.
+ * Add a listener whenever the expanded height changes. The first value passed as an
+ * argument is the expanded height and the second one is the appearFraction.
*
* @param listener the listener to notify.
*/
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public void addOnExpandedHeightListener(BiConsumer<Float, Float> listener) {
+ public void addOnExpandedHeightChangedListener(BiConsumer<Float, Float> listener) {
mExpandedHeightListeners.add(listener);
}
@@ -5374,7 +5377,7 @@
* Stop a listener from listening to the expandedHeight.
*/
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public void removeOnExpandedHeightListener(BiConsumer<Float, Float> listener) {
+ public void removeOnExpandedHeightChangedListener(BiConsumer<Float, Float> listener) {
mExpandedHeightListeners.remove(listener);
}
@@ -5595,6 +5598,9 @@
*/
public float setPulseHeight(float height) {
mAmbientState.setPulseHeight(height);
+ if (mKeyguardBypassController.getBypassEnabled()) {
+ notifyAppearChangedListeners();
+ }
requestChildrenUpdate();
return Math.max(0, height - mAmbientState.getInnerHeight(true /* ignorePulseHeight */));
}
@@ -5654,6 +5660,16 @@
mAmbientState.setOnPulseHeightChangedListener(listener);
}
+ public float calculateAppearFractionBypass() {
+ float pulseHeight = getPulseHeight();
+ float wakeUpHeight = getWakeUpHeight();
+ float dragDownAmount = pulseHeight - wakeUpHeight;
+
+ // The total distance required to fully reveal the header
+ float totalDistance = getIntrinsicPadding();
+ return MathUtils.smoothStep(0, totalDistance, dragDownAmount);
+ }
+
/**
* A listener that is notified when the empty space below the notifications is clicked on
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
index 58f457e..d655b2f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
@@ -35,6 +35,7 @@
import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
import com.android.systemui.statusbar.policy.EncryptionHelper;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
@@ -201,20 +202,21 @@
}
protected int adjustDisableFlags(int state) {
+ boolean headsUpVisible = mStatusBarComponent.headsUpShouldBeVisible();
+ if (headsUpVisible) {
+ state |= DISABLE_CLOCK;
+ }
+
if (!mKeyguardMonitor.isLaunchTransitionFadingAway()
&& !mKeyguardMonitor.isKeyguardFadingAway()
- && shouldHideNotificationIcons()) {
+ && shouldHideNotificationIcons()
+ && !(mStatusBarStateController.getState() == StatusBarState.KEYGUARD
+ && headsUpVisible)) {
state |= DISABLE_NOTIFICATION_ICONS;
state |= DISABLE_SYSTEM_INFO;
state |= DISABLE_CLOCK;
}
- // In landscape, the heads up show but shouldHideNotificationIcons() return false
- // because the visual icon is in notification icon area rather than heads up's space.
- // whether the notification icon show or not, clock should hide when heads up show.
- if (mStatusBarComponent.isHeadsUpShouldBeVisible()) {
- state |= DISABLE_CLOCK;
- }
if (mNetworkController != null && EncryptionHelper.IS_DATA_ENCRYPTED) {
if (mNetworkController.hasEmergencyCryptKeeperText()) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
index 4ef19fb..46dd5e6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.phone;
+import static com.android.systemui.SysUiServiceProvider.getComponent;
+
import android.graphics.Point;
import android.graphics.Rect;
import android.view.DisplayCutout;
@@ -27,11 +29,16 @@
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.DarkIconDispatcher;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import java.util.function.BiConsumer;
@@ -56,13 +63,16 @@
private final Consumer<ExpandableNotificationRow>
mSetTrackingHeadsUp = this::setTrackingHeadsUp;
private final Runnable mUpdatePanelTranslation = this::updatePanelTranslation;
- private final BiConsumer<Float, Float> mSetExpandedHeight = this::setExpandedHeight;
+ private final BiConsumer<Float, Float> mSetExpandedHeight = this::setAppearFraction;
+ private final KeyguardBypassController mBypassController;
+ private final StatusBarStateController mStatusBarStateController;
+ private final CommandQueue mCommandQueue;
@VisibleForTesting
float mExpandedHeight;
@VisibleForTesting
boolean mIsExpanded;
@VisibleForTesting
- float mExpandFraction;
+ float mAppearFraction;
private ExpandableNotificationRow mTrackedChild;
private boolean mShown;
private final View.OnLayoutChangeListener mStackScrollLayoutChangeListener =
@@ -77,13 +87,17 @@
};
private boolean mAnimationsEnabled = true;
Point mPoint;
+ private KeyguardMonitor mKeyguardMonitor;
public HeadsUpAppearanceController(
NotificationIconAreaController notificationIconAreaController,
HeadsUpManagerPhone headsUpManager,
- View statusbarView) {
- this(notificationIconAreaController, headsUpManager,
+ View statusbarView,
+ SysuiStatusBarStateController statusBarStateController,
+ KeyguardBypassController keyguardBypassController) {
+ this(notificationIconAreaController, headsUpManager, statusBarStateController,
+ keyguardBypassController,
statusbarView.findViewById(R.id.heads_up_status_bar_view),
statusbarView.findViewById(R.id.notification_stack_scroller),
statusbarView.findViewById(R.id.notification_panel),
@@ -96,6 +110,8 @@
public HeadsUpAppearanceController(
NotificationIconAreaController notificationIconAreaController,
HeadsUpManagerPhone headsUpManager,
+ StatusBarStateController stateController,
+ KeyguardBypassController bypassController,
HeadsUpStatusBarView headsUpStatusBarView,
NotificationStackScrollLayout stackScroller,
NotificationPanelView panelView,
@@ -114,7 +130,7 @@
panelView.addTrackingHeadsUpListener(mSetTrackingHeadsUp);
panelView.addVerticalTranslationListener(mUpdatePanelTranslation);
panelView.setHeadsUpAppearanceController(this);
- mStackScroller.addOnExpandedHeightListener(mSetExpandedHeight);
+ mStackScroller.addOnExpandedHeightChangedListener(mSetExpandedHeight);
mStackScroller.addOnLayoutChangeListener(mStackScrollLayoutChangeListener);
mStackScroller.setHeadsUpAppearanceController(this);
mClockView = clockView;
@@ -135,6 +151,10 @@
mHeadsUpStatusBarView.removeOnLayoutChangeListener(this);
}
});
+ mBypassController = bypassController;
+ mStatusBarStateController = stateController;
+ mCommandQueue = getComponent(headsUpStatusBarView.getContext(), CommandQueue.class);
+ mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
}
@@ -144,7 +164,7 @@
mPanelView.removeTrackingHeadsUpListener(mSetTrackingHeadsUp);
mPanelView.removeVerticalTranslationListener(mUpdatePanelTranslation);
mPanelView.setHeadsUpAppearanceController(null);
- mStackScroller.removeOnExpandedHeightListener(mSetExpandedHeight);
+ mStackScroller.removeOnExpandedHeightChangedListener(mSetExpandedHeight);
mStackScroller.removeOnLayoutChangeListener(mStackScrollLayoutChangeListener);
mDarkIconDispatcher.removeDarkReceiver(this);
}
@@ -219,7 +239,7 @@
private void updateTopEntry() {
NotificationEntry newEntry = null;
- if (!mIsExpanded && mHeadsUpManager.hasPinnedHeadsUp()) {
+ if (shouldBeVisible()) {
newEntry = mHeadsUpManager.getTopEntry();
}
NotificationEntry previousEntry = mHeadsUpStatusBarView.getShowingEntry();
@@ -342,7 +362,13 @@
* @return if the heads up status bar view should be shown
*/
public boolean shouldBeVisible() {
- return !mIsExpanded && mHeadsUpManager.hasPinnedHeadsUp();
+ boolean canShow = !mIsExpanded;
+ if (mBypassController.getBypassEnabled() &&
+ (mStatusBarStateController.getState() == StatusBarState.KEYGUARD
+ || mKeyguardMonitor.isKeyguardGoingAway())) {
+ canShow = true;
+ }
+ return canShow && mHeadsUpManager.hasPinnedHeadsUp();
}
@Override
@@ -351,12 +377,24 @@
updateHeader(entry);
}
- public void setExpandedHeight(float expandedHeight, float appearFraction) {
- boolean changedHeight = expandedHeight != mExpandedHeight;
+ @Override
+ public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
+ if (mStatusBarStateController.getState() != StatusBarState.SHADE) {
+ // Show the status bar icons when the pinned mode changes
+ mCommandQueue.recomputeDisableFlags(
+ mHeadsUpStatusBarView.getContext().getDisplayId(), false);
+ }
+ }
+
+ public void setAppearFraction(float expandedHeight, float appearFraction) {
+ boolean changed = expandedHeight != mExpandedHeight;
mExpandedHeight = expandedHeight;
- mExpandFraction = appearFraction;
+ mAppearFraction = appearFraction;
boolean isExpanded = expandedHeight > 0;
- if (changedHeight) {
+ // We only notify if the expandedHeight changed and not on the appearFraction, since
+ // otherwise we may run into an infinite loop where the panel and this are constantly
+ // updating themselves over just a small fraction
+ if (changed) {
updateHeadsUpHeaders();
}
if (isExpanded != mIsExpanded) {
@@ -389,8 +427,9 @@
public void updateHeader(NotificationEntry entry) {
ExpandableNotificationRow row = entry.getRow();
float headerVisibleAmount = 1.0f;
- if (row.isPinned() || row.isHeadsUpAnimatingAway() || row == mTrackedChild) {
- headerVisibleAmount = mExpandFraction;
+ if (row.isPinned() || row.isHeadsUpAnimatingAway() || row == mTrackedChild
+ || row.showingPulsing()) {
+ headerVisibleAmount = mAppearFraction;
}
row.setHeaderVisibleAmount(headerVisibleAmount);
}
@@ -409,7 +448,7 @@
mTrackedChild = oldController.mTrackedChild;
mExpandedHeight = oldController.mExpandedHeight;
mIsExpanded = oldController.mIsExpanded;
- mExpandFraction = oldController.mExpandFraction;
+ mAppearFraction = oldController.mAppearFraction;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
index 4acf7b2..a53ce9b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
@@ -320,7 +320,7 @@
if (child instanceof StatusBarIconView) {
boolean isReplacingIcon = isReplacingIcon(child);
final StatusBarIconView icon = (StatusBarIconView) child;
- if (mAnimationsEnabled && icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
+ if (areAnimationsEnabled(icon) && icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
&& child.getVisibility() == VISIBLE && isReplacingIcon) {
int animationStartIndex = findFirstViewIndexAfter(icon.getTranslationX());
if (mAddAnimationStartIndex < 0) {
@@ -331,7 +331,7 @@
}
if (!mChangingViewPositions) {
mIconStates.remove(child);
- if (mAnimationsEnabled && !isReplacingIcon) {
+ if (areAnimationsEnabled(icon) && !isReplacingIcon) {
addTransientView(icon, 0);
boolean isIsolatedIcon = child == mIsolatedIcon;
icon.setVisibleState(StatusBarIconView.STATE_HIDDEN, true /* animate */,
@@ -342,6 +342,10 @@
}
}
+ private boolean areAnimationsEnabled(StatusBarIconView icon) {
+ return mAnimationsEnabled || icon == mIsolatedIcon;
+ }
+
/**
* Finds the first view with a translation bigger then a given value
*/
@@ -695,7 +699,7 @@
StatusBarIconView icon = (StatusBarIconView) view;
boolean animate = false;
AnimationProperties animationProperties = null;
- boolean animationsAllowed = mAnimationsEnabled && !mDisallowNextAnimation
+ boolean animationsAllowed = areAnimationsEnabled(icon) && !mDisallowNextAnimation
&& !noAnimations;
if (animationsAllowed) {
if (justAdded || justReplaced) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index fe0e0d3..32dc96d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -148,6 +148,15 @@
private static final AnimationProperties CLOCK_ANIMATION_PROPERTIES = new AnimationProperties()
.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
+ private static final AnimatableProperty KEYGUARD_HEADS_UP_SHOWING_AMOUNT
+ = AnimatableProperty.from("KEYGUARD_HEADS_UP_SHOWING_AMOUNT",
+ NotificationPanelView::setKeyguardHeadsUpShowingAmount,
+ NotificationPanelView::getKeyguardHeadsUpShowingAmount,
+ R.id.keyguard_hun_animator_tag,
+ R.id.keyguard_hun_animator_end_tag,
+ R.id.keyguard_hun_animator_start_tag);
+ private static final AnimationProperties KEYGUARD_HUN_PROPERTIES =
+ new AnimationProperties().setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
private final InjectionInflationController mInjectionInflationController;
private final PowerManager mPowerManager;
@@ -357,6 +366,8 @@
private int mDarkIconSize;
private int mHeadsUpInset;
private boolean mHeadsUpPinnedMode;
+ private float mKeyguardHeadsUpShowingAmount = 0.0f;
+ private boolean mShowingKeyguardHeadsUp;
@Inject
public NotificationPanelView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -742,7 +753,6 @@
stackScrollerPadding = mClockPositionResult.stackScrollerPaddingExpanded;
}
mNotificationStackScroller.setIntrinsicPadding(stackScrollerPadding);
- mNotificationStackScroller.setAntiBurnInOffsetX(mClockPositionResult.clockX);
mKeyguardBottomArea.setAntiBurnInOffsetX(mClockPositionResult.clockX);
mStackScrollerMeasuringPass++;
@@ -1416,6 +1426,7 @@
} else if (oldState == StatusBarState.SHADE_LOCKED
&& statusBarState == StatusBarState.KEYGUARD) {
animateKeyguardStatusBarIn(StackStateAnimator.ANIMATION_DURATION_STANDARD);
+ mNotificationStackScroller.resetScrollPosition();
// Only animate header if the header is visible. If not, it will partially animate out
// the top of QS
if (!mQsExpanded) {
@@ -1430,6 +1441,7 @@
}
}
}
+ updateKeyguardStatusBarForHeadsUp();
if (keyguardShowing) {
updateDozingVisibilities(false /* animate */);
}
@@ -1722,21 +1734,11 @@
} else {
int expandedPosition = mClockPositionResult.stackScrollerPadding;
return (int) MathUtils.lerp(collapsedPosition, expandedPosition,
- calculateHeaderAppearAmountBypass());
+ mNotificationStackScroller.calculateAppearFractionBypass());
}
}
- private float calculateHeaderAppearAmountBypass() {
- float pulseHeight = mNotificationStackScroller.getPulseHeight();
- float wakeUpHeight = mNotificationStackScroller.getWakeUpHeight();
- float dragDownAmount = pulseHeight - wakeUpHeight;
-
- // The total distance required to fully reveal the header
- float totalDistance = mClockPositionResult.stackScrollerPadding;
- return MathUtils.smoothStep(0, totalDistance, dragDownAmount);
- }
-
protected void requestScrollerTopPaddingUpdate(boolean animate) {
mNotificationStackScroller.updateTopPadding(calculateQsTopPadding(), animate);
if (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled()) {
@@ -2069,7 +2071,7 @@
if (mBarState == StatusBarState.KEYGUARD && !mKeyguardBypassController.getBypassEnabled()) {
return -mQs.getQsMinExpansionHeight();
}
- float appearAmount = mNotificationStackScroller.getAppearFraction(mExpandedHeight);
+ float appearAmount = mNotificationStackScroller.calculateAppearFraction(mExpandedHeight);
float startHeight = -mQsExpansionHeight;
if (mKeyguardBypassController.getBypassEnabled() && isOnKeyguard()
&& mNotificationStackScroller.isPulseExpanding()) {
@@ -2079,7 +2081,7 @@
// again after the header has animated away
appearAmount = 0;
} else {
- appearAmount = calculateHeaderAppearAmountBypass();
+ appearAmount = mNotificationStackScroller.calculateAppearFractionBypass();
}
startHeight = -mQs.getQsMinExpansionHeight();
}
@@ -2120,6 +2122,7 @@
float alphaQsExpansion = 1 - Math.min(1, getQsExpansionFraction() * 2);
float newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion)
* mKeyguardStatusBarAnimateAlpha;
+ newAlpha *= 1.0f - mKeyguardHeadsUpShowingAmount;
mKeyguardStatusBar.setAlpha(newAlpha);
mKeyguardStatusBar.setVisibility(newAlpha != 0f && !mDozing ? VISIBLE : INVISIBLE);
}
@@ -2754,6 +2757,31 @@
updateGestureExclusionRect();
mHeadsUpPinnedMode = inPinnedMode;
updateHeadsUpVisibility();
+ updateKeyguardStatusBarForHeadsUp();
+ }
+
+ private void updateKeyguardStatusBarForHeadsUp() {
+ boolean showingKeyguardHeadsUp = mKeyguardShowing
+ && mHeadsUpAppearanceController.shouldBeVisible();
+ if (mShowingKeyguardHeadsUp != showingKeyguardHeadsUp) {
+ mShowingKeyguardHeadsUp = showingKeyguardHeadsUp;
+ if (mKeyguardShowing) {
+ PropertyAnimator.setProperty(this, KEYGUARD_HEADS_UP_SHOWING_AMOUNT,
+ showingKeyguardHeadsUp ? 1.0f : 0.0f, KEYGUARD_HUN_PROPERTIES,
+ true /* animate */);
+ } else {
+ PropertyAnimator.applyImmediately(this, KEYGUARD_HEADS_UP_SHOWING_AMOUNT, 0.0f);
+ }
+ }
+ }
+
+ private void setKeyguardHeadsUpShowingAmount(float amount) {
+ mKeyguardHeadsUpShowingAmount = amount;
+ updateHeaderKeyguardAlpha();
+ }
+
+ private float getKeyguardHeadsUpShowingAmount() {
+ return mKeyguardHeadsUpShowingAmount;
}
public void setHeadsUpAnimatingAway(boolean headsUpAnimatingAway) {
@@ -2847,7 +2875,7 @@
}
protected void setHorizontalPanelTranslation(float translation) {
- mNotificationStackScroller.setHorizontalPanelTranslation(translation);
+ mNotificationStackScroller.setTranslationX(translation);
mQsFrame.setTranslationX(translation);
int size = mVerticalTranslationListener.size();
for (int i = 0; i < size; i++) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 1cbd990..2a14c51 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -847,7 +847,8 @@
mHeadsUpAppearanceController.destroy();
}
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
- mNotificationIconAreaController, mHeadsUpManager, mStatusBarWindow);
+ mNotificationIconAreaController, mHeadsUpManager, mStatusBarWindow,
+ mStatusBarStateController, mKeyguardBypassController);
mHeadsUpAppearanceController.readFrom(oldController);
mStatusBarWindow.setStatusBarView(mStatusBarView);
updateAreThereNotifications();
@@ -1668,7 +1669,7 @@
}
}
- public boolean isHeadsUpShouldBeVisible() {
+ public boolean headsUpShouldBeVisible() {
return mHeadsUpAppearanceController.shouldBeVisible();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
index 7e6335d..524ad85 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationRoundnessManagerTest.java
@@ -35,6 +35,7 @@
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
import org.junit.Assert;
import org.junit.Before;
@@ -57,11 +58,13 @@
private ExpandableNotificationRow mSecond;
@Mock
private StatusBarStateController mStatusBarStateController;
+ @Mock
+ private KeyguardBypassController mBypassController;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- mRoundnessManager = new NotificationRoundnessManager();
+ mRoundnessManager = new NotificationRoundnessManager(mBypassController);
com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
NotificationTestHelper testHelper = new NotificationTestHelper(getContext());
mFirst = testHelper.createRow();
@@ -260,15 +263,15 @@
}
@Test
- public void testTrackingHeadsUpNotRoundedIfPushingDown() {
+ public void testTrackingHeadsUpPartiallyRoundedIfPushingDown() {
mRoundnessManager.setExpanded(1.0f /* expandedHeight */, 0.5f /* appearFraction */);
mRoundnessManager.setTrackingHeadsUp(mFirst);
mRoundnessManager.updateRoundedChildren(new NotificationSection[]{
createSection(mSecond, mSecond),
createSection(null, null)
});
- Assert.assertEquals(0.0f, mFirst.getCurrentBottomRoundness(), 0.0f);
- Assert.assertEquals(0.0f, mFirst.getCurrentTopRoundness(), 0.0f);
+ Assert.assertEquals(0.5f, mFirst.getCurrentBottomRoundness(), 0.0f);
+ Assert.assertEquals(0.5f, mFirst.getCurrentTopRoundness(), 0.0f);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index 66255dd..92173cc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -200,17 +200,6 @@
}
@Test
- public void testAntiBurnInOffset() {
- final int burnInOffset = 30;
- mStackScroller.setAntiBurnInOffsetX(burnInOffset);
- mStackScroller.setHideAmount(0.0f, 0.0f);
- Assert.assertEquals(0 /* expected */, mStackScroller.getTranslationX(), 0.01 /* delta */);
- mStackScroller.setHideAmount(1.0f, 1.0f);
- Assert.assertEquals(burnInOffset /* expected */, mStackScroller.getTranslationX(),
- 0.01 /* delta */);
- }
-
- @Test
public void updateEmptyView_dndSuppressing() {
when(mEmptyShadeView.willBeGone()).thenReturn(true);
when(mBar.areNotificationsHidden()).thenReturn(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
index 0479b4a..b45707e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
@@ -32,6 +32,7 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.DarkIconDispatcher;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -56,6 +57,8 @@
private HeadsUpStatusBarView mHeadsUpStatusBarView;
private HeadsUpManagerPhone mHeadsUpManager;
private View mOperatorNameView;
+ private StatusBarStateController mStatusbarStateController;
+ private KeyguardBypassController mBypassController;
@Before
public void setUp() throws Exception {
@@ -67,16 +70,20 @@
mock(TextView.class));
mHeadsUpManager = mock(HeadsUpManagerPhone.class);
mOperatorNameView = new View(mContext);
+ mStatusbarStateController = mock(StatusBarStateController.class);
+ mBypassController = mock(KeyguardBypassController.class);
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
mock(NotificationIconAreaController.class),
mHeadsUpManager,
+ mStatusbarStateController,
+ mBypassController,
mHeadsUpStatusBarView,
mStackScroller,
mPanelView,
new View(mContext),
mOperatorNameView,
new View(mContext));
- mHeadsUpAppearanceController.setExpandedHeight(0.0f, 0.0f);
+ mHeadsUpAppearanceController.setAppearFraction(0.0f, 0.0f);
}
@Test
@@ -139,11 +146,13 @@
@Test
public void testHeaderReadFromOldController() {
- mHeadsUpAppearanceController.setExpandedHeight(1.0f, 1.0f);
+ mHeadsUpAppearanceController.setAppearFraction(1.0f, 1.0f);
HeadsUpAppearanceController newController = new HeadsUpAppearanceController(
mock(NotificationIconAreaController.class),
mHeadsUpManager,
+ mStatusbarStateController,
+ mBypassController,
mHeadsUpStatusBarView,
mStackScroller,
mPanelView,
@@ -154,8 +163,8 @@
Assert.assertEquals(mHeadsUpAppearanceController.mExpandedHeight,
newController.mExpandedHeight, 0.0f);
- Assert.assertEquals(mHeadsUpAppearanceController.mExpandFraction,
- newController.mExpandFraction, 0.0f);
+ Assert.assertEquals(mHeadsUpAppearanceController.mAppearFraction,
+ newController.mAppearFraction, 0.0f);
Assert.assertEquals(mHeadsUpAppearanceController.mIsExpanded,
newController.mIsExpanded);
}
@@ -172,7 +181,7 @@
verify(mPanelView).removeVerticalTranslationListener(any());
verify(mPanelView).removeTrackingHeadsUpListener(any());
verify(mPanelView).setHeadsUpAppearanceController(any());
- verify(mStackScroller).removeOnExpandedHeightListener(any());
+ verify(mStackScroller).removeOnExpandedHeightChangedListener(any());
verify(mStackScroller).removeOnLayoutChangeListener(any());
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
index e1ba992..d14b460 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java
@@ -45,6 +45,7 @@
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
+import com.android.systemui.statusbar.notification.stack.NotificationRoundnessManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -120,7 +121,7 @@
new StatusBarStateControllerImpl(),
bypassController);
PulseExpansionHandler expansionHandler = new PulseExpansionHandler(mContext, coordinator,
- bypassController, mHeadsUpManager);
+ bypassController, mHeadsUpManager, mock(NotificationRoundnessManager.class));
mNotificationPanelView = new TestableNotificationPanelView(coordinator, expansionHandler,
bypassController);
mNotificationPanelView.setHeadsUpManager(mHeadsUpManager);