Merge "Only doing the icon animations now when expanding slowly"

This commit is contained in:
Selim Cinek
2016-12-10 00:07:29 +00:00
committed by Android (Google) Code Review
6 changed files with 99 additions and 23 deletions

View File

@@ -34,6 +34,7 @@ import com.android.systemui.statusbar.stack.AnimationProperties;
import com.android.systemui.statusbar.stack.ExpandableViewState;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.stack.StackScrollState;
import com.android.systemui.statusbar.stack.ViewState;
/**
* A notification shelf view that is placed inside the notification scroller. It manages the
@@ -200,7 +201,11 @@ public class NotificationShelf extends ActivatableNotificationView {
int colorTwoBefore = NO_COLOR;
int previousColor = NO_COLOR;
float transitionAmount = 0.0f;
boolean scrollingFast = mAmbientState.getCurrentScrollVelocity() > mScrollFastThreshold;
boolean scrollingFast = mAmbientState.getCurrentScrollVelocity() > mScrollFastThreshold
|| (mAmbientState.isExpansionChanging()
&& Math.abs(mAmbientState.getExpandingVelocity()) > mScrollFastThreshold);
boolean expandingAnimated = mAmbientState.isExpansionChanging()
&& !mAmbientState.isPanelTracking();
int baseZHeight = mAmbientState.getBaseZHeight();
while (notificationIndex < mHostLayout.getChildCount()) {
ExpandableView child = (ExpandableView) mHostLayout.getChildAt(notificationIndex);
@@ -228,7 +233,7 @@ public class NotificationShelf extends ActivatableNotificationView {
}
updateNotificationClipHeight(row, notificationClipEnd);
float inShelfAmount = updateIconAppearance(row, expandAmount, scrollingFast,
isLastChild);
expandingAnimated, isLastChild);
numViewsInShelf += inShelfAmount;
int ownColorUntinted = row.getBackgroundColorWithoutTint();
if (rowTranslationY >= shelfStart && mNotGoneIndex == -1) {
@@ -278,7 +283,7 @@ public class NotificationShelf extends ActivatableNotificationView {
* @return the icon amount how much this notification is in the shelf;
*/
private float updateIconAppearance(ExpandableNotificationRow row, float expandAmount,
boolean scrollingFast, boolean isLastChild) {
boolean scrollingFast, boolean expandingAnimated, boolean isLastChild) {
// Let calculate how much the view is in the shelf
float viewStart = row.getTranslationY();
int fullHeight = row.getActualHeight() + mPaddingBetweenElements;
@@ -316,12 +321,13 @@ public class NotificationShelf extends ActivatableNotificationView {
iconTransitionAmount = 0.0f;
}
updateIconPositioning(row, iconTransitionAmount, fullTransitionAmount, scrollingFast,
isLastChild);
expandingAnimated, isLastChild);
return fullTransitionAmount;
}
private void updateIconPositioning(ExpandableNotificationRow row, float iconTransitionAmount,
float fullTransitionAmount, boolean scrollingFast, boolean isLastChild) {
float fullTransitionAmount, boolean scrollingFast, boolean expandingAnimated,
boolean isLastChild) {
StatusBarIconView icon = row.getEntry().expandedIcon;
NotificationIconContainer.IconState iconState = getIconState(icon);
if (iconState == null) {
@@ -332,10 +338,16 @@ public class NotificationShelf extends ActivatableNotificationView {
iconState.keepClampedPosition = false;
}
if (clampedAmount == fullTransitionAmount) {
iconState.useFullTransitionAmount = fullTransitionAmount == 0.0f || scrollingFast;
iconState.useFullTransitionAmount = fullTransitionAmount == 0.0f || scrollingFast
|| expandingAnimated;
iconState.translateContent = mMaxLayoutHeight - getTranslationY()
- getIntrinsicHeight() > 0;
}
if (scrollingFast || (expandingAnimated && iconState.useFullTransitionAmount
&& !ViewState.isAnimatingY(icon))) {
iconState.cancelAnimations(icon);
iconState.useFullTransitionAmount = true;
}
float transitionAmount;
boolean needCannedAnimation = iconState.clampedAppearAmount == 1.0f
&& clampedAmount == 0.0f;

View File

@@ -105,7 +105,7 @@ public class NotificationPanelView extends PanelView implements
private boolean mAnimateNextTopPaddingChange;
private int mTrackingPointer;
private VelocityTracker mVelocityTracker;
private VelocityTracker mQsVelocityTracker;
private boolean mQsTracking;
/**
@@ -688,7 +688,7 @@ public class NotificationPanelView extends PanelView implements
}
private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) {
float vel = getCurrentVelocity();
float vel = getCurrentQSVelocity();
final boolean expandsQs = flingExpandsQs(vel);
if (expandsQs) {
logQsSwipeDown(y);
@@ -697,7 +697,7 @@ public class NotificationPanelView extends PanelView implements
}
private void logQsSwipeDown(float y) {
float vel = getCurrentVelocity();
float vel = getCurrentQSVelocity();
final int gesture = mStatusBarState == StatusBarState.KEYGUARD
? EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_QS
: EventLogConstants.SYSUI_SHADE_GESTURE_SWIPE_DOWN_QS;
@@ -926,9 +926,9 @@ public class NotificationPanelView extends PanelView implements
flingQsWithCurrentVelocity(y,
event.getActionMasked() == MotionEvent.ACTION_CANCEL);
}
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
if (mQsVelocityTracker != null) {
mQsVelocityTracker.recycle();
mQsVelocityTracker = null;
}
break;
}
@@ -1290,24 +1290,24 @@ public class NotificationPanelView extends PanelView implements
}
private void trackMovement(MotionEvent event) {
if (mVelocityTracker != null) mVelocityTracker.addMovement(event);
if (mQsVelocityTracker != null) mQsVelocityTracker.addMovement(event);
mLastTouchX = event.getX();
mLastTouchY = event.getY();
}
private void initVelocityTracker() {
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
if (mQsVelocityTracker != null) {
mQsVelocityTracker.recycle();
}
mVelocityTracker = VelocityTracker.obtain();
mQsVelocityTracker = VelocityTracker.obtain();
}
private float getCurrentVelocity() {
if (mVelocityTracker == null) {
private float getCurrentQSVelocity() {
if (mQsVelocityTracker == null) {
return 0;
}
mVelocityTracker.computeCurrentVelocity(1000);
return mVelocityTracker.getYVelocity();
mQsVelocityTracker.computeCurrentVelocity(1000);
return mQsVelocityTracker.getYVelocity();
}
private void cancelQsAnimation() {
@@ -2282,6 +2282,9 @@ public class NotificationPanelView extends PanelView implements
}
protected void updateExpandedHeight(float expandedHeight) {
if (mTracking) {
mNotificationStackScroller.setExpandingVelocity(getCurrentExpandVelocity());
}
mNotificationStackScroller.setExpandedHeight(expandedHeight);
updateKeyguardBottomAreaAlpha();
setOpening(expandedHeight <= getOpeningHeight());

View File

@@ -306,6 +306,7 @@ public abstract class PanelView extends FrameLayout {
}
break;
case MotionEvent.ACTION_MOVE:
trackMovement(event);
float h = y - mInitialTouchY;
// If the panel was collapsed when touching, we only need to check for the
@@ -346,8 +347,6 @@ public abstract class PanelView extends FrameLayout {
!isTrackingBlocked()) {
setExpandedHeightInternal(newHeight);
}
trackMovement(event);
break;
case MotionEvent.ACTION_UP:
@@ -449,6 +448,14 @@ public abstract class PanelView extends FrameLayout {
mPeekTouching = false;
}
protected float getCurrentExpandVelocity() {
if (mVelocityTracker == null) {
return 0;
}
mVelocityTracker.computeCurrentVelocity(1000);
return mVelocityTracker.getYVelocity();
}
private int getFalsingThreshold() {
float factor = mStatusBar.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
return (int) (mUnlockFalsingThreshold * factor);

View File

@@ -55,6 +55,9 @@ public class AmbientState {
private ActivatableNotificationView mLastVisibleBackgroundChild;
private float mCurrentScrollVelocity;
private int mStatusBarState;
private float mExpandingVelocity;
private boolean mPanelTracking;
private boolean mExpansionChanging;
public AmbientState(Context context) {
reload(context);
@@ -260,4 +263,28 @@ public class AmbientState {
public void setStatusBarState(int statusBarState) {
mStatusBarState = statusBarState;
}
public void setExpandingVelocity(float expandingVelocity) {
mExpandingVelocity = expandingVelocity;
}
public void setExpansionChanging(boolean expansionChanging) {
mExpansionChanging = expansionChanging;
}
public boolean isExpansionChanging() {
return mExpansionChanging;
}
public float getExpandingVelocity() {
return mExpandingVelocity;
}
public void setPanelTracking(boolean panelTracking) {
mPanelTracking = panelTracking;
}
public boolean isPanelTracking() {
return mPanelTracking;
}
}

View File

@@ -3124,10 +3124,12 @@ public class NotificationStackScrollLayout extends ViewGroup
public void onExpansionStarted() {
mIsExpansionChanging = true;
mAmbientState.setExpansionChanging(true);
}
public void onExpansionStopped() {
mIsExpansionChanging = false;
mAmbientState.setExpansionChanging(false);
if (!mIsExpanded) {
setOwnScrollY(0);
mPhoneStatusBar.resetUserExpandedStates();
@@ -3155,9 +3157,11 @@ public class NotificationStackScrollLayout extends ViewGroup
public void onPanelTrackingStarted() {
mPanelTracking = true;
mAmbientState.setPanelTracking(true);
}
public void onPanelTrackingStopped() {
mPanelTracking = false;
mAmbientState.setPanelTracking(false);
}
public void resetScrollPosition() {
@@ -3987,6 +3991,10 @@ public class NotificationStackScrollLayout extends ViewGroup
mAmbientState.setStatusBarState(statusBarState);
}
public void setExpandingVelocity(float expandingVelocity) {
mAmbientState.setExpandingVelocity(expandingVelocity);
}
/**
* A listener that is notified when some child locations might have changed.
*/

View File

@@ -568,7 +568,26 @@ public class ViewState {
}
}
public static boolean isAnimatingY(ExpandableView child) {
public static boolean isAnimatingY(View child) {
return getChildTag(child, TAG_ANIMATOR_TRANSLATION_Y) != null;
}
public void cancelAnimations(View view) {
Animator animator = getChildTag(view, TAG_ANIMATOR_TRANSLATION_X);
if (animator != null) {
animator.cancel();
}
animator = getChildTag(view, TAG_ANIMATOR_TRANSLATION_Y);
if (animator != null) {
animator.cancel();
}
animator = getChildTag(view, TAG_ANIMATOR_TRANSLATION_Z);
if (animator != null) {
animator.cancel();
}
animator = getChildTag(view, TAG_ANIMATOR_ALPHA);
if (animator != null) {
animator.cancel();
}
}
}