Disabling animations now when the screen is off

Before, notifications were animating weirdly when the
Keyboard was shown, this should not happen anymore.

Test: add notifications, go to keyboard
Change-Id: If0edccf84bdd09be99eaeae2dceee8e29f30ae12
Fixes: 34471382
This commit is contained in:
Selim Cinek
2017-02-03 15:30:28 -08:00
parent edebced70f
commit 09bd29dad1
3 changed files with 76 additions and 43 deletions

View File

@@ -68,6 +68,7 @@ public class NotificationShelf extends ActivatableNotificationView {
private float mMaxShelfEnd;
private int mRelativeOffset;
private boolean mInteractive;
private boolean mAnimationsEnabled = true;
public NotificationShelf(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -574,6 +575,15 @@ public class NotificationShelf extends ActivatableNotificationView {
mMaxShelfEnd = maxShelfEnd;
}
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);
}
}
private class ShelfState extends ExpandableViewState {
private float openedAmount;
private boolean hasItemsInStableShelf;
@@ -586,6 +596,7 @@ public class NotificationShelf extends ActivatableNotificationView {
setOpenedAmount(openedAmount);
updateAppearance();
setHasItemsInStableShelf(hasItemsInStableShelf);
mShelfIcons.setAnimationsEnabled(mAnimationsEnabled);
}
@Override
@@ -595,6 +606,7 @@ public class NotificationShelf extends ActivatableNotificationView {
setOpenedAmount(openedAmount);
updateAppearance();
setHasItemsInStableShelf(hasItemsInStableShelf);
mShelfIcons.setAnimationsEnabled(mAnimationsEnabled);
}
}
}

View File

@@ -104,6 +104,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
private float mOpenedAmount = 0.0f;
private float mVisualOverflowAdaption;
private boolean mDisallowNextAnimation;
private boolean mAnimationsEnabled = true;
public NotificationIconContainer(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -422,6 +423,20 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
return mIconSize;
}
public void setAnimationsEnabled(boolean enabled) {
if (!enabled && mAnimationsEnabled) {
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
ViewState childState = mIconStates.get(child);
if (childState != null) {
childState.cancelAnimations(child);
childState.applyToView(child);
}
}
}
mAnimationsEnabled = enabled;
}
public class IconState extends ViewState {
public float iconAppearAmount = 1.0f;
public float clampedAppearAmount = 1.0f;
@@ -438,54 +453,59 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
StatusBarIconView icon = (StatusBarIconView) view;
boolean animate = false;
AnimationProperties animationProperties = null;
if (justAdded) {
super.applyToView(icon);
if (iconAppearAmount != 0.0f) {
icon.setAlpha(0.0f);
icon.setVisibleState(StatusBarIconView.STATE_HIDDEN, false /* animate */);
animationProperties = ADD_ICON_PROPERTIES;
boolean animationsAllowed = mAnimationsEnabled && !mDisallowNextAnimation;
if (animationsAllowed) {
if (justAdded) {
super.applyToView(icon);
if (iconAppearAmount != 0.0f) {
icon.setAlpha(0.0f);
icon.setVisibleState(StatusBarIconView.STATE_HIDDEN,
false /* animate */);
animationProperties = ADD_ICON_PROPERTIES;
animate = true;
}
} else if (visibleState != icon.getVisibleState()) {
animationProperties = DOT_ANIMATION_PROPERTIES;
animate = true;
}
} else if (visibleState != icon.getVisibleState()) {
animationProperties = DOT_ANIMATION_PROPERTIES;
animate = true;
}
if (!animate && mAddAnimationStartIndex >= 0
&& indexOfChild(view) >= mAddAnimationStartIndex
&& (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
if (!animate && mAddAnimationStartIndex >= 0
&& indexOfChild(view) >= mAddAnimationStartIndex
&& (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
|| visibleState != StatusBarIconView.STATE_HIDDEN)) {
animationProperties = DOT_ANIMATION_PROPERTIES;
animate = true;
}
if (needsCannedAnimation) {
AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
animationFilter.reset();
animationFilter.combineFilter(ICON_ANIMATION_PROPERTIES.getAnimationFilter());
mTempProperties.resetCustomInterpolators();
mTempProperties.combineCustomInterpolators(ICON_ANIMATION_PROPERTIES);
if (animationProperties != null) {
animationFilter.combineFilter(animationProperties.getAnimationFilter());
mTempProperties.combineCustomInterpolators(animationProperties);
animationProperties = DOT_ANIMATION_PROPERTIES;
animate = true;
}
if (needsCannedAnimation) {
AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
animationFilter.reset();
animationFilter.combineFilter(
ICON_ANIMATION_PROPERTIES.getAnimationFilter());
mTempProperties.resetCustomInterpolators();
mTempProperties.combineCustomInterpolators(ICON_ANIMATION_PROPERTIES);
if (animationProperties != null) {
animationFilter.combineFilter(animationProperties.getAnimationFilter());
mTempProperties.combineCustomInterpolators(animationProperties);
}
animationProperties = mTempProperties;
animationProperties.setDuration(CANNED_ANIMATION_DURATION);
animate = true;
mCannedAnimationStartIndex = indexOfChild(view);
}
if (!animate && mCannedAnimationStartIndex >= 0
&& indexOfChild(view) > mCannedAnimationStartIndex
&& (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
|| visibleState != StatusBarIconView.STATE_HIDDEN)) {
AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
animationFilter.reset();
animationFilter.animateX();
mTempProperties.resetCustomInterpolators();
animationProperties = mTempProperties;
animationProperties.setDuration(CANNED_ANIMATION_DURATION);
animate = true;
}
animationProperties = mTempProperties;
animationProperties.setDuration(CANNED_ANIMATION_DURATION);
animate = true;
mCannedAnimationStartIndex = indexOfChild(view);
}
if (!animate && mCannedAnimationStartIndex >= 0
&& indexOfChild(view) > mCannedAnimationStartIndex
&& (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
|| visibleState != StatusBarIconView.STATE_HIDDEN)) {
AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
animationFilter.reset();
animationFilter.animateX();
mTempProperties.resetCustomInterpolators();
animationProperties = mTempProperties;
animationProperties.setDuration(CANNED_ANIMATION_DURATION);
animate = true;
}
icon.setVisibleState(visibleState);
if (animate && !mDisallowNextAnimation) {
icon.setVisibleState(visibleState, animationsAllowed);
if (animate) {
animateTo(icon, animationProperties);
} else {
super.applyToView(view);

View File

@@ -2740,6 +2740,7 @@ public class NotificationStackScrollLayout extends ViewGroup
private void updateNotificationAnimationStates() {
boolean running = mAnimationsEnabled || mPulsing;
mShelf.setAnimationsEnabled(running);
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
View child = getChildAt(i);