summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/res/res/drawable/vector_drawable_progress_bar_large.xml5
-rw-r--r--core/res/res/drawable/vector_drawable_progress_bar_medium.xml5
-rw-r--r--core/res/res/drawable/vector_drawable_progress_bar_small.xml5
-rw-r--r--core/res/res/values/arrays.xml203
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java20
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java57
-rw-r--r--graphics/java/android/graphics/drawable/BitmapDrawable.java33
-rw-r--r--graphics/java/android/graphics/drawable/ClipDrawable.java20
-rw-r--r--graphics/java/android/graphics/drawable/ColorDrawable.java19
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java2
-rw-r--r--graphics/java/android/graphics/drawable/DrawableContainer.java24
-rw-r--r--graphics/java/android/graphics/drawable/GradientDrawable.java47
-rw-r--r--graphics/java/android/graphics/drawable/InsetDrawable.java32
-rw-r--r--graphics/java/android/graphics/drawable/LayerDrawable.java66
-rw-r--r--graphics/java/android/graphics/drawable/NinePatchDrawable.java31
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java44
-rw-r--r--graphics/java/android/graphics/drawable/RotateDrawable.java22
-rw-r--r--graphics/java/android/graphics/drawable/ScaleDrawable.java20
-rw-r--r--graphics/java/android/graphics/drawable/ShapeDrawable.java22
-rw-r--r--graphics/java/android/graphics/drawable/StateListDrawable.java18
-rw-r--r--graphics/java/android/graphics/drawable/TransitionDrawable.java19
-rw-r--r--graphics/java/android/graphics/drawable/VectorDrawable.java21
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