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
diff --git a/v4/java/android/support/v4/widget/SwipeRefreshLayout.java b/v4/java/android/support/v4/widget/SwipeRefreshLayout.java
index 18b762c..06db6f2 100644
--- a/v4/java/android/support/v4/widget/SwipeRefreshLayout.java
+++ b/v4/java/android/support/v4/widget/SwipeRefreshLayout.java
@@ -185,22 +185,34 @@
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);