summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/ViewTreeObserver.java
diff options
context:
space:
mode:
authorFilip Gruszczynski <gruszczy@google.com>2014-11-21 10:21:19 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-11-21 10:21:19 +0000
commit5ea0411f3900064f1d65b93bbe306525398ee4d7 (patch)
treeaff0fd304fb4c0da3f5b464784154e3fffeb3671 /core/java/android/view/ViewTreeObserver.java
parent5a75a660c0db30fcf0ab748d9907ec2374603232 (diff)
parenta83c5806ded083f51549ba4bf70e0c1f6a17fc61 (diff)
downloadframeworks_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.java49
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.