am 5bce77b1: Merge changes Idc1e6e52,If1729a01
* commit '5bce77b17aae18aff7a2f538051956a48fa66888': Allow different animation lengths in StackStateAnimator. Only handle scroll events when over content.
This commit is contained in:
@@ -516,7 +516,7 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
|
||||
switch (action & MotionEvent.ACTION_MASK) {
|
||||
case MotionEvent.ACTION_DOWN: {
|
||||
if (getChildCount() == 0) {
|
||||
if (getChildCount() == 0 || !isInContentBounds(ev)) {
|
||||
return false;
|
||||
}
|
||||
boolean isBeingDragged = !mScroller.isFinished();
|
||||
@@ -1140,6 +1140,13 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
return mIsBeingDragged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Whether the specified motion event is actually happening over the content.
|
||||
*/
|
||||
private boolean isInContentBounds(MotionEvent event) {
|
||||
return event.getY() < getHeight() - getEmptyBottomMargin();
|
||||
}
|
||||
|
||||
private void setIsBeingDragged(boolean isDragged) {
|
||||
mIsBeingDragged = isDragged;
|
||||
if (isDragged) {
|
||||
@@ -1308,6 +1315,33 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
.animateDimmed()
|
||||
};
|
||||
|
||||
static int[] LENGTHS = new int[] {
|
||||
|
||||
// ANIMATION_TYPE_ADD
|
||||
StackStateAnimator.ANIMATION_DURATION_STANDARD,
|
||||
|
||||
// ANIMATION_TYPE_REMOVE
|
||||
StackStateAnimator.ANIMATION_DURATION_STANDARD,
|
||||
|
||||
// ANIMATION_TYPE_REMOVE_SWIPED_OUT
|
||||
StackStateAnimator.ANIMATION_DURATION_STANDARD,
|
||||
|
||||
// ANIMATION_TYPE_TOP_PADDING_CHANGED
|
||||
StackStateAnimator.ANIMATION_DURATION_STANDARD,
|
||||
|
||||
// ANIMATION_TYPE_START_DRAG
|
||||
StackStateAnimator.ANIMATION_DURATION_STANDARD,
|
||||
|
||||
// ANIMATION_TYPE_SNAP_BACK
|
||||
StackStateAnimator.ANIMATION_DURATION_STANDARD,
|
||||
|
||||
// ANIMATION_TYPE_ACTIVATED_CHILD
|
||||
StackStateAnimator.ANIMATION_DURATION_DIMMED_ACTIVATED,
|
||||
|
||||
// ANIMATION_TYPE_DIMMED
|
||||
StackStateAnimator.ANIMATION_DURATION_DIMMED_ACTIVATED,
|
||||
};
|
||||
|
||||
static int ANIMATION_TYPE_ADD = 0;
|
||||
static int ANIMATION_TYPE_REMOVE = 1;
|
||||
static int ANIMATION_TYPE_REMOVE_SWIPED_OUT = 2;
|
||||
@@ -1321,12 +1355,29 @@ public class NotificationStackScrollLayout extends ViewGroup
|
||||
final View changingView;
|
||||
final int animationType;
|
||||
final AnimationFilter filter;
|
||||
final long length;
|
||||
|
||||
AnimationEvent(View view, int type) {
|
||||
eventStartTime = AnimationUtils.currentAnimationTimeMillis();
|
||||
changingView = view;
|
||||
animationType = type;
|
||||
filter = FILTERS[type];
|
||||
length = LENGTHS[type];
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines the length of several animation events into a single value.
|
||||
*
|
||||
* @param events The events of the lengths to combine.
|
||||
* @return The combined length. This is just the maximum of all length.
|
||||
*/
|
||||
static long combineLength(ArrayList<AnimationEvent> events) {
|
||||
long length = 0;
|
||||
int size = events.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
length = Math.max(length, events.get(i).length);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,9 @@ import java.util.Stack;
|
||||
*/
|
||||
public class StackStateAnimator {
|
||||
|
||||
private static final int ANIMATION_DURATION = 360;
|
||||
public static final int ANIMATION_DURATION_STANDARD = 360;
|
||||
public static final int ANIMATION_DURATION_DIMMED_ACTIVATED = 220;
|
||||
|
||||
private static final int TAG_ANIMATOR_TRANSLATION_Y = R.id.translation_y_animator_tag;
|
||||
private static final int TAG_ANIMATOR_TRANSLATION_Z = R.id.translation_z_animator_tag;
|
||||
private static final int TAG_ANIMATOR_SCALE = R.id.scale_animator_tag;
|
||||
@@ -63,6 +65,7 @@ public class StackStateAnimator {
|
||||
private Stack<AnimatorListenerAdapter> mAnimationListenerPool
|
||||
= new Stack<AnimatorListenerAdapter>();
|
||||
private AnimationFilter mAnimationFilter = new AnimationFilter();
|
||||
private long mCurrentLength;
|
||||
|
||||
public StackStateAnimator(NotificationStackScrollLayout hostLayout) {
|
||||
mHostLayout = hostLayout;
|
||||
@@ -82,6 +85,7 @@ public class StackStateAnimator {
|
||||
|
||||
int childCount = mHostLayout.getChildCount();
|
||||
mAnimationFilter.applyCombination(mNewEvents);
|
||||
mCurrentLength = NotificationStackScrollLayout.AnimationEvent.combineLength(mNewEvents);
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
final ExpandableView child = (ExpandableView) mHostLayout.getChildAt(i);
|
||||
StackScrollState.ViewState viewState = finalState.getViewStateForView(child);
|
||||
@@ -410,7 +414,7 @@ public class StackStateAnimator {
|
||||
*/
|
||||
private long cancelAnimatorAndGetNewDuration(ValueAnimator previousAnimator,
|
||||
boolean newAnimationNeeded) {
|
||||
long newDuration = ANIMATION_DURATION;
|
||||
long newDuration = mCurrentLength;
|
||||
if (previousAnimator != null) {
|
||||
if (!newAnimationNeeded) {
|
||||
// This is only an update, no new event came in. lets just take the remaining
|
||||
|
||||
Reference in New Issue
Block a user