From 9d6172b9e231d9a034fe47cc41d949ebbd3b587d Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Tue, 4 Jun 2019 15:14:25 -0700 Subject: [PATCH] Do not animate status bar icons outside of shade Test: systrace Bug: 133182504 Change-Id: Iad0b15f96d935746e16208ae875b69625ba2adfc Merged-In: I422b3da488fdac6577173d41b26c67f81c7826c5 --- .../systemui/statusbar/NotificationShelf.java | 1 - .../stack/NotificationStackScrollLayout.java | 1 + .../phone/NotificationIconAreaController.java | 21 +++++++++++++++++++ .../phone/NotificationIconContainer.java | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index fc2705f054e0b..312ea473d9e66 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -929,7 +929,6 @@ public class NotificationShelf extends ActivatableNotificationView implements public void setAnimationsEnabled(boolean enabled) { mAnimationsEnabled = enabled; - mCollapsedIcons.setAnimationsEnabled(enabled); if (!enabled) { // we need to wait with enabling the animations until the first frame has passed mShelfIcons.setAnimationsEnabled(false); 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 b53fe3a795fc7..d219ac920eec7 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 @@ -3223,6 +3223,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd private void updateNotificationAnimationStates() { boolean running = mAnimationsEnabled || hasPulsingNotifications(); mShelf.setAnimationsEnabled(running); + mIconAreaController.setAnimationsEnabled(running); int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View child = getChildAt(i); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index e8ca3eef24de5..501e597346913 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -24,6 +24,7 @@ import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -78,6 +79,7 @@ public class NotificationIconAreaController implements DarkReceiver, private Context mContext; private boolean mFullyDark; private boolean mShowLowPriority = true; + private boolean mAnimationsEnabled; /** * Ratio representing being awake or in ambient mode, where 1 is dark and 0 awake. @@ -283,6 +285,25 @@ public class NotificationIconAreaController implements DarkReceiver, false /* hide centered icon */); } + /** + * If icons of the status bar should animate when they are added or removed. + */ + public void setAnimationsEnabled(boolean enabled) { + mAnimationsEnabled = enabled; + updateAnimations(); + } + + @Override + public void onStateChanged(int newState) { + updateAnimations(); + } + + private void updateAnimations() { + boolean inShade = mStatusBarStateController.getState() == StatusBarState.SHADE; + mCenteredIcon.setAnimationsEnabled(mAnimationsEnabled && inShade); + mNotificationIcons.setAnimationsEnabled(mAnimationsEnabled && inShade); + } + @VisibleForTesting boolean shouldShouldLowPriorityIcons() { return mShowLowPriority; 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 009afca5b0345..f458618a43f2a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -315,7 +315,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { @Override public void onViewRemoved(View child) { super.onViewRemoved(child); - if (child instanceof StatusBarIconView) { + if (mAnimationsEnabled && child instanceof StatusBarIconView) { boolean isReplacingIcon = isReplacingIcon(child); final StatusBarIconView icon = (StatusBarIconView) child; if (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN