Fix issues with TrustDrawable

Ensures that the drawable is invalidated whenever the state changes.
Also moves the mAnimating check such that we never update state when
the animation is stopped.

Bug: 17915865
Change-Id: I299597e08d4bac9a5551686cd5d987138e4b3c47
This commit is contained in:
Adrian Roos
2014-10-15 14:56:28 +02:00
parent f55cdab4bf
commit 1540da4624

View File

@@ -133,6 +133,7 @@ public class TrustDrawable extends Drawable {
if (!mAnimating) {
mAnimating = true;
updateState(true);
invalidateSelf();
}
}
@@ -146,18 +147,21 @@ public class TrustDrawable extends Drawable {
mState = STATE_UNSET;
mCurAlpha = 0;
mCurInnerRadius = mInnerRadiusEnter;
invalidateSelf();
}
}
public void setTrustManaged(boolean trustManaged) {
if (trustManaged == mTrustManaged && mState != STATE_UNSET) return;
mTrustManaged = trustManaged;
if (mAnimating) {
updateState(true);
}
updateState(true);
}
private void updateState(boolean animate) {
private void updateState(boolean allowTransientState) {
if (!mAnimating) {
return;
}
int nextState = mState;
if (mState == STATE_UNSET) {
nextState = mTrustManaged ? STATE_ENTERING : STATE_GONE;
@@ -170,7 +174,7 @@ public class TrustDrawable extends Drawable {
} else if (mState == STATE_EXITING) {
if (mTrustManaged) nextState = STATE_ENTERING;
}
if (!animate) {
if (!allowTransientState) {
if (nextState == STATE_ENTERING) nextState = STATE_VISIBLE;
if (nextState == STATE_EXITING) nextState = STATE_GONE;
}
@@ -200,9 +204,8 @@ public class TrustDrawable extends Drawable {
mState = nextState;
if (mCurAnimator != null) {
mCurAnimator.start();
} else {
invalidateSelf();
}
invalidateSelf();
}
}