Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f1acfb5 authored by Teng-Hui Zhu's avatar Teng-Hui Zhu Committed by Tenghui Zhu
Browse files

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.

b/29870392

Change-Id: I7a5ef91091e547a930368286defc7ab96aeb9471
parent 74f7f2ec
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -243,9 +243,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);
    }

@@ -391,6 +389,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;