diff options
| author | Chet Haase <chet@google.com> | 2012-04-19 11:05:28 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-04-19 11:05:28 -0700 |
| commit | 0e5bd8da9df001bedc0a61f625f84b742960ce3a (patch) | |
| tree | 5e45435516b2b01d3de289601050e747cd5d07e3 /core/java | |
| parent | c9496495baa031d1e6af9fd438c7d007a5d59b4e (diff) | |
| parent | 563d4f2d461d264457b7e7068e2fc7b9b0bcafb3 (diff) | |
| download | frameworks_base-0e5bd8da9df001bedc0a61f625f84b742960ce3a.zip frameworks_base-0e5bd8da9df001bedc0a61f625f84b742960ce3a.tar.gz frameworks_base-0e5bd8da9df001bedc0a61f625f84b742960ce3a.tar.bz2 | |
Merge "Make ViewPropertyAnimator ListView-animation-capable"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/View.java | 39 | ||||
| -rw-r--r-- | core/java/android/view/ViewPropertyAnimator.java | 2 |
2 files changed, 30 insertions, 11 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 7e5fe63..537c474 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -2472,6 +2472,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal int mSystemUiVisibility; /** + * Reference count for transient state. + * @see #setHasTransientState(boolean) + */ + int mTransientStateCount = 0; + + /** * Count of how many windows this view has been attached to. */ int mWindowAttachCount; @@ -5400,21 +5406,32 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal /** * Set whether this view is currently tracking transient state that the - * framework should attempt to preserve when possible. + * framework should attempt to preserve when possible. This flag is reference counted, + * so every call to setHasTransientState(true) should be paired with a later call + * to setHasTransientState(false). * * @param hasTransientState true if this view has transient state */ public void setHasTransientState(boolean hasTransientState) { - if (hasTransientState() == hasTransientState) return; - - mPrivateFlags2 = (mPrivateFlags2 & ~HAS_TRANSIENT_STATE) | - (hasTransientState ? HAS_TRANSIENT_STATE : 0); - if (mParent != null) { - try { - mParent.childHasTransientStateChanged(this, hasTransientState); - } catch (AbstractMethodError e) { - Log.e(VIEW_LOG_TAG, mParent.getClass().getSimpleName() + - " does not fully implement ViewParent", e); + mTransientStateCount = hasTransientState ? mTransientStateCount + 1 : + mTransientStateCount - 1; + if (mTransientStateCount < 0) { + mTransientStateCount = 0; + Log.e(VIEW_LOG_TAG, "hasTransientState decremented below 0: " + + "unmatched pair of setHasTransientState calls"); + } + if ((hasTransientState && mTransientStateCount == 1) || + (hasTransientState && mTransientStateCount == 0)) { + // update flag if we've just incremented up from 0 or decremented down to 0 + mPrivateFlags2 = (mPrivateFlags2 & ~HAS_TRANSIENT_STATE) | + (hasTransientState ? HAS_TRANSIENT_STATE : 0); + if (mParent != null) { + try { + mParent.childHasTransientStateChanged(this, hasTransientState); + } catch (AbstractMethodError e) { + Log.e(VIEW_LOG_TAG, mParent.getClass().getSimpleName() + + " does not fully implement ViewParent", e); + } } } } diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java index 3626aba..e573056 100644 --- a/core/java/android/view/ViewPropertyAnimator.java +++ b/core/java/android/view/ViewPropertyAnimator.java @@ -714,6 +714,7 @@ public class ViewPropertyAnimator { * value accordingly. */ private void startAnimation() { + mView.setHasTransientState(true); ValueAnimator animator = ValueAnimator.ofFloat(1.0f); ArrayList<NameValuesHolder> nameValueList = (ArrayList<NameValuesHolder>) mPendingAnimations.clone(); @@ -960,6 +961,7 @@ public class ViewPropertyAnimator { @Override public void onAnimationEnd(Animator animation) { + mView.setHasTransientState(false); if (mListener != null) { mListener.onAnimationEnd(animation); } |
