diff options
author | Yorke Lee <yorkelee@google.com> | 2013-08-05 20:34:40 -0700 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2013-08-22 08:56:13 -0700 |
commit | c36684277aa45085999284bfe71cb8be71b3a464 (patch) | |
tree | f5aab137e7bf3390dfb8e9007b9e289a550ee90d /src/com/android/dialer/list/PhoneFavoriteTileView.java | |
parent | 2c0ea3b35b9983619c12ab0a4f50e14cc70f801e (diff) |
Rewrite animation logic
* Remove old animation-related code. In the past, animations would be applied to a
view everytime getView was called. This is no longer the case so it fixes the issue of
animations triggering everytime the list was scrolled, dialpad opened, etc.
* Make PhoneFavoriteMergedAdapter (and PhoneFavoritesTileAdapter) return stable IDs, so
that they can be used for animations. The ID schemes are described below:
(N + 1) to -2: CallLogAdapterItems, where N is equal to the number of call log items
-1: All contacts button
0 to (N -1): Rows of tiled contacts, where N is equal to the max rows of tiled contacts
N to infinity: Rows of regular contacts. Their item id is calculated by N + contact_id,
where contact_id is guaranteed to never be negative.
* Perform animations by saving each view's offset before the data set changes, and then
applying a translation animation to them based on their new offsets in the updated list view.
This is the same method described by the framework team at :
http://graphics-geek.blogspot.com/2013/06/devbytes-animating-listview-deletion.html
In our case, we need to perform both horizontal and vertical animations because of the
contact tile favorites.
Bug: 10294203
Change-Id: I3ea4ff9995c539267410a264dbbea5ffa02bc6e3
Diffstat (limited to 'src/com/android/dialer/list/PhoneFavoriteTileView.java')
-rw-r--r-- | src/com/android/dialer/list/PhoneFavoriteTileView.java | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/com/android/dialer/list/PhoneFavoriteTileView.java b/src/com/android/dialer/list/PhoneFavoriteTileView.java index dc82f73a4..8887a2c47 100644 --- a/src/com/android/dialer/list/PhoneFavoriteTileView.java +++ b/src/com/android/dialer/list/PhoneFavoriteTileView.java @@ -144,6 +144,18 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { animSet.playTogether(fadeIn); } + animSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mParentRow.setHasTransientState(true); + }; + + @Override + public void onAnimationEnd(Animator animation) { + mParentRow.setHasTransientState(false); + } + }); + animSet.start(); } @@ -164,19 +176,22 @@ public abstract class PhoneFavoriteTileView extends ContactTileView { "alpha", 255).setDuration(ANIMATION_LENGTH); final AnimatorSet animSet = new AnimatorSet(); animSet.playTogether(fadeIn, moveBack, backgroundFadeOut); - animSet.start(); animSet.addListener(new AnimatorListenerAdapter() { @Override + public void onAnimationStart(Animator animation) { + mParentRow.setHasTransientState(true); + } + @Override public void onAnimationEnd(Animator animation) { if (mParentRow.getItemViewType() == ViewTypes.FREQUENT) { SwipeHelper.setSwipeable(mParentRow, true); } else { SwipeHelper.setSwipeable(PhoneFavoriteTileView.this, true); } + mParentRow.setHasTransientState(false); } }); - - + animSet.start(); // Signals the PhoneFavoritesTileAdapter to undo the potential delete. mParentRow.getTileAdapter().undoPotentialRemoveEntryIndex(); } |