Commit Graph

119 Commits

Author SHA1 Message Date
Mathew Inwood
8e742f928e Add maxTargetSdk restriction to unused APIs.
These are APIs that have @UnsupportedAppUsage but for which we don't
have any evidence of them currently being used, so should be safe to
remove from the unsupported list.

This is a resubmit of ag/12929664 with some APIs excluded that caused
test failures; see bugs 171886397, 171888296, 171864568.

APIs excluded:
Landroid/bluetooth/le/ScanRecord;->parseFromBytes([B)Landroid/bluetooth/le/ScanRecord;
Landroid/os/Process;->myPpid()I
Landroid/os/SharedMemory;->getFd()I
Landroid/hardware/input/InputManager;->INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH:I

Bug: 170729553
Test: Treehugger
Change-Id: I8285daa8530260251ecad6f3f38f98e263629ca7
2020-10-29 11:51:12 +00:00
Hongwei Wang
050275cd83 Revert "Add maxTargetSdk restriction to unused APIs."
This reverts commit 72f07d6a8a.

Reason for revert: Droidcop-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?testMethod=testAppZygotePreload&testClass=android.app.cts.ServiceTest&atpConfigName=suite%2Ftest-mapping-presubmit-retry_cloud-tf&testModule=CtsAppTestCases&fkbb=6936597&lkbb=6936969&lkgb=6936551&testResults=true&branch=git_master&target=cf_x86_phone-userdebug>, bug b/171886397

Bug: 171886397
Change-Id: Ibe0f0430a3451477c1ee8ef56a596e91ea1e7672
2020-10-28 20:16:22 +00:00
Mathew Inwood
72f07d6a8a Add maxTargetSdk restriction to unused APIs.
These are APIs that have @UnsupportedAppUsage but for which we don't
have any evidence of them currently being used, so should be safe to
remove from the unsupported list.

Bug: 170729553
Test: Treehugger
Change-Id: I4c8fd0006f950de9955242e93968fb0996ceb372
2020-10-27 15:46:07 +00:00
Leon Scroggins III
6356ad3567 Make Drawable#hasFocusStateSpecified public
Bug: 154628299
Test: ColorStateListDrawableTest, DefaultFocusHighlightTest

The system needs this to show keyboard focus. Apps may want to do
something for keyboard focus, and they may also want to write custom
drawables that handle keyboard focus. Making this API public allows them
to do this.

Change-Id: Id6b2df3a14f15db5b7f8ca664362be0b78c3e2c4
2020-04-24 16:48:25 -04:00
Artur Satayev
53fe96661b Use new UnsupportedAppUsage annotation.
Existing annotations in libcore/ and frameworks/ will deleted after the migration. This also means that any java library that compiles @UnsupportedAppUsage requires a direct dependency on "unsupportedappusage" java_library.

Bug: 145132366
Test: m && diff unsupportedappusage_index.csv
Change-Id: I4bc8c9482e4bb1af21363f951affff7ee3fefeab
2019-12-18 15:42:06 +00:00
Nader Jawad
abfcd0aa86 Added null checks to LayerDrawable implementation
Added null checks around usages of drawable child layers
within the constructor as well as the isProjected method

Test: Added cts tests to LayerDrawableTest
Bug: 134902243
Change-Id: I94a5fbc896ab53e29f4db4dcd04daf0bf9dd66dc
2019-06-18 15:53:26 -07:00
Nader Jawad
531db61ac1 Added BlendMode equivalent APIs to replace deprecated PorterDuff
variants

Updated various framework Views to have equivalent BlendMode APIs
to replace the deprecated PorterDuff equivalents.
Updated InspectableProperty annotations to refer to the same
xml attributes as the original tintmode APIs

Bug: 126726419
Test: Added CTS tests to verify new BlendMode APIs
Change-Id: Id9ab36d3d4d29f351250723e9d13d49bc6062c83
Merged-In: Id9ab36d3d4d29f351250723e9d13d49bc6062c83
2019-04-17 21:11:39 +00:00
Nader Jawad
dadf251a0d Added framework APIs to leverage new BlendMode API
Updated various framework APIs to leverage the new BlendMode API
that parallels the corresponding porterduff mode equivalent.

Added new Drawable#onApplyBlendMode API that provides a backward
compatible solution for Drawable implementations that leverage
the new BlendMode API as well as fall back on the traditional
setTintMode(PorterDuff.Mode) API for instances where it is not
implemented

Bug:126726419
Test: Re-ran CTS graphics test cases
Change-Id: I119a7f57dce0a095c0a73cf83dc50b82beff5e32
2019-03-26 16:44:10 -07:00
Mathew Inwood
0d649f291a Add @UnsupportedAppUsage annotations
For packages:
  android.graphics
  android.graphics.drawable
  android.graphics.drawable.shapes
  android.graphics.fonts
  android.graphics.pdf

This is an automatically generated CL. See go/UnsupportedAppUsage
for more details.

Exempted-From-Owner-Approval: Mechanical changes to the codebase
which have been approved by Android API council and announced on
android-eng@

Bug: 110868826
Test: m
Change-Id: I7fc1162d2c63df8751a4660607e8ce72070efed8
2018-07-31 14:29:22 +01:00
Alan Viverette
c2c582bded Merge "Refresh opacity and statefulness on tint change" into oc-dev am: 8f6b9d8058
am: 77c7e2548a

Change-Id: Id5a18252950b93d2635a7eb1174052080511a07f
2017-04-04 19:31:19 +00:00
Alan Viverette
ad7e748543 Refresh opacity and statefulness on tint change
Also warns when LayerDrawable is created with an invalid child. This
is not guaranteed to fail, but it's usually a bad sign.

Bug: 33124798
Test: LayerDrawableTest, DrawableContainerTest
Change-Id: Ie3e4200b27a9814cee7f5711d7df9710db513953
2017-04-04 11:02:37 -04:00
Yohei Yukawa
55fed16929 Revert "Refresh opacity and statefulness on tint change"
This reverts commit 1eda069f7c.

Reason to revert:
The setup wizard started throwing android.view.InflateException due to
I89f6d804fb025f426aefdee67559778cf03015bb. Temporarily reverting that
change until we figure out what is going on.

Change-Id: I9344a3402f2fab02f4fe49a6a8ad91970b2d3b3e
Test: Manually verified that the setup wizard no longer crashes.
Bug: 33124798
Bug: 36870685
2017-04-04 03:30:01 +00:00
Jiaquan He
f380072eef Detect unhandled keyboard focused state.
A View uses a Drawable as its background, which changes
its appearance according to the View's state. This commit
adds an algorithm to detect undefined state_focused in
state specs for those Drawables.

Test: cts-tradefed run singleCommand cts --skip-device-info
--skip-preconditions --abi armeabi-v7a -m CtsGraphicsTestCases
-t android.graphics.drawable.cts.DefaultFocusHighlightTest
Bug: 35096940

Change-Id: I5e9f07141679881fe88f9040aa116ea2f9d537c9
2017-03-30 12:28:40 -07:00
Alan Viverette
1eda069f7c Refresh opacity and statefulness on tint change
Bug: 33124798
Test: DrawableContainerTest#testOpacityChange #testStatefulnessChange
Test: LayerDrawableTest#testOpacityChange #testStatefulnessChange
Change-Id: I89f6d804fb025f426aefdee67559778cf03015bb
2017-03-29 20:26:09 +00:00
Alan Viverette
eb7277590a Make LD stateful / opacity management look more like DC
Some initial cleanup before making changes to either class.

Test: n/a, refactoring only
Bug: 33124798
Change-Id: Idf0328bcc6de72b694ca7b35122ecad845cf1c4b
2016-11-28 14:55:18 -05:00
Romain Guy
253f2c213f Linear blending, step 1
NOTE: Linear blending is currently disabled in this CL as the
      feature is still a work in progress

Android currently performs all blending (any kind of linear math
on colors really) on gamma-encoded colors. Since Android assumes
that the default color space is sRGB, all bitmaps and colors
are encoded with the sRGB Opto-Electronic Conversion Function
(OECF, which can be approximated with a power function). Since
the power curve is not linear, our linear math is incorrect.
The result is that we generate colors that tend to be too dark;
this affects blending but also anti-aliasing, gradients, blurs,
etc.

The solution is to convert gamma-encoded colors back to linear
space before doing any math on them, using the sRGB Electo-Optical
Conversion Function (EOCF). This is achieved in different
ways in different parts of the pipeline:

- Using hardware conversions when sampling from OpenGL textures
  or writing into OpenGL frame buffers
- Using software conversion functions, to translate app-supplied
  colors to and from sRGB
- Using Skia's color spaces

Any type of processing on colors must roughly ollow these steps:

[sRGB input]->EOCF->[linear data]->[processing]->OECF->[sRGB output]

For the sRGB color space, the conversion functions are defined as
follows:

OECF(linear) :=
linear <= 0.0031308 ? linear * 12.92 : (pow(linear, 1/2.4) * 1.055) - 0.055

EOCF(srgb) :=
srgb <= 0.04045 ? srgb / 12.92 : pow((srgb + 0.055) / 1.055, 2.4)

The EOCF is simply the reciprocal of the OECF.
While it is highly recommended to use the exact sRGB conversion
functions everywhere possible, it is sometimes useful or beneficial
to rely on approximations:

- pow(x,2.2) and pow(x,1/2.2)
- x^2 and sqrt(x)

The latter is particularly useful in fragment shaders (for instance
to apply dithering in sRGB space), especially if the sqrt() can be
replaced with an inversesqrt().

Here is a fairly exhaustive list of modifications implemented
in this CL:

- Set TARGET_ENABLE_LINEAR_BLENDING := false in BoardConfig.mk
  to disable linear blending. This is only for GLES 2.0 GPUs
  with no hardware sRGB support. This flag is currently assumed
  to be false (see note above)
- sRGB writes are disabled when entering a functor (WebView).
  This will need to be fixed at some point
- Skia bitmaps are created with the sRGB color space
- Bitmaps using a 565 config are expanded to 888
- Linear blending is disabled when entering a functor
- External textures are not properly sampled (see below)
- Gradients are interpolated in linear space
- Texture-based dithering was replaced with analytical dithering
- Dithering is done in the quantization color space, which is
  why we must do EOCF(OECF(color)+dither)
- Text is now gamma corrected differently depending on the luminance
  of the source pixel. The asumption is that a bright pixel will be
  blended on a dark background and the other way around. The source
  alpha is gamma corrected to thicken dark on bright and thin
  bright on dark to match the intended design of fonts. This also
  matches the behavior of popular design/drawing applications
- Removed the asset atlas. It did not contain anything useful and
  could not be sampled in sRGB without a yet-to-be-defined GL
  extension
- The last column of color matrices is converted to linear space
  because its value are added to linear colors

Missing features:
- Resource qualifier?
- Regeneration of goldeng images for automated tests
- Handle alpha8/grey8 properly
- Disable sRGB write for layers with external textures

Test: Manual testing while work in progress
Bug: 29940137

Change-Id: I6a07b15ab49b554377cd33a36b6d9971a15e9a0b
2016-10-11 17:47:58 -07:00
Alan Viverette
11a84b8429 Ensure the layer drawable callback is set when loading from theme
Previously we would skip setting the changing configurations and callback
if the drawable had been loaded post-inflation from a theme attribute.

Bug: 30756548
Change-Id: Ia5457723ae8a62506a7562299d3fe78ec21f8030
2016-08-24 12:35:47 -04:00
Alan Viverette
09deff1bd9 Prevent LayerDrawable bounds updates from being re-entrant
Collect child invalidations during layer bounds change, then dispatch a
single invalidation if any children requested invalidation. This prevents
re-entrance from, for example, a LayerDrawable.updateLayerBounds() call
invoking setBounds() on a child, which necessarily calls invalidateSelf()
and immediately propagates up to ImageView.invalidateDrawable(), which
then calls configureBounds() and puts us back in updateLayerBounds().

Bug: 28636072
Change-Id: I36c9eefc18904d493292d51b37e4b05cfddcf794
2016-05-24 15:14:38 -04:00
Alan Viverette
6f9626a1c2 Check for null drawable during LayerDrawable.jumpToCurrentState()
Child drawables specified as theme attributes may not have been
initialized yet.

Bug: 28371482
Change-Id: I8452a7c5b8f74368c58ba3373336bf7d650af7a3
2016-04-25 11:28:17 -04:00
Alan Viverette
6888597c93 Rename undefined inset constant
Bug: 27531289
Change-Id: I31c5cc295c7f36b934eccf46cdbe7a7b293af9e0
2016-03-15 12:43:41 -04:00
Alan Viverette
781fbf28c7 Merge "Ensure all Java-side usages of config flags are using Java flags" into nyc-dev 2016-03-14 15:01:51 +00:00
Alan Viverette
ac85f90466 Ensure all Java-side usages of config flags are using Java flags
Previously we were using native config flags in some places that expected
Java flags, and vice-versa. All usages of config flags are now annotated
to ensure we're using the right type.

Cleans up annotations on most methods that were touched.

Bug: 21161798
Change-Id: Ifd87dfb12199fc8258915d8a510e03ddb681ca89
2016-03-11 15:15:51 -05:00
Alan Viverette
f6d87ec193 Add consistent @NonNull annotations for drawable callbacks
Bug: 27599515
Change-Id: I33fdc5392302403bfff9cc74a8226173ec962af6
2016-03-11 10:09:14 -05:00
Alan Viverette
0ef12aefe5 Clean up LayerDrawable, refactoring only
Uses consistent naming and ordering for padding and inset calculations.
Updates documentation to include UNDEFINED_INSET as public API, since we
return the value and will accept the value as a valid param. Flattens
out RTL logic for readability.

Change-Id: Ie704e2e5fc7f5763500ebe1217ddbbf4d0c5ef86
2016-01-12 09:47:09 -05:00
Alan Viverette
22e27ccf79 Merge "Correctly handle child drawables with no intrinsic size" 2015-11-06 19:41:59 +00:00
Alan Viverette
ab099c496b Correctly handle child drawables with no intrinsic size
If a child drawable has no intrinsic width or height, don't attempt to
apply padding and insets to the child during the parent layer drawable's
intrinsic width and height calculations.

Bug: 25461370
Change-Id: Idf616bde0449231f38156da53feb858e1ae41c47
2015-11-04 09:54:50 -05:00
Alan Viverette
4d47d2595e If LayerDrawable child doesn't have constant state, use shallow copy
Avoid NPE if mutate() is called on a LayerDrawable with a child that
doesn't support constant state.

Bug: 25438651
Change-Id: I6bf5a90484fda44a7b5fd10ce7b798eaa799b68e
2015-11-03 15:39:15 -05:00
Alan Viverette
ce52037e0a Support for changing density of GradientDrawable
Refactors density resolution and offset/size scaling into static
helper methods.

Also fixes VectorDrawbale insets to be treated as offset-type pixels
rather than size-type.

Bug: 25081461
Change-Id: I10fcb9ebb6c67f853a27ca0ee008c31af4b85da0
2015-10-30 11:07:35 -04:00
Alan Viverette
0cacad7023 Apply density scaling in LayerDrawable and subclasses
Bug: 25081461
Change-Id: I48e62caf5017ff2dd84cf62b68a828f4542b6ae5
2015-10-28 16:37:25 -04:00
Alan Viverette
0b6cfe22fd Revert "Use floating-point value for Drawable level"
This reverts commit 3da32b7688.

Change-Id: Ie75ce0c285e0f59a7a086f64c0cfe088edb5df04
2015-09-14 16:59:49 +00:00
Alan Viverette
3da32b7688 Use floating-point value for Drawable level
This allows us to run fine-grained level animations.

Backwards compatibility:
Another CL will add DrawableCompat.setLevel(float) to forward calls to
the existing integer-based method. For callbacks, developers can override
onLevelChanged(int) and use DrawableCompat.getLevelFloat() to obtain the
floating-point level. Overriding onLevelChanged(float) will only work on
current API.

Bug: 23566299
Change-Id: I431fe6f3679c8f23f9cf3c2bb1f92a4059ee68e3
2015-09-02 13:33:58 -04:00
Alan Viverette
9151a69951 Implement missing jumpToCurrentState() in LayerDrawable
Bug: 23674536
Change-Id: Icf1a4248d82484e48a958ce019b1f9cb0caeac9e
2015-08-31 12:39:27 -04:00
Alan Viverette
06ff2af68a Update local state when creating LayerDrawable from constant state
Also clears DrawableContainer's futures list when it's no longer needed,
correctly sets deep copy of state set in StateListDrawable, makes some
private methods into package-protected to avoid thunk, and propagates
state to StateListDrawable's super class so that getState() has correct
information.

Bug: 21840003
Change-Id: I0d4232807f280d663c03b4a80e4aab8626806440
2015-06-24 14:42:44 -07:00
Alan Viverette
81e7dbddf1 Remove isDither(), deprecate setDither()
Bug: 22013358
Change-Id: I37b11a94edc431a88522c6c056b76b045daa61d6
2015-06-23 14:30:40 -07:00
Alan Viverette
67b5a68088 Merge "Resolve start/end insets in LayerDrawable.getIntrinsicWidth()" into mnc-dev 2015-06-17 21:31:06 +00:00
Alan Viverette
536652fe91 Resolve start/end insets in LayerDrawable.getIntrinsicWidth()
Bug: 21849185
Change-Id: If9b392d863e808d83a5d90bcc32df6cb9194cbdf
2015-06-17 14:09:53 -07:00
Alan Viverette
373954a1fd Refactor Drawable.getDither() to isDither()
Bug: 21342040
Change-Id: I801970c2a25289d670636ad5387ddf244fb48225
2015-06-17 13:59:31 -07:00
Alan Viverette
dfa4646eca API Review: Drawable
Renames boolean getters to isZzz(), callback from onChange to onChanged.

Bug: 21342040
Change-Id: I9700d645453354b608fd97a832359211d828b52f
2015-05-27 13:26:41 -07:00
Alan Viverette
1f29e71c46 Don't propagate level or RTL in LayerDrawable.setDrawable()
The developer used to be responsible for this and automatically
propagating the values breaks some use cases (ex. in Camera).

Bug: 20696311
Change-Id: Ia8ddc132c6d629bcc27d66f654baf30d9f078568
2015-04-29 14:28:25 -07:00
Alan Viverette
a54cd38ba5 Layout layers without intrinsic dimensions using FILL gravity
Addresses a regression in Calendar where a custom drawable that doesn't
implement intrinsic bounds is laid out incorrectly. Also fixes an issue
where ColorDrawable would be laid out incorrectly.

Bug: 20643614
Change-Id: I796f0d3e189e482cf6fa169a5dd13f654d72653c
2015-04-28 10:45:26 -07:00
Alan Viverette
388cd3b69c Fix visual styling for Material Spinner background
Adds explicit padding attributes to LayerDrawable, constrains the ripple
to fit within the container to avoid projection.

Bug: 19359934
Bug: 20083467
Change-Id: I46da941fba37552adeb2c1fe617b799f576df0c6
2015-04-21 13:00:33 -07:00
Alan Viverette
7a583e7bb3 Allow null layers in LayerDrawable
Bug: 20098214
Change-Id: I80285ddda7101ab7403048d38f9c40af6b692a1a
2015-04-13 11:03:55 -07:00
Alan Viverette
d18c59b3e6 Merge "Don't change state when inflating LayerDrawable" 2015-04-10 17:50:21 +00:00
Alan Viverette
9eaa604116 Don't change state when inflating LayerDrawable
Bug: 20098214
Change-Id: I6968697053587454bba42c0652efd99b9c8a8e25
2015-04-09 17:28:24 -07:00
Alan Viverette
45f207d6d9 Only parse LayerDrawable child items when necessary
Bug: 20098214
Change-Id: Ie9da5f6e494ede47f9fdc94481a3f8ca41d3ef00
2015-04-09 13:14:32 -07:00
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
1b23240f96 Only propagate state changes if wrapped drawable is stateful
Always update layer bounds if the contained drawable changed in any
way. Also adds null annotations in LayerDrawable and throws a more
useful exception when the layers argument is null.

Change-Id: Iae0cba68257e48b6a45fe081c3d4b0509d2dedd5
2015-03-20 11:08:46 -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
6a8253fdc9 Update progress bar and seek bar backgrounds, fix seek bar thumb
Ensures LayerDrawable copies out the correct layer properties during
"tileification". This really needs to be deprecated or replaced in a
future CL, though, because it is potentially lossy (e.g. for
RippleDrawable, which is an instanceof LayerDrawable).

Bug: 19448441
Change-Id: I483e9c34fd781e280c13eb5951f96bc71a252819
2015-02-23 12:49:47 -08:00
Alan Viverette
a129622071 Unify wrapper-type drawables
Fixes several issues with constant state and propagation of drawable
property changes to wrapped drawables. Also un-hides the layout
direction accessors and hotspot getter.

Change-Id: Iff19db6a95059cbcfcbde7af0ac33871ccd41615
2015-02-20 15:00:25 -08:00