Commit Graph

74 Commits

Author SHA1 Message Date
Alan Viverette
e0f95f39c5 Fix issues with theming of preloaded ColorStateLists
Ensures changing configurations mask is propagated to the host drawable
so that it can be properly cleared from cache on configuration changes.
Also fixes constant state handling of the mask in the Inset and Rotate
drawables.

Hides new ColorStateList methods related to theming, since they should
only be used during preloading or internally by framework drawables.

Fixes bug where the cached versions of themeable ColorStateLists were
modified by calling applyTheme() on the host drawable.

Also cleans up some docs and naming in GradientDrawable.

Bug: 19966397
Change-Id: I8c8d3cabbaf94b488c2b8fe9fd423e07d824c19c
2015-04-01 13:10:18 -07:00
Alan Viverette
ee7c65d539 Only verify resolved theme attributes
Bug: 19962473
Change-Id: I62eb2faea7b09fd483194b41e815179cb2141fcb
2015-03-27 10:57:34 -07:00
Chris Craik
bd3bfc5285 Improve docs for drawable tint and color filters
bug:19564477
Change-Id: I7e11baae2d4dd245965904c85b8855de71f6b6ac
2015-03-02 16:21:02 -08:00
Alan Viverette
f4c068b72e Add getDither, getFilterBitmap to Drawable for CTS testing
Also removes unnecessary overrides from PictureDrawable.

Change-Id: I13539b5204e8c0d8b9912da14de7ceae62720e3f
2015-01-06 11:01:36 -08:00
Alan Viverette
45c4bbbbce Allow use of theme attributes in color state lists
BUG: 17384842
Change-Id: Ibdc413acbd00e37b908432abd55f6521c22b8fc9
2015-01-05 14:59:19 -08:00
John Reck
dad7d84c04 Teach AssetAtlas about more drawables
Bug: 18317479

Change-Id: I16868ee204d24af72af9a2efc987f7e9eb1d266b
2014-12-09 14:18:33 -08:00
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
607bd84826 Update icons to vectors, fix preload theming & vector tinting
Adds a missing JNI binding to AssetManager, ensures drawables have
default tint modes as documented, and updates vector tint appropriately
when state changes.

BUG: 17385604
Change-Id: Ice92885989ebc13b95952f5dc3b7904cc956da12
2014-09-12 13:06:45 -07:00
Chris Craik
fe7a18eead Make getOutline account for gravity BitmapDrawable
bug:17112454

Also cleans up several subtle bugs in updating gravity/tile mode/insets.

Change-Id: Idbd2c52e5f572d11b651f5e93d000535880f5708
2014-08-19 17:44:20 -07:00
Chris Craik
9745de0f05 Fix BitmapDrawable outline crash
bug:17103753

Change-Id: Ia3d2c7d61b3f3b9ea8879f941d726d8627e155bb
2014-08-18 11:32:13 -07:00
Chris Craik
e222e359a0 Disable shadow casting for transparent BitmapDrawables
bug:17013977
Change-Id: I26328c21360432bb34d3f19858dfdc0e6aede057
2014-08-15 00:57:52 +00:00
Alan Viverette
a426445dfd Separate tint and tintMode properties
BUG: 16054922
Change-Id: I820fb857b671faf9eb27612e470e820c5c4cd6b5
2014-08-06 15:42:10 -07:00
Alan Viverette
4f64c04850 Clean up view tinting APIs, tileModeX/Y attribute docs
BUG: 16400590
BUG: 16403307
Change-Id: Ie924815a39eb0e683d1982b08ec478ed3edbfb7b
2014-07-22 01:03:58 +00:00
Leon Scroggins III
ab87983a11 Simplify Shader.setLocalMatrix.
Previously, calling setLocalMatrix updated any Paint that had the
Shader attached. This depended on deprecated behavior in Skia. Use
new Skia APIs, and do not modify any Paints that use the Shader.

In addition, update callers to call setShader (again) after modifying
the Shader.

Sample app at ag/499573 for testing.

Depends on I673801444f0a8fd4f192b5b7effdde1aa83e702b in external/skia.

BUG:14315916
Change-Id: I3c3316377874e89fccc85afb864bc038b0ef3890
2014-07-10 18:01:22 -04:00
Alan Viverette
8e5e11b99f Handle configuration changes in drawable attributes
Adds themeable attribute support to InsetDrawable, adds support
for attribute configuration changes to all themable drawables.

BUG: 16045735
Change-Id: I3dc62d28801760ac69d303be81b6c78bb9bb5aca
2014-07-07 22:54:22 +00:00
Alan Viverette
22594f0972 Add tileModeX/Y attrs to BitmapDrawable, tint to ShapeDrawable
Change-Id: I1c9efe39bfd5286230cee8354822db81f05186e4
2014-06-23 12:47:43 -07:00
Alan Viverette
5adf8ee451 Fix bitmap tinting
BUG: 15716407
Change-Id: I4008c9763fedc2f716040cd3f73ad79d77343960
2014-06-18 17:58:35 +00: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
06318a0869 Update drawables to fix CTS test failures
Change-Id: I78617aedab450f5bc18807c03d07ee776584ece0
2014-06-06 10:59:55 -07:00
Alan Viverette
d30241541c DO NOT MERGE Fix build.
Change-Id: I2e9f7f27c94b9f9240a5ca76952024055ff79878
2014-05-23 11:10:12 -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
e7772d313b Move setTint into Drawable, unhide getDirtyBounds on Drawable
BUG: 15089957
Change-Id: Ib622ba24b3f4bcf430e1d524895ac5cb104a232e
2014-05-21 23:50:03 -07:00
Alan Viverette
0cfb877f5a Simplify attribute extraction for themed Drawables
Also fixes a bug in GlowPadView that randomly popped up.

Change-Id: Id20508a44ea02b4a14c8f794de36e13a2c06587c
2014-05-14 17:40:53 -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
2f8ba8f7fa Update supported Drawable tinting modes and docs
Change-Id: I9c20d2bc4dc499f91c21a348871cf209c1065ba6
2014-04-09 13:00:17 -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
af7c240b99 Restore getTintMode() method on BitmapDrawable
Change-Id: I8fffc90ce3f0811d75b517d2dfc71de731188da6
2014-02-26 17:20:10 -08:00
Alan Viverette
09ceac298c Clean up tint API
Change-Id: I56056e7596840c563f5332922d63e8893a0cac17
2014-02-26 16:49:10 -08:00
Alan Viverette
813d85b82c Fix progress bar tinting, add tint support to ShapeDrawable
Cleans up APIs a little, since I think we may want to add tinting
modes beyond what Porter-Duff can provide. Plus we don't actually
support some of the Porter-Duff modes in hardware.

Change-Id: I2cea1b737cc93607a24842c54eb9f0d8346b29d4
2014-02-26 15:38:51 -08:00
Alan Viverette
12b97f5d2b Change colorFilterColor to tint, allow use of ColorStateList
BUG: 13149901
Change-Id: I6487bec372cb74db53d7bbdfa35de071764763b0
2014-02-23 18:32:20 -08:00
Alan Viverette
16f1d81d47 Revert "Cache display lists for Drawables"
This reverts commit c062c7003f.

Change-Id: I96d4f0482b927101f52140b667f4c38ffc8687f5
2014-01-31 13:04:38 -08:00
Alan Viverette
c062c7003f Cache display lists for Drawables
Change-Id: I86e2dd4cd4ac8871f4131450cb9082c2b8de2eed
2014-01-14 17:16:29 -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
Adam Powell
31049d76c5 Use SCREEN Xfermode for keyguard badges; update SeekBar
Plumb through the necessary API features through Drawables and
ImageView but leave it hidden for now pending future API review and
plumbing through the rest of the framework Drawable implementations.

Update SeekBar assets used for keyguard transport control.

Set selected status directly instead of finding views by id.

Bug 10531608
Bug 10784913

Change-Id: Ia38bd04ad1bc26e9e6da1dda8a374c9ba3ceccb3
2013-10-07 16:14:17 -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
Romain Guy
3b748a44c6 Pack preloaded framework assets in a texture atlas
When the Android runtime starts, the system preloads a series of assets
in the Zygote process. These assets are shared across all processes.
Unfortunately, each one of these assets is later uploaded in its own
OpenGL texture, once per process. This wastes memory and generates
unnecessary OpenGL state changes.

This CL introduces an asset server that provides an atlas to all processes.

Note: bitmaps used by skia shaders are *not* sampled from the atlas.
It's an uncommon use case and would require extra texture transforms
in the GL shaders.

WHAT IS THE ASSETS ATLAS

The "assets atlas" is a single, shareable graphic buffer that contains
all the system's preloaded bitmap drawables (this includes 9-patches.)
The atlas is made of two distinct objects: the graphic buffer that
contains the actual pixels and the map which indicates where each
preloaded bitmap can be found in the atlas (essentially a pair of
x and y coordinates.)

HOW IS THE ASSETS ATLAS GENERATED

Because we need to support a wide variety of devices and because it
is easy to change the list of preloaded drawables, the atlas is
generated at runtime, during the startup phase of the system process.

There are several steps that lead to the atlas generation:

1. If the device is booting for the first time, or if the device was
updated, we need to find the best atlas configuration. To do so,
the atlas service tries a number of width, height and algorithm
variations that allows us to pack as many assets as possible while
using as little memory as possible. Once a best configuration is found,
it gets written to disk in /data/system/framework_atlas

2. Given a best configuration (algorithm variant, dimensions and
number of bitmaps that can be packed in the atlas), the atlas service
packs all the preloaded bitmaps into a single graphic buffer object.

3. The packing is done using Skia in a temporary native bitmap. The
Skia bitmap is then copied into the graphic buffer using OpenGL ES
to benefit from texture swizzling.

HOW PROCESSES USE THE ATLAS

Whenever a process' hardware renderer initializes its EGL context,
it queries the atlas service for the graphic buffer and the map.

It is important to remember that both the context and the map will
be valid for the lifetime of the hardware renderer (if the system
process goes down, all apps get killed as well.)

Every time the hardware renderer needs to render a bitmap, it first
checks whether the bitmap can be found in the assets atlas. When
the bitmap is part of the atlas, texture coordinates are remapped
appropriately before rendering.

Change-Id: I8eaecf53e7f6a33d90da3d0047c5ceec89ea3af0
2013-05-02 13:32:09 -07:00
Scott Main
3fc184cf6e am 01e48e7d: am 22f6a60e: Merge "add docs for new attributes, including account restriction for restricted profiles" into jb-mr2-dev
* commit '01e48e7d1541920ece358257e4c2481936497835':
  add docs for new attributes, including account restriction for restricted profiles
2013-04-25 21:27:06 -07:00
Scott Main
b40c1fdaee add docs for new attributes, including account restriction for restricted profiles
Change-Id: I737ea55bfa58562b1b384e52626e95b479759376
2013-04-25 19:05:55 -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
7ac40e3869 Deprecate useless BitmapDrawable constructor
Bug #2590549

Change-Id: Icb45bf2d9836c43ed0825105f64d7b98afcdcdac
2013-02-08 14:00:15 -08:00
Romain Guy
5769fcd88a Add new mipMap attribute to BitmapDrawable
This attribute can be used to enable/disable mipmapping on bitmaps.
See Bitmap.setHasMipMap() for details.

Change-Id: I13cc800a258b6876a94e2a9605dcec4ea4f1ea48
2012-11-27 11:03:22 -08:00
Romain Guy
684385ddde mutate() didn't work as advertised
Bug #7162705

Change-Id: I15b2663fa7f1c71a2a3479134b8b7f37bfcbc607
2012-09-18 16:56:11 -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
Fabrice Di Meglio
b03b434089 Revert "Revert "Clean up layout direction APIs for Drawable""
This reverts commit c96132ff53
2012-06-04 12:55:30 -07:00
Jean-Baptiste Queru
c96132ff53 Revert "Clean up layout direction APIs for Drawable"
This reverts commit c1da65187a.
2012-06-02 05:46:20 -07:00
Fabrice Di Meglio
c1da65187a Clean up layout direction APIs for Drawable
- see bug #6427629

Change-Id: I3119db3022bba0ee325b6d0d4471bfebd850ec10
2012-06-01 11:39:10 -07:00
Romain Guy
b1216dd916 Copy constructors should actually copy stuff.
Bug #5027094

Change-Id: Iab6bf652e0b9bdd1bbc794e7c4218f46bafdd1a4
2011-08-02 12:37:16 -07:00