diff options
author | Filip Gruszczynski <gruszczy@google.com> | 2014-11-21 10:21:19 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-11-21 10:21:19 +0000 |
commit | 5ea0411f3900064f1d65b93bbe306525398ee4d7 (patch) | |
tree | aff0fd304fb4c0da3f5b464784154e3fffeb3671 /core/java/android/view/ViewTreeObserver.java | |
parent | 5a75a660c0db30fcf0ab748d9907ec2374603232 (diff) | |
parent | a83c5806ded083f51549ba4bf70e0c1f6a17fc61 (diff) | |
download | frameworks_base-5ea0411f3900064f1d65b93bbe306525398ee4d7.zip frameworks_base-5ea0411f3900064f1d65b93bbe306525398ee4d7.tar.gz frameworks_base-5ea0411f3900064f1d65b93bbe306525398ee4d7.tar.bz2 |
am a83c5806: Merge "SwipeDismissLayout makes activity opaque only after entry animation ends." into lmp-sprout-dev automerge: 96c5d37
* commit 'a83c5806ded083f51549ba4bf70e0c1f6a17fc61':
SwipeDismissLayout makes activity opaque only after entry animation ends.
Diffstat (limited to 'core/java/android/view/ViewTreeObserver.java')
-rw-r--r-- | core/java/android/view/ViewTreeObserver.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java index b85fec8..521fd31 100644 --- a/core/java/android/view/ViewTreeObserver.java +++ b/core/java/android/view/ViewTreeObserver.java @@ -37,6 +37,8 @@ public final class ViewTreeObserver { private CopyOnWriteArrayList<OnWindowAttachListener> mOnWindowAttachListeners; private CopyOnWriteArrayList<OnGlobalFocusChangeListener> mOnGlobalFocusListeners; private CopyOnWriteArrayList<OnTouchModeChangeListener> mOnTouchModeChangeListeners; + private CopyOnWriteArrayList<OnEnterAnimationCompleteListener> + mOnEnterAnimationCompleteListeners; // Non-recursive listeners use CopyOnWriteArray // Any listener invoked from ViewRootImpl.performTraversals() should not be recursive @@ -316,6 +318,13 @@ public final class ViewTreeObserver { } /** + * @hide + */ + public interface OnEnterAnimationCompleteListener { + public void onEnterAnimationComplete(); + } + + /** * Creates a new ViewTreeObserver. This constructor should not be called */ ViewTreeObserver() { @@ -780,6 +789,29 @@ public final class ViewTreeObserver { mOnComputeInternalInsetsListeners.remove(victim); } + /** + * @hide + */ + public void addOnEnterAnimationCompleteListener(OnEnterAnimationCompleteListener listener) { + checkIsAlive(); + if (mOnEnterAnimationCompleteListeners == null) { + mOnEnterAnimationCompleteListeners = + new CopyOnWriteArrayList<OnEnterAnimationCompleteListener>(); + } + mOnEnterAnimationCompleteListeners.add(listener); + } + + /** + * @hide + */ + public void removeOnEnterAnimationCompleteListener(OnEnterAnimationCompleteListener listener) { + checkIsAlive(); + if (mOnEnterAnimationCompleteListeners == null) { + return; + } + mOnEnterAnimationCompleteListeners.remove(listener); + } + private void checkIsAlive() { if (!mAlive) { throw new IllegalStateException("This ViewTreeObserver is not alive, call " @@ -1022,6 +1054,23 @@ public final class ViewTreeObserver { } /** + * @hide + */ + public final void dispatchOnEnterAnimationComplete() { + // NOTE: because of the use of CopyOnWriteArrayList, we *must* use an iterator to + // perform the dispatching. The iterator is a safe guard against listeners that + // could mutate the list by calling the various add/remove methods. This prevents + // the array from being modified while we iterate it. + final CopyOnWriteArrayList<OnEnterAnimationCompleteListener> listeners = + mOnEnterAnimationCompleteListeners; + if (listeners != null && !listeners.isEmpty()) { + for (OnEnterAnimationCompleteListener listener : listeners) { + listener.onEnterAnimationComplete(); + } + } + } + + /** * Copy on write array. This array is not thread safe, and only one loop can * iterate over this array at any given time. This class avoids allocations * until a concurrent modification happens. |