summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/Switch.java18
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java9
2 files changed, 25 insertions, 2 deletions
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 8b97329646b4..a8980849af43 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -208,7 +208,13 @@ public class Switch extends CompoundButton {
final TypedArray a = context.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.Switch, defStyleAttr, defStyleRes);
mThumbDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_thumb);
+ if (mThumbDrawable != null) {
+ mThumbDrawable.setCallback(this);
+ }
mTrackDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_track);
+ if (mTrackDrawable != null) {
+ mTrackDrawable.setCallback(this);
+ }
mTextOn = a.getText(com.android.internal.R.styleable.Switch_textOn);
mTextOff = a.getText(com.android.internal.R.styleable.Switch_textOff);
mShowText = a.getBoolean(com.android.internal.R.styleable.Switch_showText, true);
@@ -433,7 +439,13 @@ public class Switch extends CompoundButton {
* @attr ref android.R.styleable#Switch_track
*/
public void setTrackDrawable(Drawable track) {
+ if (mTrackDrawable != null) {
+ mTrackDrawable.setCallback(null);
+ }
mTrackDrawable = track;
+ if (track != null) {
+ track.setCallback(this);
+ }
requestLayout();
}
@@ -468,7 +480,13 @@ public class Switch extends CompoundButton {
* @attr ref android.R.styleable#Switch_thumb
*/
public void setThumbDrawable(Drawable thumb) {
+ if (mThumbDrawable != null) {
+ mThumbDrawable.setCallback(null);
+ }
mThumbDrawable = thumb;
+ if (thumb != null) {
+ thumb.setCallback(this);
+ }
requestLayout();
}
diff --git a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
index f7584d8ff85a..d78138bc3614 100644
--- a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
@@ -91,7 +91,8 @@ public class AnimatedStateListDrawable extends StateListDrawable {
if (visible) {
mTransition.start();
} else {
- mTransition.stop();
+ // Ensure we're showing the correct state when visible.
+ jumpToCurrentState();
}
}
@@ -140,7 +141,11 @@ public class AnimatedStateListDrawable extends StateListDrawable {
protected boolean onStateChange(int[] stateSet) {
final int keyframeIndex = mState.indexOfKeyframe(stateSet);
if (keyframeIndex == getCurrentIndex()) {
- // No transition needed.
+ // Propagate state change to current keyframe.
+ final Drawable current = getCurrent();
+ if (current != null) {
+ return current.setState(stateSet);
+ }
return false;
}