summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurimas Liutikas <aurimas@google.com>2015-11-19 11:23:22 -0800
committerAurimas Liutikas <aurimas@google.com>2015-11-19 22:44:26 +0000
commit7c78904c44cfd4cef02e41ef3f341e9f87047d66 (patch)
tree23e3ded66232afe3209155c11555ffdacd0ca853
parent27f59164a0d383cb7df89858d457725e39c52ee7 (diff)
downloadandroid_frameworks_support-7c78904c44cfd4cef02e41ef3f341e9f87047d66.tar.gz
android_frameworks_support-7c78904c44cfd4cef02e41ef3f341e9f87047d66.tar.bz2
android_frameworks_support-7c78904c44cfd4cef02e41ef3f341e9f87047d66.zip
Reset SwipeRefreshLayout on window detaches.
This fixes a bug when SwipeRefreshLayout gets detached when scale down animation is still playing causing onAnimationEnd to never get called. Bug: 21515801 Change-Id: Ieece09f8900fa47c14b81229490f047a55e156ba
-rw-r--r--v4/java/android/support/v4/widget/SwipeRefreshLayout.java34
1 files changed, 23 insertions, 11 deletions
diff --git a/v4/java/android/support/v4/widget/SwipeRefreshLayout.java b/v4/java/android/support/v4/widget/SwipeRefreshLayout.java
index 18b762cfd2..06db6f2f29 100644
--- a/v4/java/android/support/v4/widget/SwipeRefreshLayout.java
+++ b/v4/java/android/support/v4/widget/SwipeRefreshLayout.java
@@ -185,22 +185,34 @@ public class SwipeRefreshLayout extends ViewGroup implements NestedScrollingPare
mListener.onRefresh();
}
}
+ mCurrentTargetOffsetTop = mCircleView.getTop();
} else {
- mProgress.stop();
- mCircleView.setVisibility(View.GONE);
- setColorViewAlpha(MAX_ALPHA);
- // Return the circle to its start position
- if (mScale) {
- setAnimationProgress(0 /* animation complete and view is hidden */);
- } else {
- setTargetOffsetTopAndBottom(mOriginalOffsetTop - mCurrentTargetOffsetTop,
- true /* requires update */);
- }
+ reset();
}
- mCurrentTargetOffsetTop = mCircleView.getTop();
}
};
+ private void reset() {
+ mCircleView.clearAnimation();
+ mProgress.stop();
+ mCircleView.setVisibility(View.GONE);
+ setColorViewAlpha(MAX_ALPHA);
+ // Return the circle to its start position
+ if (mScale) {
+ setAnimationProgress(0 /* animation complete and view is hidden */);
+ } else {
+ setTargetOffsetTopAndBottom(mOriginalOffsetTop - mCurrentTargetOffsetTop,
+ true /* requires update */);
+ }
+ mCurrentTargetOffsetTop = mCircleView.getTop();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ reset();
+ }
+
private void setColorViewAlpha(int targetAlpha) {
mCircleView.getBackground().setAlpha(targetAlpha);
mProgress.setAlpha(targetAlpha);