summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Teng-Hui Zhu <ztenghui@google.com> 2016-06-29 16:56:40 -0700
committer Ian Pedowitz <ijpedowitz@google.com> 2016-06-30 23:11:48 +0000
commitab1cbc2c53f051aaafe4d43242d6acfd08cbf158 (patch)
tree10936150f9c07e2b4ec0ee8329eb0123a748296e
parenta6a3ca8dace44b469a5577b2af15d85db7512ad6 (diff)
Mutate the drawable if a valid state change happen
In another word, create another cached bitmap, when the current VectorDrawable will look differently when state changed. Bug: 29870392 Bug: 29854240 Change-Id: I7a5ef91091e547a930368286defc7ab96aeb9471 (cherry picked from commit 4f1acfb5f507798daaff2ff0da47d2b15607ded4)
-rw-r--r--graphics/java/android/graphics/drawable/VectorDrawable.java9
1 files changed, 6 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index 7b8dc52bc3b4..c855c4c6d17b 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -240,9 +240,7 @@ public class VectorDrawable extends Drawable {
* constructors to set the state and initialize local properties.
*/
private VectorDrawable(@NonNull VectorDrawableState state, @Nullable Resources res) {
- // Constant state sharing is disabled until we fix onStateChanged()
- // affecting the shared bitmap.
- mVectorState = new VectorDrawableState(state);
+ mVectorState = state;
updateLocalState(res);
}
@@ -388,6 +386,11 @@ public class VectorDrawable extends Drawable {
protected boolean onStateChange(int[] stateSet) {
boolean changed = false;
+ // When the VD is stateful, we need to mutate the drawable such that we don't share the
+ // cache bitmap with others. Such that the state change only affect this new cached bitmap.
+ if (isStateful()) {
+ mutate();
+ }
final VectorDrawableState state = mVectorState;
if (state.onStateChange(stateSet)) {
changed = true;