diff options
22 files changed, 333 insertions, 402 deletions
diff --git a/core/res/res/drawable/vector_drawable_progress_bar_large.xml b/core/res/res/drawable/vector_drawable_progress_bar_large.xml index 023f5cc9db44..cd678f1c9d81 100644 --- a/core/res/res/drawable/vector_drawable_progress_bar_large.xml +++ b/core/res/res/drawable/vector_drawable_progress_bar_large.xml @@ -17,7 +17,8 @@ android:height="76dp" android:width="76dp" android:viewportHeight="48" - android:viewportWidth="48" > + android:viewportWidth="48" + android:tint="?attr/colorControlActivated"> <group android:name="root" @@ -27,7 +28,7 @@ android:name="progressBar" android:fillColor="#00000000" android:pathData="M0, 0 m 0, -19 a 19,19 0 1,1 0,38 a 19,19 0 1,1 0,-38" - android:strokeColor="?attr/colorControlActivated" + android:strokeColor="@color/white" android:strokeLineCap="square" android:strokeLineJoin="miter" android:strokeWidth="4" diff --git a/core/res/res/drawable/vector_drawable_progress_bar_medium.xml b/core/res/res/drawable/vector_drawable_progress_bar_medium.xml index e72097ebbf68..7f038f44b197 100644 --- a/core/res/res/drawable/vector_drawable_progress_bar_medium.xml +++ b/core/res/res/drawable/vector_drawable_progress_bar_medium.xml @@ -17,7 +17,8 @@ android:height="48dp" android:width="48dp" android:viewportHeight="48" - android:viewportWidth="48" > + android:viewportWidth="48" + android:tint="?attr/colorControlActivated"> <group android:name="root" @@ -27,7 +28,7 @@ android:name="progressBar" android:fillColor="#00000000" android:pathData="M0, 0 m 0, -19 a 19,19 0 1,1 0,38 a 19,19 0 1,1 0,-38" - android:strokeColor="?attr/colorControlActivated" + android:strokeColor="@color/white" android:strokeLineCap="square" android:strokeLineJoin="miter" android:strokeWidth="4" diff --git a/core/res/res/drawable/vector_drawable_progress_bar_small.xml b/core/res/res/drawable/vector_drawable_progress_bar_small.xml index 875e7a333ece..562578859be4 100644 --- a/core/res/res/drawable/vector_drawable_progress_bar_small.xml +++ b/core/res/res/drawable/vector_drawable_progress_bar_small.xml @@ -17,7 +17,8 @@ android:height="16dp" android:width="16dp" android:viewportHeight="48" - android:viewportWidth="48" > + android:viewportWidth="48" + android:tint="?attr/colorControlActivated"> <group android:name="root" @@ -27,7 +28,7 @@ android:name="progressBar" android:fillColor="#00000000" android:pathData="M0, 0 m 0, -19 a 19,19 0 1,1 0,38 a 19,19 0 1,1 0,-38" - android:strokeColor="?attr/colorControlActivated" + android:strokeColor="@color/white" android:strokeLineCap="square" android:strokeLineJoin="miter" android:strokeWidth="4" diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index a8b5d6d5fe29..bb9885c9d890 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -298,162 +298,75 @@ <item>@drawable/quickcontact_badge_overlay_pressed_light</item> <!-- Material assets --> - <item>@drawable/ab_share_pack_mtrl_alpha</item> - <item>@drawable/ab_solid_shadow_mtrl_alpha</item> - <item>@drawable/btn_cab_done_mtrl_alpha</item> - <item>@drawable/btn_check_to_off_mtrl_000</item> - <item>@drawable/btn_check_to_off_mtrl_001</item> - <item>@drawable/btn_check_to_off_mtrl_002</item> - <item>@drawable/btn_check_to_off_mtrl_003</item> - <item>@drawable/btn_check_to_off_mtrl_004</item> - <item>@drawable/btn_check_to_off_mtrl_005</item> - <item>@drawable/btn_check_to_off_mtrl_006</item> - <item>@drawable/btn_check_to_off_mtrl_007</item> - <item>@drawable/btn_check_to_off_mtrl_008</item> - <item>@drawable/btn_check_to_off_mtrl_009</item> - <item>@drawable/btn_check_to_off_mtrl_010</item> - <item>@drawable/btn_check_to_off_mtrl_011</item> - <item>@drawable/btn_check_to_off_mtrl_012</item> - <item>@drawable/btn_check_to_off_mtrl_013</item> - <item>@drawable/btn_check_to_off_mtrl_014</item> - <item>@drawable/btn_check_to_off_mtrl_015</item> - <item>@drawable/btn_check_to_on_mtrl_000</item> - <item>@drawable/btn_check_to_on_mtrl_001</item> - <item>@drawable/btn_check_to_on_mtrl_002</item> - <item>@drawable/btn_check_to_on_mtrl_003</item> - <item>@drawable/btn_check_to_on_mtrl_004</item> - <item>@drawable/btn_check_to_on_mtrl_005</item> - <item>@drawable/btn_check_to_on_mtrl_006</item> - <item>@drawable/btn_check_to_on_mtrl_007</item> - <item>@drawable/btn_check_to_on_mtrl_008</item> - <item>@drawable/btn_check_to_on_mtrl_009</item> - <item>@drawable/btn_check_to_on_mtrl_010</item> - <item>@drawable/btn_check_to_on_mtrl_011</item> - <item>@drawable/btn_check_to_on_mtrl_012</item> - <item>@drawable/btn_check_to_on_mtrl_013</item> - <item>@drawable/btn_check_to_on_mtrl_014</item> - <item>@drawable/btn_check_to_on_mtrl_015</item> - <item>@drawable/btn_radio_to_off_mtrl_000</item> - <item>@drawable/btn_radio_to_off_mtrl_001</item> - <item>@drawable/btn_radio_to_off_mtrl_002</item> - <item>@drawable/btn_radio_to_off_mtrl_003</item> - <item>@drawable/btn_radio_to_off_mtrl_004</item> - <item>@drawable/btn_radio_to_off_mtrl_005</item> - <item>@drawable/btn_radio_to_off_mtrl_006</item> - <item>@drawable/btn_radio_to_off_mtrl_007</item> - <item>@drawable/btn_radio_to_off_mtrl_008</item> - <item>@drawable/btn_radio_to_off_mtrl_009</item> - <item>@drawable/btn_radio_to_off_mtrl_010</item> - <item>@drawable/btn_radio_to_off_mtrl_011</item> - <item>@drawable/btn_radio_to_off_mtrl_012</item> - <item>@drawable/btn_radio_to_off_mtrl_013</item> - <item>@drawable/btn_radio_to_off_mtrl_014</item> - <item>@drawable/btn_radio_to_off_mtrl_015</item> - <item>@drawable/btn_radio_to_on_mtrl_000</item> - <item>@drawable/btn_radio_to_on_mtrl_001</item> - <item>@drawable/btn_radio_to_on_mtrl_002</item> - <item>@drawable/btn_radio_to_on_mtrl_003</item> - <item>@drawable/btn_radio_to_on_mtrl_004</item> - <item>@drawable/btn_radio_to_on_mtrl_005</item> - <item>@drawable/btn_radio_to_on_mtrl_006</item> - <item>@drawable/btn_radio_to_on_mtrl_007</item> - <item>@drawable/btn_radio_to_on_mtrl_008</item> - <item>@drawable/btn_radio_to_on_mtrl_009</item> - <item>@drawable/btn_radio_to_on_mtrl_010</item> - <item>@drawable/btn_radio_to_on_mtrl_011</item> - <item>@drawable/btn_radio_to_on_mtrl_012</item> - <item>@drawable/btn_radio_to_on_mtrl_013</item> - <item>@drawable/btn_radio_to_on_mtrl_014</item> - <item>@drawable/btn_radio_to_on_mtrl_015</item> - <item>@drawable/btn_rating_star_off_mtrl_alpha</item> - <item>@drawable/btn_rating_star_on_mtrl_alpha</item> - <item>@drawable/btn_star_mtrl_alpha</item> - <item>@drawable/btn_switch_to_off_mtrl_00001</item> - <item>@drawable/btn_switch_to_off_mtrl_00002</item> - <item>@drawable/btn_switch_to_off_mtrl_00003</item> - <item>@drawable/btn_switch_to_off_mtrl_00004</item> - <item>@drawable/btn_switch_to_off_mtrl_00005</item> - <item>@drawable/btn_switch_to_off_mtrl_00006</item> - <item>@drawable/btn_switch_to_off_mtrl_00007</item> - <item>@drawable/btn_switch_to_off_mtrl_00008</item> - <item>@drawable/btn_switch_to_off_mtrl_00009</item> - <item>@drawable/btn_switch_to_off_mtrl_00010</item> - <item>@drawable/btn_switch_to_off_mtrl_00011</item> - <item>@drawable/btn_switch_to_off_mtrl_00012</item> - <item>@drawable/btn_switch_to_on_mtrl_00001</item> - <item>@drawable/btn_switch_to_on_mtrl_00002</item> - <item>@drawable/btn_switch_to_on_mtrl_00003</item> - <item>@drawable/btn_switch_to_on_mtrl_00004</item> - <item>@drawable/btn_switch_to_on_mtrl_00005</item> - <item>@drawable/btn_switch_to_on_mtrl_00006</item> - <item>@drawable/btn_switch_to_on_mtrl_00007</item> - <item>@drawable/btn_switch_to_on_mtrl_00008</item> - <item>@drawable/btn_switch_to_on_mtrl_00009</item> - <item>@drawable/btn_switch_to_on_mtrl_00010</item> - <item>@drawable/btn_switch_to_on_mtrl_00011</item> - <item>@drawable/btn_switch_to_on_mtrl_00012</item> - <item>@drawable/btn_toggle_indicator_mtrl_alpha</item> - <item>@drawable/expander_close_mtrl_alpha</item> - <item>@drawable/expander_open_mtrl_alpha</item> - <item>@drawable/fastscroll_thumb_mtrl_alpha</item> - <item>@drawable/fastscroll_track_mtrl_alpha</item> + <item>@drawable/ab_share_pack_material</item> + <item>@drawable/ab_solid_shadow_material</item> + <item>@drawable/activated_background_material</item> + <item>@drawable/btn_borderless_material</item> + <item>@drawable/btn_cab_done_material</item> + <item>@drawable/btn_check_material_anim</item> + <item>@drawable/btn_default_material</item> + <item>@drawable/btn_radio_material_anim</item> + <item>@drawable/btn_star_material</item> + <item>@drawable/btn_toggle_material</item> + <item>@drawable/cab_background_bottom_material</item> + <item>@drawable/cab_background_top_material</item> + <item>@drawable/dialog_background_material</item> + <item>@drawable/dialog_background_shadow_material</item> + <item>@drawable/edit_text_material</item> + <item>@drawable/expander_group_material</item> + <item>@drawable/fastscroll_label_left_material</item> + <item>@drawable/fastscroll_label_right_material</item> + <item>@drawable/fastscroll_thumb_material</item> + <item>@drawable/fastscroll_track_material</item> <item>@drawable/ic_ab_back_material</item> - <item>@drawable/ic_cab_done_mtrl_alpha</item> - <item>@drawable/ic_clear_mtrl_alpha</item> - <item>@drawable/ic_commit_search_api_mtrl_alpha</item> + <item>@drawable/ic_clear_material</item> + <item>@drawable/ic_commit_search_api_material</item> <item>@drawable/ic_dialog_alert_material</item> - <item>@drawable/ic_find_next_mtrl_alpha</item> - <item>@drawable/ic_find_previous_mtrl_alpha</item> + <item>@drawable/ic_find_next_material</item> + <item>@drawable/ic_find_previous_material</item> <item>@drawable/ic_go_search_api_material</item> - <item>@drawable/ic_media_route_disabled_mtrl_alpha</item> - <item>@drawable/ic_media_route_off_mtrl_alpha</item> - <item>@drawable/ic_media_route_on_0_mtrl_alpha</item> - <item>@drawable/ic_media_route_on_1_mtrl_alpha</item> - <item>@drawable/ic_media_route_on_2_mtrl_alpha</item> - <item>@drawable/ic_media_route_on_mtrl_alpha</item> + <item>@drawable/ic_media_route_connecting_material</item> + <item>@drawable/ic_media_route_material</item> <item>@drawable/ic_menu_copy_material</item> <item>@drawable/ic_menu_cut_material</item> - <item>@drawable/ic_menu_find_mtrl_alpha</item> + <item>@drawable/ic_menu_find_material</item> <item>@drawable/ic_menu_moreoverflow_material</item> <item>@drawable/ic_menu_paste_material</item> - <item>@drawable/ic_menu_search_mtrl_alpha</item> + <item>@drawable/ic_menu_search_material</item> <item>@drawable/ic_menu_selectall_material</item> <item>@drawable/ic_menu_share_material</item> <item>@drawable/ic_search_api_material</item> <item>@drawable/ic_voice_search_api_material</item> - <item>@drawable/list_divider_mtrl_alpha</item> - <item>@drawable/list_section_divider_mtrl_alpha</item> - <item>@drawable/popup_background_mtrl_mult</item> - <item>@drawable/progress_mtrl_alpha</item> - <item>@drawable/scrollbar_handle_mtrl_alpha</item> - <item>@drawable/scrubber_control_from_pressed_mtrl_000</item> - <item>@drawable/scrubber_control_from_pressed_mtrl_001</item> - <item>@drawable/scrubber_control_from_pressed_mtrl_002</item> - <item>@drawable/scrubber_control_from_pressed_mtrl_003</item> - <item>@drawable/scrubber_control_from_pressed_mtrl_004</item> - <item>@drawable/scrubber_control_from_pressed_mtrl_005</item> - <item>@drawable/scrubber_control_off_pressed_mtrl_alpha</item> - <item>@drawable/scrubber_control_off_mtrl_alpha</item> - <item>@drawable/scrubber_control_on_pressed_mtrl_alpha</item> - <item>@drawable/scrubber_control_on_mtrl_alpha</item> - <item>@drawable/scrubber_control_to_pressed_mtrl_000</item> - <item>@drawable/scrubber_control_to_pressed_mtrl_001</item> - <item>@drawable/scrubber_control_to_pressed_mtrl_002</item> - <item>@drawable/scrubber_control_to_pressed_mtrl_003</item> - <item>@drawable/scrubber_control_to_pressed_mtrl_004</item> - <item>@drawable/scrubber_control_to_pressed_mtrl_005</item> - <item>@drawable/scrubber_primary_mtrl_alpha</item> - <item>@drawable/scrubber_track_mtrl_alpha</item> - <item>@drawable/spinner_mtrl_am_alpha</item> - <item>@drawable/switch_track_mtrl_alpha</item> - <item>@drawable/text_cursor_mtrl_alpha</item> - <item>@drawable/textfield_activated_mtrl_alpha</item> - <item>@drawable/textfield_default_mtrl_alpha</item> - <item>@drawable/textfield_search_activated_mtrl_alpha</item> - <item>@drawable/textfield_search_default_mtrl_alpha</item> - <item>@drawable/text_select_handle_left_mtrl_alpha</item> - <item>@drawable/text_select_handle_middle_mtrl_alpha</item> - <item>@drawable/text_select_handle_right_mtrl_alpha</item> + <item>@drawable/item_background_borderless_material</item> + <item>@drawable/item_background_material</item> + <item>@drawable/list_divider_material</item> + <item>@drawable/list_section_divider_material</item> + <item>@drawable/notification_material_action_background</item> + <item>@drawable/notification_material_media_action_background</item> + <item>@drawable/popup_background_material</item> + <item>@drawable/progress_horizontal_material</item> + <item>@drawable/progress_indeterminate_horizontal_material</item> + <item>@drawable/progress_large_material</item> + <item>@drawable/progress_medium_material</item> + <item>@drawable/progress_small_material</item> + <item>@drawable/ratingbar_full_empty_material</item> + <item>@drawable/ratingbar_full_filled_material</item> + <item>@drawable/ratingbar_full_material</item> + <item>@drawable/scrollbar_handle_material</item> + <item>@drawable/scrubber_control_material_anim</item> + <item>@drawable/scrubber_control_selector_material</item> + <item>@drawable/scrubber_progress_horizontal_material</item> + <item>@drawable/spinner_background_material</item> + <item>@drawable/spinner_textfield_background_material</item> + <item>@drawable/switch_thumb_material_anim</item> + <item>@drawable/switch_track_material</item> + <item>@drawable/tab_indicator_material</item> + <item>@drawable/text_cursor_material</item> + <item>@drawable/textfield_search_material</item> + <item>@drawable/text_select_handle_left_material</item> + <item>@drawable/text_select_handle_middle_material</item> + <item>@drawable/text_select_handle_right_material</item> + <item>@drawable/ic_account_circle</item> </array> <!-- Do not translate. These are all of the color state list resources that should be diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java index f4b8a69a79db..c2e93a7ae479 100644 --- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java @@ -313,6 +313,26 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } + @Override + public void applyTheme(Theme t) { + super.applyTheme(t); + + final AnimatedRotateState state = mState; + if (state == null) { + return; + } + + if (state.mDrawable != null) { + state.mDrawable.applyTheme(t); + } + } + + @Override + public boolean canApplyTheme() { + final AnimatedRotateState state = mState; + return state != null && state.mDrawable != null && state.mDrawable.canApplyTheme(); + } + public void setFramesCount(int framesCount) { mState.mFramesCount = framesCount; mIncrement = 360.0f / mState.mFramesCount; diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java index 47b3bdd7f60d..a904067e5c97 100644 --- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java @@ -16,7 +16,6 @@ package android.graphics.drawable; import android.animation.Animator; import android.animation.AnimatorInflater; -import android.animation.ValueAnimator; import android.annotation.NonNull; import android.content.res.ColorStateList; import android.content.res.Resources; @@ -137,15 +136,11 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable { private boolean mMutated; public AnimatedVectorDrawable() { - mAnimatedVectorState = new AnimatedVectorDrawableState(null); + this(null, null); } - private AnimatedVectorDrawable(AnimatedVectorDrawableState state, Resources res, - Theme theme) { - mAnimatedVectorState = new AnimatedVectorDrawableState(state); - if (theme != null && canApplyTheme()) { - applyTheme(theme); - } + private AnimatedVectorDrawable(AnimatedVectorDrawableState state, Resources res) { + mAnimatedVectorState = new AnimatedVectorDrawableState(state, mCallback, res); } @Override @@ -290,7 +285,11 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable { VectorDrawable vectorDrawable = (VectorDrawable) res.getDrawable( drawableRes, theme).mutate(); vectorDrawable.setAllowCaching(false); + vectorDrawable.setCallback(mCallback); pathErrorScale = vectorDrawable.getPixelSize(); + if (mAnimatedVectorState.mVectorDrawable != null) { + mAnimatedVectorState.mVectorDrawable.setCallback(null); + } mAnimatedVectorState.mVectorDrawable = vectorDrawable; } a.recycle(); @@ -338,14 +337,22 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable { ArrayList<Animator> mAnimators; ArrayMap<Animator, String> mTargetNameMap; - public AnimatedVectorDrawableState(AnimatedVectorDrawableState copy) { + public AnimatedVectorDrawableState(AnimatedVectorDrawableState copy, + Callback owner, Resources res) { if (copy != null) { mChangingConfigurations = copy.mChangingConfigurations; if (copy.mVectorDrawable != null) { - mVectorDrawable = (VectorDrawable) copy.mVectorDrawable.getConstantState().newDrawable(); - mVectorDrawable.mutate(); - mVectorDrawable.setAllowCaching(false); + final ConstantState cs = copy.mVectorDrawable.getConstantState(); + if (res != null) { + mVectorDrawable = (VectorDrawable) cs.newDrawable(res); + } else { + mVectorDrawable = (VectorDrawable) cs.newDrawable(); + } + mVectorDrawable = (VectorDrawable) mVectorDrawable.mutate(); + mVectorDrawable.setCallback(owner); + mVectorDrawable.setLayoutDirection(copy.mVectorDrawable.getLayoutDirection()); mVectorDrawable.setBounds(copy.mVectorDrawable.getBounds()); + mVectorDrawable.setAllowCaching(false); } if (copy.mAnimators != null) { final int numAnimators = copy.mAnimators.size(); @@ -368,17 +375,12 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable { @Override public Drawable newDrawable() { - return new AnimatedVectorDrawable(this, null, null); + return new AnimatedVectorDrawable(this, null); } @Override public Drawable newDrawable(Resources res) { - return new AnimatedVectorDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new AnimatedVectorDrawable(this, res, theme); + return new AnimatedVectorDrawable(this, res); } @Override @@ -482,4 +484,21 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable { } return true; } + + private final Callback mCallback = new Callback() { + @Override + public void invalidateDrawable(Drawable who) { + invalidateSelf(); + } + + @Override + public void scheduleDrawable(Drawable who, Runnable what, long when) { + scheduleSelf(what, when); + } + + @Override + public void unscheduleDrawable(Drawable who, Runnable what) { + unscheduleSelf(what); + } + }; } diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java index b504a6e4f500..79ac651a3573 100644 --- a/graphics/java/android/graphics/drawable/BitmapDrawable.java +++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java @@ -132,7 +132,7 @@ public class BitmapDrawable extends Drawable { */ @Deprecated public BitmapDrawable(Bitmap bitmap) { - this(new BitmapState(bitmap), null, null); + this(new BitmapState(bitmap), null); } /** @@ -140,7 +140,7 @@ public class BitmapDrawable extends Drawable { * the display metrics of the resources. */ public BitmapDrawable(Resources res, Bitmap bitmap) { - this(new BitmapState(bitmap), res, null); + this(new BitmapState(bitmap), res); mBitmapState.mTargetDensity = mTargetDensity; } @@ -151,7 +151,7 @@ public class BitmapDrawable extends Drawable { */ @Deprecated public BitmapDrawable(String filepath) { - this(new BitmapState(BitmapFactory.decodeFile(filepath)), null, null); + this(new BitmapState(BitmapFactory.decodeFile(filepath)), null); if (mBitmapState.mBitmap == null) { android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + filepath); } @@ -162,7 +162,7 @@ public class BitmapDrawable extends Drawable { */ @SuppressWarnings("unused") public BitmapDrawable(Resources res, String filepath) { - this(new BitmapState(BitmapFactory.decodeFile(filepath)), null, null); + this(new BitmapState(BitmapFactory.decodeFile(filepath)), null); mBitmapState.mTargetDensity = mTargetDensity; if (mBitmapState.mBitmap == null) { android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + filepath); @@ -176,7 +176,7 @@ public class BitmapDrawable extends Drawable { */ @Deprecated public BitmapDrawable(java.io.InputStream is) { - this(new BitmapState(BitmapFactory.decodeStream(is)), null, null); + this(new BitmapState(BitmapFactory.decodeStream(is)), null); if (mBitmapState.mBitmap == null) { android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + is); } @@ -187,7 +187,7 @@ public class BitmapDrawable extends Drawable { */ @SuppressWarnings("unused") public BitmapDrawable(Resources res, java.io.InputStream is) { - this(new BitmapState(BitmapFactory.decodeStream(is)), null, null); + this(new BitmapState(BitmapFactory.decodeStream(is)), null); mBitmapState.mTargetDensity = mTargetDensity; if (mBitmapState.mBitmap == null) { android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + is); @@ -919,17 +919,12 @@ public class BitmapDrawable extends Drawable { @Override public Drawable newDrawable() { - return new BitmapDrawable(this, null, null); + return new BitmapDrawable(this, null); } @Override public Drawable newDrawable(Resources res) { - return new BitmapDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new BitmapDrawable(this, res, theme); + return new BitmapDrawable(this, res); } @Override @@ -942,16 +937,10 @@ public class BitmapDrawable extends Drawable { * The one constructor to rule them all. This is called by all public * constructors to set the state and initialize local properties. */ - private BitmapDrawable(BitmapState state, Resources res, Theme theme) { - if (theme != null && state.canApplyTheme()) { - // If we need to apply a theme, implicitly mutate. - mBitmapState = new BitmapState(state); - applyTheme(theme); - } else { - mBitmapState = state; - } + private BitmapDrawable(BitmapState state, Resources res) { + mBitmapState = state; - initializeWithState(state, res); + initializeWithState(mBitmapState, res); } /** diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index b2b91016b1bb..669cef2ccfad 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -114,6 +114,26 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { dr.setCallback(this); } + @Override + public void applyTheme(Theme t) { + super.applyTheme(t); + + final ClipState state = mClipState; + if (state == null) { + return; + } + + if (state.mDrawable != null) { + state.mDrawable.applyTheme(t); + } + } + + @Override + public boolean canApplyTheme() { + final ClipState state = mClipState; + return state != null && state.mDrawable != null && state.mDrawable.canApplyTheme(); + } + // overrides from Drawable.Callback @Override diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java index a9aac8335d56..0f0c844f81cc 100644 --- a/graphics/java/android/graphics/drawable/ColorDrawable.java +++ b/graphics/java/android/graphics/drawable/ColorDrawable.java @@ -299,17 +299,12 @@ public class ColorDrawable extends Drawable { @Override public Drawable newDrawable() { - return new ColorDrawable(this, null, null); + return new ColorDrawable(this); } @Override public Drawable newDrawable(Resources res) { - return new ColorDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new ColorDrawable(this, res, theme); + return new ColorDrawable(this); } @Override @@ -318,14 +313,8 @@ public class ColorDrawable extends Drawable { } } - private ColorDrawable(ColorState state, Resources res, Theme theme) { - if (theme != null && state.canApplyTheme()) { - mColorState = new ColorState(state); - applyTheme(theme); - } else { - mColorState = state; - } - + private ColorDrawable(ColorState state) { + mColorState = state; mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); } } diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index 196351b6b39e..bec1d381b84c 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -1216,7 +1216,7 @@ public abstract class Drawable { * implemented for drawables that can have a theme applied. */ public Drawable newDrawable(Resources res, Theme theme) { - return newDrawable(); + return newDrawable(null); } /** diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java index eb12d896f8f0..a9032887421e 100644 --- a/graphics/java/android/graphics/drawable/DrawableContainer.java +++ b/graphics/java/android/graphics/drawable/DrawableContainer.java @@ -592,8 +592,6 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { final DrawableContainer mOwner; final Resources mRes; - Theme mTheme; - SparseArray<ConstantStateFuture> mDrawableFutures; int mChangingConfigurations; @@ -801,17 +799,17 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { } final void applyTheme(Theme theme) { - // No need to call createAllFutures, since future drawables will - // apply the theme when they are prepared. - final int N = mNumChildren; - final Drawable[] drawables = mDrawables; - for (int i = 0; i < N; i++) { - if (drawables[i] != null) { - drawables[i].applyTheme(theme); + if (theme != null) { + createAllFutures(); + + final int N = mNumChildren; + final Drawable[] drawables = mDrawables; + for (int i = 0; i < N; i++) { + if (drawables[i] != null && drawables[i].canApplyTheme()) { + drawables[i].applyTheme(theme); + } } } - - mTheme = theme; } @Override @@ -1068,10 +1066,8 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { final Drawable result; if (state.mRes == null) { result = mConstantState.newDrawable(); - } else if (state.mTheme == null) { - result = mConstantState.newDrawable(state.mRes); } else { - result = mConstantState.newDrawable(state.mRes, state.mTheme); + result = mConstantState.newDrawable(state.mRes); } result.setLayoutDirection(state.mLayoutDirection); result.setCallback(state.mOwner); diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java index 4d3cd00f2296..eff5a3d938b1 100644 --- a/graphics/java/android/graphics/drawable/GradientDrawable.java +++ b/graphics/java/android/graphics/drawable/GradientDrawable.java @@ -174,7 +174,7 @@ public class GradientDrawable extends Drawable { } public GradientDrawable() { - this(new GradientState(Orientation.TOP_BOTTOM, null), null); + this(new GradientState(Orientation.TOP_BOTTOM, null)); } /** @@ -182,7 +182,7 @@ public class GradientDrawable extends Drawable { * of colors for the gradient. */ public GradientDrawable(Orientation orientation, int[] colors) { - this(new GradientState(orientation, colors), null); + this(new GradientState(orientation, colors)); } @Override @@ -1022,13 +1022,16 @@ public class GradientDrawable extends Drawable { super.applyTheme(t); final GradientState state = mGradientState; - if (state == null || state.mThemeAttrs == null) { + if (state == null) { return; } - final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.GradientDrawable); - updateStateFromTypedArray(a); - a.recycle(); + if (state.mThemeAttrs != null) { + final TypedArray a = t.resolveAttributes( + state.mThemeAttrs, R.styleable.GradientDrawable); + updateStateFromTypedArray(a); + a.recycle(); + } applyThemeChildElements(t); @@ -1086,11 +1089,7 @@ public class GradientDrawable extends Drawable { @Override public boolean canApplyTheme() { - final GradientState st = mGradientState; - return st != null && (st.mThemeAttrs != null || st.mAttrSize != null - || st.mAttrGradient != null || st.mAttrSolid != null - || st.mAttrStroke != null || st.mAttrCorners != null - || st.mAttrPadding != null); + return super.canApplyTheme() || mGradientState != null && mGradientState.canApplyTheme(); } private void applyThemeChildElements(Theme t) { @@ -1627,22 +1626,19 @@ public class GradientDrawable extends Drawable { @Override public boolean canApplyTheme() { - return mThemeAttrs != null; + return mThemeAttrs != null || mAttrSize != null || mAttrGradient != null + || mAttrSolid != null || mAttrStroke != null || mAttrCorners != null + || mAttrPadding != null; } @Override public Drawable newDrawable() { - return new GradientDrawable(this, null); + return new GradientDrawable(this); } @Override public Drawable newDrawable(Resources res) { - return new GradientDrawable(this, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new GradientDrawable(this, theme); + return new GradientDrawable(this); } @Override @@ -1746,18 +1742,11 @@ public class GradientDrawable extends Drawable { * The resulting drawable is guaranteed to have a new constant state. * * @param state Constant state from which the drawable inherits - * @param theme Theme to apply to the drawable */ - private GradientDrawable(GradientState state, Theme theme) { - if (theme != null && state.canApplyTheme()) { - // If we need to apply a theme, implicitly mutate. - mGradientState = new GradientState(state); - applyTheme(theme); - } else { - mGradientState = state; - } + private GradientDrawable(GradientState state) { + mGradientState = state; - initializeWithState(state); + initializeWithState(mGradientState); mGradientIsDirty = true; mMutated = false; diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java index 60196c05e7db..f1800e52aeb9 100644 --- a/graphics/java/android/graphics/drawable/InsetDrawable.java +++ b/graphics/java/android/graphics/drawable/InsetDrawable.java @@ -170,24 +170,30 @@ public class InsetDrawable extends Drawable implements Drawable.Callback { super.applyTheme(t); final InsetState state = mInsetState; - if (state == null || state.mThemeAttrs == null) { + if (state == null) { return; } - final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.InsetDrawable); - try { - updateStateFromTypedArray(a); - verifyRequiredAttributes(a); - } catch (XmlPullParserException e) { - throw new RuntimeException(e); - } finally { - a.recycle(); + if (state.mThemeAttrs != null) { + final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.InsetDrawable); + try { + updateStateFromTypedArray(a); + verifyRequiredAttributes(a); + } catch (XmlPullParserException e) { + throw new RuntimeException(e); + } finally { + a.recycle(); + } + } + + if (state.mDrawable != null && state.mDrawable.canApplyTheme()) { + state.mDrawable.applyTheme(t); } } @Override public boolean canApplyTheme() { - return mInsetState != null && mInsetState.mThemeAttrs != null; + return super.canApplyTheme() || mInsetState != null && mInsetState.canApplyTheme(); } @Override @@ -438,6 +444,12 @@ public class InsetDrawable extends Drawable implements Drawable.Callback { return mChangingConfigurations; } + @Override + public boolean canApplyTheme() { + return super.canApplyTheme() || mThemeAttrs != null + || mDrawable != null && mDrawable.canApplyTheme(); + } + boolean canConstantState() { if (!mCheckedConstantState) { mCanConstantState = mDrawable.getConstantState() != null; diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index 900060af8559..5107e10226b0 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -100,10 +100,10 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { * @param state The constant drawable state. */ LayerDrawable(Drawable[] layers, LayerState state) { - this(state, null, null); - int length = layers.length; - ChildDrawable[] r = new ChildDrawable[length]; + this(state, null); + final int length = layers.length; + final ChildDrawable[] r = new ChildDrawable[length]; for (int i = 0; i < length; i++) { r[i] = new ChildDrawable(); r[i].mDrawable = layers[i]; @@ -117,18 +117,14 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { } LayerDrawable() { - this((LayerState) null, null, null); + this((LayerState) null, null); } - LayerDrawable(LayerState state, Resources res, Theme theme) { - final LayerState as = createConstantState(state, res); - mLayerState = as; - if (as.mNum > 0) { + LayerDrawable(LayerState state, Resources res) { + mLayerState = createConstantState(state, res); + if (mLayerState.mNum > 0) { ensurePadding(); } - if (theme != null && canApplyTheme()) { - applyTheme(theme); - } } LayerState createConstantState(LayerState state, Resources res) { @@ -256,8 +252,8 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { a.recycle(); } - final ChildDrawable[] array = mLayerState.mChildren; - final int N = mLayerState.mNum; + final ChildDrawable[] array = state.mChildren; + final int N = state.mNum; for (int i = 0; i < N; i++) { final ChildDrawable layer = array[i]; if (layer.mThemeAttrs != null) { @@ -279,25 +275,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { @Override public boolean canApplyTheme() { - final LayerState state = mLayerState; - if (state == null) { - return false; - } - - if (state.mThemeAttrs != null) { - return true; - } - - final ChildDrawable[] array = state.mChildren; - final int N = state.mNum; - for (int i = 0; i < N; i++) { - final ChildDrawable layer = array[i]; - if (layer.mThemeAttrs != null || layer.mDrawable.canApplyTheme()) { - return true; - } - } - - return false; + return super.canApplyTheme() || mLayerState != null && mLayerState.canApplyTheme(); } /** @@ -1042,22 +1020,30 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { @Override public boolean canApplyTheme() { - return mThemeAttrs != null; + if (mThemeAttrs != null) { + return true; + } + + final ChildDrawable[] array = mChildren; + final int N = mNum; + for (int i = 0; i < N; i++) { + final ChildDrawable layer = array[i]; + if (layer.mThemeAttrs != null || layer.mDrawable.canApplyTheme()) { + return true; + } + } + + return false; } @Override public Drawable newDrawable() { - return new LayerDrawable(this, null, null); + return new LayerDrawable(this, null); } @Override public Drawable newDrawable(Resources res) { - return new LayerDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new LayerDrawable(this, res, theme); + return new LayerDrawable(this, res); } @Override diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index 8cd0d1353dfa..d821224a2518 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -90,7 +90,7 @@ public class NinePatchDrawable extends Drawable { */ @Deprecated public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) { - this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), null, null); + this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), null); } /** @@ -99,7 +99,7 @@ public class NinePatchDrawable extends Drawable { */ public NinePatchDrawable(Resources res, Bitmap bitmap, byte[] chunk, Rect padding, String srcName) { - this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), res, null); + this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), res); mNinePatchState.mTargetDensity = mTargetDensity; } @@ -112,7 +112,7 @@ public class NinePatchDrawable extends Drawable { public NinePatchDrawable(Resources res, Bitmap bitmap, byte[] chunk, Rect padding, Rect opticalInsets, String srcName) { this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding, opticalInsets), - res, null); + res); mNinePatchState.mTargetDensity = mTargetDensity; } @@ -123,7 +123,7 @@ public class NinePatchDrawable extends Drawable { */ @Deprecated public NinePatchDrawable(NinePatch patch) { - this(new NinePatchState(patch, new Rect()), null, null); + this(new NinePatchState(patch, new Rect()), null); } /** @@ -131,7 +131,7 @@ public class NinePatchDrawable extends Drawable { * based on the display metrics of the resources. */ public NinePatchDrawable(Resources res, NinePatch patch) { - this(new NinePatchState(patch, new Rect()), res, null); + this(new NinePatchState(patch, new Rect()), res); mNinePatchState.mTargetDensity = mTargetDensity; } @@ -654,17 +654,12 @@ public class NinePatchDrawable extends Drawable { @Override public Drawable newDrawable() { - return new NinePatchDrawable(this, null, null); + return new NinePatchDrawable(this, null); } @Override public Drawable newDrawable(Resources res) { - return new NinePatchDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new NinePatchDrawable(this, res, theme); + return new NinePatchDrawable(this, res); } @Override @@ -677,16 +672,10 @@ public class NinePatchDrawable extends Drawable { * The one constructor to rule them all. This is called by all public * constructors to set the state and initialize local properties. */ - private NinePatchDrawable(NinePatchState state, Resources res, Theme theme) { - if (theme != null && state.canApplyTheme()) { - // If we need to apply a theme, implicitly mutate. - mNinePatchState = new NinePatchState(state); - applyTheme(theme); - } else { - mNinePatchState = state; - } + private NinePatchDrawable(NinePatchState state, Resources res) { + mNinePatchState = state; - initializeWithState(state, res); + initializeWithState(mNinePatchState, res); } /** diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index 54e1daebfafd..e4a50c412fd3 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -167,7 +167,7 @@ public class RippleDrawable extends LayerDrawable { * Constructor used for drawable inflation. */ RippleDrawable() { - this(new RippleState(null, null, null), null, null); + this(new RippleState(null, null, null), null); } /** @@ -180,7 +180,7 @@ public class RippleDrawable extends LayerDrawable { */ public RippleDrawable(@NonNull ColorStateList color, @Nullable Drawable content, @Nullable Drawable mask) { - this(new RippleState(null, null, null), null, null); + this(new RippleState(null, null, null), null); if (color == null) { throw new IllegalArgumentException("RippleDrawable requires a non-null color"); @@ -473,7 +473,7 @@ public class RippleDrawable extends LayerDrawable { @Override public boolean canApplyTheme() { - return super.canApplyTheme() || mState != null && mState.mTouchThemeAttrs != null; + return super.canApplyTheme() || mState != null && mState.canApplyTheme(); } @Override @@ -927,17 +927,12 @@ public class RippleDrawable extends LayerDrawable { @Override public Drawable newDrawable() { - return new RippleDrawable(this, null, null); + return new RippleDrawable(this, null); } @Override public Drawable newDrawable(Resources res) { - return new RippleDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new RippleDrawable(this, res, theme); + return new RippleDrawable(this, res); } } @@ -971,37 +966,18 @@ public class RippleDrawable extends LayerDrawable { return mState.mMaxRadius; } - private RippleDrawable(RippleState state, Resources res, Theme theme) { - boolean needsTheme = false; + private RippleDrawable(RippleState state, Resources res) { + mState = new RippleState(state, this, res); + mLayerState = mState; - final RippleState ns; - if (theme != null && state != null && state.canApplyTheme()) { - ns = new RippleState(state, this, res); - needsTheme = true; - } else if (state == null) { - ns = new RippleState(null, this, res); - } else { - // We always need a new state since child drawables contain local - // state but live within the parent's constant state. - // TODO: Move child drawables into local state. - ns = new RippleState(state, this, res); + if (mState.mNum > 0) { + ensurePadding(); } if (res != null) { mDensity = res.getDisplayMetrics().density; } - mState = ns; - mLayerState = ns; - - if (ns.mNum > 0) { - ensurePadding(); - } - - if (needsTheme) { - applyTheme(theme); - } - initializeFromState(); } diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java index fc1c4e56655e..3f75bc398af2 100644 --- a/graphics/java/android/graphics/drawable/RotateDrawable.java +++ b/graphics/java/android/graphics/drawable/RotateDrawable.java @@ -16,6 +16,8 @@ package android.graphics.drawable; +import com.android.internal.R; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -476,6 +478,26 @@ public class RotateDrawable extends Drawable implements Drawable.Callback { } @Override + public void applyTheme(Theme t) { + super.applyTheme(t); + + final RotateState state = mState; + if (state == null) { + return; + } + + if (state.mDrawable != null) { + state.mDrawable.applyTheme(t); + } + } + + @Override + public boolean canApplyTheme() { + final RotateState state = mState; + return state != null && state.mDrawable != null && state.mDrawable.canApplyTheme(); + } + + @Override public Drawable mutate() { if (!mMutated && super.mutate() == this) { mState.mDrawable.mutate(); diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java index 31f277531363..9a5b8fbc83aa 100644 --- a/graphics/java/android/graphics/drawable/ScaleDrawable.java +++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java @@ -128,6 +128,26 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback { } } + @Override + public void applyTheme(Theme t) { + super.applyTheme(t); + + final ScaleState state = mScaleState; + if (state == null) { + return; + } + + if (state.mDrawable != null) { + state.mDrawable.applyTheme(t); + } + } + + @Override + public boolean canApplyTheme() { + final ScaleState state = mScaleState; + return state != null && state.mDrawable != null && state.mDrawable.canApplyTheme(); + } + // overrides from Drawable.Callback public void invalidateDrawable(Drawable who) { diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java index e252d803559a..a3d8c9236a74 100644 --- a/graphics/java/android/graphics/drawable/ShapeDrawable.java +++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java @@ -76,7 +76,7 @@ public class ShapeDrawable extends Drawable { * ShapeDrawable constructor. */ public ShapeDrawable() { - this(new ShapeState(null), null, null); + this(new ShapeState(null), null); } /** @@ -85,7 +85,7 @@ public class ShapeDrawable extends Drawable { * @param s the Shape that this ShapeDrawable should be */ public ShapeDrawable(Shape s) { - this(new ShapeState(null), null, null); + this(new ShapeState(null), null); mShapeState.mShape = s; } @@ -555,17 +555,12 @@ public class ShapeDrawable extends Drawable { @Override public Drawable newDrawable() { - return new ShapeDrawable(this, null, null); + return new ShapeDrawable(this, null); } @Override public Drawable newDrawable(Resources res) { - return new ShapeDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new ShapeDrawable(this, res, theme); + return new ShapeDrawable(this, res); } @Override @@ -578,13 +573,8 @@ public class ShapeDrawable extends Drawable { * The one constructor to rule them all. This is called by all public * constructors to set the state and initialize local properties. */ - private ShapeDrawable(ShapeState state, Resources res, Theme theme) { - if (theme != null && state.canApplyTheme()) { - mShapeState = new ShapeState(state); - applyTheme(theme); - } else { - mShapeState = state; - } + private ShapeDrawable(ShapeState state, Resources res) { + mShapeState = state; initializeWithState(state, res); } diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java index 0309cb444dde..a299b3c7c4db 100644 --- a/graphics/java/android/graphics/drawable/StateListDrawable.java +++ b/graphics/java/android/graphics/drawable/StateListDrawable.java @@ -288,7 +288,16 @@ public class StateListDrawable extends DrawableContainer { super(orig, owner, res); if (orig != null) { - mStateSets = Arrays.copyOf(orig.mStateSets, orig.mStateSets.length); + // Perform a deep copy. + final int[][] sets = orig.mStateSets; + final int count = sets.length; + mStateSets = new int[count][]; + for (int i = 0; i < count; i++) { + final int[] set = sets[i]; + if (set != null) { + mStateSets[i] = set.clone(); + } + } } else { mStateSets = new int[getCapacity()][]; } @@ -330,6 +339,13 @@ public class StateListDrawable extends DrawableContainer { } } + @Override + public void applyTheme(Theme theme) { + super.applyTheme(theme); + + onStateChange(getState()); + } + void setConstantState(StateListState state) { super.setConstantState(state); diff --git a/graphics/java/android/graphics/drawable/TransitionDrawable.java b/graphics/java/android/graphics/drawable/TransitionDrawable.java index 4380ca4e8145..e5c235efaba5 100644 --- a/graphics/java/android/graphics/drawable/TransitionDrawable.java +++ b/graphics/java/android/graphics/drawable/TransitionDrawable.java @@ -17,7 +17,6 @@ package android.graphics.drawable; import android.content.res.Resources; -import android.content.res.Resources.Theme; import android.graphics.Canvas; import android.os.SystemClock; @@ -86,11 +85,11 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba * @see #TransitionDrawable(Drawable[]) */ TransitionDrawable() { - this(new TransitionState(null, null, null), null, null); + this(new TransitionState(null, null, null), (Resources) null); } - private TransitionDrawable(TransitionState state, Resources res, Theme theme) { - super(state, res, theme); + private TransitionDrawable(TransitionState state, Resources res) { + super(state, res); } private TransitionDrawable(TransitionState state, Drawable[] layers) { @@ -245,24 +244,18 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba } static class TransitionState extends LayerState { - TransitionState(TransitionState orig, TransitionDrawable owner, - Resources res) { + TransitionState(TransitionState orig, TransitionDrawable owner, Resources res) { super(orig, owner, res); } @Override public Drawable newDrawable() { - return new TransitionDrawable(this, null, null); + return new TransitionDrawable(this, (Resources) null); } @Override public Drawable newDrawable(Resources res) { - return new TransitionDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new TransitionDrawable(this, res, theme); + return new TransitionDrawable(this, res); } @Override diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java index d9b39576fc65..3a51dfb20f10 100644 --- a/graphics/java/android/graphics/drawable/VectorDrawable.java +++ b/graphics/java/android/graphics/drawable/VectorDrawable.java @@ -14,6 +14,7 @@ package android.graphics.drawable; +import android.annotation.NonNull; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.Resources.Theme; @@ -212,15 +213,8 @@ public class VectorDrawable extends Drawable { mVectorState = new VectorDrawableState(); } - private VectorDrawable(VectorDrawableState state, Resources res, Theme theme) { - if (theme != null && state.canApplyTheme()) { - // If we need to apply a theme, implicitly mutate. - mVectorState = new VectorDrawableState(state); - applyTheme(theme); - } else { - mVectorState = state; - } - + private VectorDrawable(@NonNull VectorDrawableState state) { + mVectorState = state; mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); } @@ -765,17 +759,12 @@ public class VectorDrawable extends Drawable { @Override public Drawable newDrawable() { - return new VectorDrawable(this, null, null); + return new VectorDrawable(this); } @Override public Drawable newDrawable(Resources res) { - return new VectorDrawable(this, res, null); - } - - @Override - public Drawable newDrawable(Resources res, Theme theme) { - return new VectorDrawable(this, res, theme); + return new VectorDrawable(this); } @Override |