Commit Graph

55 Commits

Author SHA1 Message Date
Alan Viverette
17cd4dfe3a Update preload list, clean up drawable theming
Removes all implementations of three-arg ConstantState constructor, since
we handle mutation and applyTheme() in Resources now. Moves progress bar
tinting to android:tint attribute. Correctly implements applyTheme() and
canApplyTheme() in all drawable wrapper and container classes.

Change-Id: Ic9cb43d0d6228aa4914f3124bed234b837beaa41
2014-10-14 14:07:21 -07:00
Alan Viverette
727cae197b Mutate and apply theme if needed before caching themed drawables
This ensures that drawables are completely separated from their cached
constant states before applying a theme. After this, we can remove the
implicit (and incomplete) mutation in the clone constructors.

Also implements missing mutate() method on ClipDrawable.

BUG: 17646144
Change-Id: If0d66b0a85724d76e0a4f506758c7ba3c0aa3410
2014-10-07 15:08:47 -07:00
Alan Viverette
bddb843e79 Fix drawable container tinting
BUG: 17704311
Change-Id: Ib9ced41e8589352c852e6c9dc7abbe6e4b9f2520
2014-09-29 17:22:47 -07:00
Alan Viverette
a426445dfd Separate tint and tintMode properties
BUG: 16054922
Change-Id: I820fb857b671faf9eb27612e470e820c5c4cd6b5
2014-08-06 15:42:10 -07:00
Chris Craik
31ba192dd2 Tweaks to outline API
b/15283203
b/16142564

Remove boolean return value chaining, as it's redundant with
the data in the Outline itself.

Change-Id: I3116e57cd1b35c98b74e95195117edd7e39fb2df
2014-07-19 00:13:59 +00:00
Alan Viverette
7068c39526 Fix hotspot movement on focus change
BUG: 15726988
Change-Id: I97f88e5f7e404ecfcd5c254fddd18c8f6616064e
2014-07-16 00:06:14 +00:00
Chris Craik
58945975b2 Outline support in DrawableContainer and LayerDrawable
bug:14445484
Change-Id: I26a45b0115b976d0dbcc351a208dc0956bc52e96
2014-06-24 15:56:05 -07:00
Alan Viverette
8de1494557 Fix switch & slider anim, make View drawable hotspot API public
BUG: 15287810
Change-Id: Ic7a9549dc1ba8afd07e9a196371ed349a54aaf2f
2014-06-18 18:05:15 -07:00
Alan Viverette
b3c56086d8 Add support for setTint in all Drawables, clean up lint warnings
Change-Id: I962089ca59684cef28cb4a648d4a91e542bdf5d4
2014-06-16 11:00:24 -07:00
Jeff Brown
cda212d79d Revert "Add support for setTint in all Drawables, clean up lint warnings"
This reverts commit 381f83b613f7b6e71180983dbb992ff62f8dd6e3.

Change-Id: I1181f436c647216ac46162260d9d886197b24568
2014-06-14 02:16:41 +00:00
Alan Viverette
4b17118aca Add support for setTint in all Drawables, clean up lint warnings
Change-Id: Ia38b9d3e9d5c0072382050e815bdd9232b672e50
2014-06-13 16:18:11 -07:00
Alan Viverette
2356c5e69b Update switch, checkbox, radio button, button, and toggle button
Add optical inset support to BitmapDrawable with gravity. Fix optical
inset support in DrawableContainer. Fix visibility change support in
AnimatedStateListDrawable. Adds a whole bunch of missing drawable
support to CheckedTextView.

BUG: 15127013
BUG: 15126976
BUG: 15125529
BUG: 15025806
BUG: 14597955
BUG: 14594498
BUG: 15152746
Change-Id: Id2d99e10838d25b6f927ca1e49996c8da8e78ab1
2014-05-22 22:43:59 -07:00
Alan Viverette
53a3ed7c46 Clean up hotspot bounds API
Change-Id: I7daf7e2d360d761f673aa69a0f925b8076ab19c6
2014-05-21 15:42:54 -07:00
Alan Viverette
c80ad99a33 TouchFeedbackDrawable is now RippleDrawable
Change-Id: I59f5f04b73089215c6320560556ac21beb03db06
2014-05-19 16:27:31 -07:00
Alan Viverette
5e92c95d84 Animated state transition drawable
Change-Id: I6c795d55cd7ab9163fdd6fe6ce3771bbd7015d62
2014-05-09 13:03:12 -07:00
Alan Viverette
307ad09228 Add alpha to bitmap, nine patch drawable, fix container hot spots
Also fixes primary text disabled state alpha.

BUG: 13818888
Change-Id: I9ae2e25216014177c2dac24f5c9095df87724a43
2014-04-19 16:01:58 -07:00
Alan Viverette
52b999f072 Implement APIs for obtaining, caching themed Drawables
When Drawables are inflated during preload (or otherwise without a theme)
they cache their themeable attributes in their constant state as an array
keyed on attribute index. Drawables inflated with a theme will simply
resolve theme attributes as part of normal inflation, and they will not
cache any themeable attributes.

Drawables obtained from Resources are pulled from theme-specific cache
when possible. If an unthemed Drawable exists in the preload cache, a
new constant state will be obtained for the Drawable and the theme will
be applied by resolving the cached themeable attributes and overwriting
their respective constant state properties. If no cached version exists,
a new Drawable is inflated against the desired theme.

Constant states from themed drawables may be cached if the applied theme
is "pure" and was loaded from a style resource without any subsequent
modifications.

This CL does not handle applying themes to several Drawable types, but it
fully supports BitmapDrawable, GradientDrawable, NinePatchDrawable,
ColorDrawable, and TouchFeedbackDrawable.

BUG: 12611005
Change-Id: I4e794fbb62f7a371715f4ebdf946ee5f9a5ad1c9
2014-03-24 18:00:26 -07:00
Alan Viverette
34bd56b546 Propagate first call to DrawableContainer.setAlpha() to children
BUG: 12530662
Change-Id: Idd972698d1a6805cb9f66ba4c2ddde97e1f8d2ca
2014-01-14 18:19:09 -08:00
Alan Viverette
729427d451 Fixes for DrawableContainer, LayerDrawable
Only propagate DrawableContainer color filter, alpha when explicitly
modified. Invalidate LayerDrawable padding when child inset modified.

Change-Id: I27c6fe3c2d71b92bfbc54cc829e1efc7bc35e566
2014-01-07 17:56:57 -08:00
Alan Viverette
d9e788c4f0 Add support for specifying Drawable color filter in XML
BUG: 12178044
Change-Id: Ie118aebf56bb4580c97b625e20f4e76bed4b6f6f
2014-01-07 11:30:24 -08:00
Fabrice Di Meglio
435c0ee10a Merge "Fix bug #11537133 Hideycling looks broken (KOT36), missing left padding" into klp-dev 2013-11-07 19:18:00 +00:00
Fabrice Di Meglio
f7a93ef384 Fix bug #11537133 Hideycling looks broken (KOT36), missing left padding
- enforce the Drawable boolean getPadding(Rect) contract for NinePatchDrawable
and DrawableContainer.

- as NinePatchDrawable was not enforcing it, the consequence was that the
mUserPaddingLeftInitial / mUserPaddingRitghInitial were reset to "0" (even
if they got the correct value before the reset).

Change-Id: I1efe7fad5f89c0ca47f90189f6d89940e0e9c6ae
2013-11-06 15:32:01 -08:00
John Spurlock
f68bb66c6e Fix recent regression in DrawableContainer.
Ensure optical insets are never null.

Bug:11537082
Change-Id: Ib75be83909fac612ae947f501835285cd8a79862
2013-11-05 19:15:41 -05:00
Fabrice Di Meglio
600d7dd1c6 Fix bug #11256076 Spinner text is too close from the opening triangle in RTL Locales
Background Drawable padding was not taken into account in RTL Locales

- make sure the Drawables are resolved before resolving padding
- during padding resolution take care about background padding

Change-Id: Ib0c722adf5341ab4fa2182a0d0ac2ca639e85cfc
2013-10-18 11:26:48 -07:00
Fabrice Di Meglio
3f5a90b2fb Add automatic Drawable mirroring capability when in RTL layout direction
- default value is "no mirroring"
- introduce android:autoMirrored as a new attribute for Drawable,
BitmapDrawable, LayerDrawable, StateListDrawable and NinePatchDrawable
- setting android:autoMirrored="true" means that the drawable will
be mirrored when the layout direction is RTL (right-to-left)
- also fix an issue with ImageView drawable layout direction not
updated correctly when RTL properties were changed

See bug #7034321 Need Drawable RTL support

Change-Id: If595ee5106c786f38e786d3a032e182f784a9d97
2013-08-01 15:15:10 -07:00
Alan Viverette
f390f770ee Postpone creating new drawables for DrawableContainerState.
When creating a DrawableContainerState from a constant state, calls to
ConstantState.newDrawable() are postponed and made as they are needed.

Bug: 9280861
Change-Id: I03c93a43ee00aca3ff618d66d7f507f1722538d1
2013-06-13 15:11:16 -07:00
Alan Viverette
7214643332 Deprecate DrawableStateList.getChildren() and add getChild().
Moves from exposing the internal structure of a drawable state list
to only exposing the data. Adds getCapacity() and mutate() as
package-private APIs to support various drawable subclasses.

Change-Id: Id08743f979287e1a305f069ccc3c0085a7da6f7b
2013-06-05 17:12:19 -07:00
Fabrice Di Meglio
d04aaa97c9 am ddd02537: am b4426f15: Merge "Fix bug #8858012 layer-list\'s bitmap item\'s start/end gravity is incorrect on RTL under certain conditions" into jb-mr2-dev
* commit 'ddd02537a3fb499a82097453535194f4e29583dc':
  Fix bug #8858012 layer-list's bitmap item's start/end gravity is incorrect on RTL under certain conditions
2013-05-13 11:24:47 -07:00
Fabrice Di Meglio
731ba6649a Fix bug #8858012 layer-list's bitmap item's start/end gravity is incorrect on RTL under certain conditions
- set correct layout direction for Drawable

Change-Id: Ic8968acadbc7c9aa0bb68dd4dfbe09aa4e7cfa62
2013-05-10 19:21:35 -07:00
Fabrice Di Meglio
b735e1d426 am 70d2c773: am f5c757c6: Merge "More fix for bug #8159072 Spinner widget should be RTL\'ized" into jb-mr2-dev
* commit '70d2c77320287d97fa2d90cc60f85e1706bffb1b':
  More fix for bug #8159072 Spinner widget should be RTL'ized
2013-04-11 18:10:51 -07:00
Fabrice Di Meglio
dc25d25333 More fix for bug #8159072 Spinner widget should be RTL'ized
- fix DrawableContainerState.getChangingConfigurations() to take care about its children
- make Resources.verifyPreloadConfig() return false when the changing configuration
contains layout direction bits (this is when a Drawable is having different version
for LTR and RTL layout directions)
- use constant state instead of the resource type value for checking if we can
preload the drawable
- fix typo

Change-Id: Idd64caf0fbe0f5cfd5ffe09343e84bafa9446ea5
2013-04-11 13:38:57 -07:00
Chet Haase
b1af7f3d4b add getAlpha() to Drawable
Drawable has setAlpha(int), but no getAlpha() (although some subclasses have added the
method). This makes it more tedious to use the property. For example, animations that wish to
animate this property must explicitly give it a start value since this value cannot be queried
from the object.

The trick is that setAlpha(int) is abstract, only implemented by subclasses. We cannot take this
approach for getAlpha(), as we would break all subclasses of Drawable until they implemented the
method. Instead, we'll add a default method which returns an invalid value, making it easier for
clients of the method to detect whether the value is valid.

All subclasses of Drawble in frameworks have been changed to add an override of getAlpha() when
appropriate.

Issue #7485875 Drawables is missing getAlpha()

Change-Id: I06b6e35f1a56d202838eca44759c85c82595020a
2013-03-08 15:40:28 -08:00
Romain Guy
458bf39e4c am 713bebda: am 6225b881: am 18bbcf7f: Merge "Copy missing state in DrawableContainer" into jb-mr1.1-dev
* commit '713bebdac508bb8e6fb0866f4cae873806dad459':
  Copy missing state in DrawableContainer
2012-11-26 09:51:44 -08:00
Romain Guy
fa9b396dbc Copy missing state in DrawableContainer
The copy constructor of DrawableContainerState was not properly
copying all the state. This change adds the missing two fields
that should be copied over.

Change-Id: Ic92ba17ccf8fb3c8cbb5ead18690287da21c48a4
2012-11-20 18:32:37 -08:00
Philip Milne
7b75781845 Bug #6110465. Optical bounds support for all ViewGroup subclasses.
This CL generalizes the optical bounds support previously contained in the
GridLayout implementation and then incorporates the new form directly into
the base View and ViewGroup implementations. After this change, GridLayout is
returned to an 'optical bounds' unaware state, and all layouts (including non-platform
ones) inherit the ability to perform their layout operation by optical (rather than clip)
bounds using their existing implementations.

The "layoutMode" property of ViewGroup and its associated constants are
made public in this CL.

Change-Id: Ic1bba0e1c6fc14da4aeab0b28c975d562b5f82dd
2012-09-21 13:48:40 -07:00
Romain Guy
e91aa0fa64 Compute GradientDrawable's opacity correctly
The current implementation of GradientDrawable always assumes the shape needs
to be blended. This causes all windows to be considered translucent by default.
This change recomputes the opacity as needed to ensure windows are marked
opaque when they should.

Change-Id: Iaf291d889a6c5122ab00c9f5781df3e7f61547fa
2012-09-18 15:37:24 -07:00
Romain Guy
5f49c3023a The drawables cache strikes again
Bug #7117785

Draawables created from the ConstantState cache found in Resources must be
mutated before they can be safely modified by apps. Failure to do so results
in all drawables sharing the same constant state to be affected by the
modification.

In the case of the bugreport above, the status bar code plays tricks with
a background drawable and modifies its color to implement a fade in/out
effect. This drawable comes from a cached resource (color 0x0) and the
modifications made by the status bar apply to other clients of this drawable,
most notably the recents panel.

This change fixes several things:
- Simplifies colors caching by removing the assetCookie from the key. This
should result in better reuse of cached drawables
- Makes View.setBackgroundColor() honor the mutate() contract
- Ensure StateListDrawable properly mutates its children before modifying
them
- Optimize Bitmap/ColorDrawable to mark them mutated when they are not
created from an existing ConstantSate. The same optimization should be
applied to other drawables in the future

Change-Id: I54adb5d5b914c7d8930bf9b46f7e3f9dcbf4bcab
2012-09-06 16:40:51 -07:00
Philip Milne
bbd51f1e36 Share Insets instances between views that have the same background (Drawable)
Change-Id: I47d93ccca6f553b678d25966d10d7a0a97cfa5ea
2012-04-18 16:06:27 -07:00
Philip Milne
1557fd7809 Fix for bug 6110465.
Add layout bound metadata to 9-patch files and make layouts take them into account.

This CL contains a proposed API for dealing with layout bounds.

This solution exposes:

1. Class: Insets - for storing layout Insets (and later possibly padding).
2. Methods: View:(get/set)LayoutInsets() - for storing layoutBounds.
3. Methods: ViewGroup:(get/set)LayoutMode() - for controlling layoutMode.

It also iuncudes the changes to GridLayout to support layout bounds.

Change-Id: I60c836b6530b61c5abf37f93ee9c44aad73573f1
2012-04-13 16:25:08 -07:00
Jeff Sharkey
a0ac98bd5c Finish any enter animation when jumping to state.
When jumpDrawablesToCurrentState(), finish any alpha animation in
progress.  Fixes bug where drawable with enter fade would remain
transparent until next state change.

Change-Id: Ia087f935566a8d78e0efdcb0a1a2f791db05c70e
2011-06-24 17:08:12 -07:00
Christopher Lais
6efd2bad95 Don't drop the drawable cache completely on configuration change
There was a lot of fancy code just above the clear to ensure
that drawables that aren't affected by the change are kept,
then the entire array was cleared.  This patch removes the
clear, so that the drawables that haven't changed are really
kept, matching the logs, comments and larger part of the code.

This patch also fixes the various constant states to return
correct ChangingConfigurations.

Change-Id: Ic11f6179537318d3de16dc58286989eb62a07f15
Old-Change-Id: I22495e6ed232dfe056207ce5155405af1fa82428
2011-01-14 12:31:26 -08:00
Romain Guy
f2a47782f3 Make Drawable.mCallback a WeakReference.
Many memory leaks occur because of long lived drawables. This should
help.

Change-Id: I2e9e8dee26579ec56e8e73f08f6b1d62be7812d9
2010-12-14 17:33:00 -08:00
Dianne Hackborn
079e235750 Add new fade in/out feature for drawable containers.
This is used to allow list view's pressed and activated indicators
to fade in an out, though of course it can be used elsewhere as well.

There is a lot of complexity in supporting this in list view.  The
two main things that are being dealt with:

- When recycling views, we need to make sure that the view's drawable
  state doesn't get animated from an old row's state.  The recycler
  now keeps track of which position a view was last in, and if it is
  reused at a new position there is a new View/Drawable API to tell
  it to jump to its current state instead of animating.

- For the pressed indicator to fade out, we need to keep displaying it
  after it is hidden.  There are new variables and code to keep track
  of this state, and tweaks in various places to be able to remember
  the last selected position and continue updating the drawable bounds
  as needed.

Change-Id: Ic96aa1a3c05e519665abf3098892ff2cc4f0ef2f
2010-11-03 19:11:19 -07:00
Gilles Debunne
78aaa97b77 New MipmapDrawable class.
This Drawable holds different scaled version of a Drawable and use the appropriate one
depending on its actual bounds to minimize scaling artifacts.

Change-Id: I4ced045d73c1ddd8982d9aaf39c3599b3ac58a16
2010-04-12 11:12:32 -07:00
Romain Guy
a41581ed40 Add StateListDrawable's dither flag to the constant state.
Change-Id: Ie377bfe3dfb83c33df3c0cc5a02810332a60a322
2009-09-16 17:01:06 -07:00
Dianne Hackborn
c297480937 Fix issue #2116977: buttons are huge and bent
Now that we are using preloaded drawables in compatibilty mode, when
constructing them from their constant state we need to set the new
drawable's target density appropriately.

Change-Id: I3665cbea09d38b9ac5f45f8c380dc8641f86b266
2009-09-14 16:32:56 -07:00
Mike Reed
211db4a287 change default for dither to true 2009-09-11 14:40:15 -04:00
Romain Guy
1010ac9b7c Fix possible NPE when mutating a DrawableContainer 2009-08-10 15:11:06 -07:00
Romain Guy
5140141c26 DrawableContainer was not respecting the value returned by Drawable.getPadding(Rect).
Before this change, DrawableContainer would always return true from getPadding(Rect)
even if all of its children were returning false from getPadding(Rect). This change
modifies this behavior to respect getPadding(Rect): mConstantPadding is kept null
when getPadding(Rect) returns false for all of the children and a flag is set
to avoid recomputing that value every time getConstantPadding() is invoked.
2009-07-22 11:35:49 -07:00
Phil Dubach
6be507cc66 Fix NullPointerException in DrawableContainer.mutate()
DrawableContainerState.mDrawables is an array which may be only partially
filled, as can be seen in the constructor and the addChild() method.

DrawableContainer.mutate() wrongly assumed that the array does not contain
null references.
2009-06-29 18:31:17 -07:00