Bug: 34881007
Test: bit CtsGraphicsTestCases:*
Test: bit CtsUiRenderingTestCases:.testclasses.HardwareBitmapTests
Change-Id: Ic751c356682ea3db17a1b031ec46106a1a2ab918
Bug: 63908092
Test: Manual
If the animation is running on the render thread, post a message (in
JNI) to call the listener.
Use a weak reference in the native listener so that it does not create
a cycle.
Don't add a listener if it's already in the list. Remove the native
listener when the Java listeners are all removed.
Call onAnimationEnd when the animation is stopped manually.
Change-Id: I5dc070089fb1cf399ac3316292592f614f2738f0
The supporting broken font is over engineering and it works the same as
default font fallback in most cases.
Removing fallback logic and return default fallback.
Test: bit CtsTextTestCases:*
Test: bit CtsGraphicsTestCases:*
Test: ./gradlew appcompat-v7:connectedDebugAndroidTest
Test: ./gradlew support-compat:connectedDebugAndroidTest
Bug: 65024629
Change-Id: Ib3fc0d638c6aee904cdf865082f8d5ae7d31ba48
Bug: b/63908092
Test: Manual: Ie18811ba29a1db163aca08472b04ae185e9344f0
If the animation has already started and stopped (via stop()), restart
the animatino on a call to start().
Change-Id: I0a14a1e643f32469fe5519949ee8ef046107e9a8
Bug: 63908092
Test: Manual: Ie18811ba29a1db163aca08472b04ae185e9344f0
Depends on https://skia-review.googlesource.com/#/c/skia/+/101544. That
change removes the Skia class's time checks, and leaving it up to the
client to keep track of the time. In this case, the client wants to keep
track of the time because it only wants to update while it is being
drawn. If it goes off screen (for example), it will just resume where it
left off when it returns on screen. This allows for smooth animations.
If an AnimatedImageDrawable is being drawn to a SkiaRecordingCanvas,
decode on the new (lazily-created) AnimatedImageThread.
When running, always decode one frame ahead on the AnimatedImageThread
so that it will be ready when it is time to display.
During prepareTree, update the time and check whether there is a new
frame ready to draw or the next frame needs to be decoded. In either
case, return true. The next frame to be decoded will be triggered by
onDraw.
Change-Id: If447976e9df417060a950f658dbca9cf7980dd02
Test: I28f82285c0341aff7192eb0157e0de4b97cda577
This is called by public methods that pass along an InputStream. As
such, it is possible that the client was planning to continue reading
from the InputStream, so do not close it.
Change-Id: Iaa53c44d578c1311315616c8fd931bed40290a92
* changes:
Added the reply draft as an extra to the content intent
Launching notification settings correctly inline
Launching Notification animations inline
Bug: 63908092
Test: I85979ae3d8c6a6dae6e4299dc3be291e12024290
Implement Animatable2, adding listeners for starting and ending the
animation.
Add setLoopCount for changing the loop count.
Add the ability to inflate from XML, by using the name of the class or
"animated-image", which mimics "nine-patch", "bitmap" etc.
Move internal variables to a State class so that they can be transferred
to a default constructed AnimatedImageDrawable.
Change-Id: Ice8149e7de55f7ffb4b4ba9dd9c856582fc42bc9
Using the new control mechanism introduced in order
to coordinate notification launches and smoothly
transform the notification into the launching window.
Bug: 69168591
Test: add notification, launch it
Change-Id: Ib2d671c65f276ec596a2f07edf64d65bf27a2882
Suppress a warning for constructor-chaining not using all parameters.
Bug: 72451126
Test: m javac-check RUN_ERROR_PRONE=true
Change-Id: Ie47dec119ec578b79d866d9c5041bb7b68eac146
Bug: 63908092
Test: HwAccelerationTests
Do not start the animation at creation time
When starting, first update the time, so it doesn't think we skipped a
bunch of frames if we're resuming.
Continue storing the SkPicture when stopped, so that we can continue to
show the same frame, without a jump.
Change-Id: I5ac77f2561fc9f42f8f69ebfbee21fe647cfc75a
Bug: 72381918
Test: Covered by existing tests
This CL seems to have broken the theme tests. In addition, it changes
the behavior of a couple of cases of passing InputStreams to the
framework. Previously, the framework used BitmapFactory, which did not
close the InputStreams, but ImageDecoder does.
Planning to reland along with the fix for closing in ag/3497523 and the
fix for the theme tests.
This reverts commit 66c6d78908.
Change-Id: I4ac6d0f2e1e2bb0925ae71c141bfe8a0d37e6a16
The current implementation schedules the next frame of the images
to be decoded after the current frame completes but potentially
schedules tasks that will result in a no-op execution if a new
frame is not yet needed.
Test: HwAccelerationTest
Change-Id: I0510cb5a1b801abd651327e924deb586af0306d6
ImageDecoder is a new way to decode Bitmaps (or Drawables) that
streamlines common use cases of BitmapFactory.
Bug: 63909536
Bug: 63908092
Test: I0f36ce34c968fd7fae4d8edebabea3a421859615
Ib2877276da8464b5f3eef0bbb848de202c90e97e
I8d1672180d8325ae1caf44f0bbf41036b94e6253
I405ebc86f7b6b019e0f040f1d4afe2e9d4354e5d
Iaeb7c27bafb351932f0fabe59461ef50b1e2424a
Change-Id: Iee236ac73e0bc37ef6903a8150c0d2c84e5cf906
Many themes appear to have forgotten to set
the alphas value on the color state list they
pass to RippleDrawable. The previous implementation
always divided the alpha by 2 which resulted in
the accidentally opaque color being 50% opacity instead.
To match that behavior without adding back the
unusual divide by 2 we simply cap the alpha to 128.
Similarly we surpress the hover & focus events if
a press is already in progress, which prevents a funky
background flicker on views with FOCUSABLE_AUTO that
gain focus part way through a click event.
Also fixes a bug where rapid tapping resulted in the
hardware animation appearing to not play as it had
a start value of 0 instead of paint.getAlpha()
Software animation already has this correct behavior,
so no changes needed for the fallback path.
Bug: 72173993
Test: tested hangouts, pin entry
Change-Id: I7110779234422e82cdd5d737aa00c1280b13760c
If required due to density mismatches the ImageDecoder will not
upscale the image at decode time, but instead will decode at the
bitmaps default size and upscale at draw time. This can be a
significant memory savings for low-dpi assets being used on a high-dpi
device.
However, if the provided asset has a higher dpi level than the bitmaps
default density then we will match BitmapFactories behavior and downscale
the bitmap to match the default density.
Bug: 63909536
Test: CtsGraphicsTestCases
Change-Id: I189306b7a3b706bed32bb267970ade27a57c0e7f
Bug: 63909536
Bug: 63908092
Test: TODO
If ImageDecoder.decodeDrawable is called with an animated image Source
(currently GIF or WebP), return an object of a new (hidden) Drawable
subclass. The new Drawable animates, and it implements Animatable (TODO:
implement Animatable2) so users have some control over the animation.
In addition to the normal features of Drawable, this new one supports
many of the features of ImageDecoder, including scaling, cropping and
PostProcess, which enables circle masks/rounded corners and other
arbitrary after-effects. It does *not* support decoding directly to a
Hardware Bitmap, since it cycles through frames and reuses the same
bitmap memory. But it could be made to use shared memory (TODO?).
TODO: Use a better number for the native allocation registry
TODO: Use the RenderThread to drive the animation, and remove decoding
on the UI thread.
TODO: Add support for modifying the loop count
Android.bp:
- build new AnimatedImageDrawable.cpp
AndroidRuntime.cpp:
- register new native methods
AnimatedImageDrawable.java
AnimatedImageDrawable.cpp:
- new Drawable that handles animated images
Canvas.h, SkiaCanvas.h/.cpp
- New virtual method and implementation for drawing SkAnimatedImages
RecordingCanvas.h/.cpp
- Stub implementation of drawing SkAnimatedImages
ImageDecoder.h/cpp
- Allow code sharing with AnimatedImageDrawable.cpp
- postProcess
- access the ImageDecoder struct
Depends on https://skia-review.googlesource.com/c/skia/+/94660 in Skia.
Change-Id: Ie2ec98d9c52deda4d439c6ef8e5dea2861bb93a3
Bug: 63909536
Bug: 63908092
Test: CtsGraphicsTestCases (ImageDecoderTest)
Refactor a method for calling postProcess from ImageDecoder. This will
be shared with the animated drawable (TODO). Call
PostProcess.postProcess in Java inside a try block to ensure that the
Canvas is released. Otherwise, a client could hold on to a pointer to
Canvas and keep using it, even though we have removed its backing.
In addition, share code for calling nDecodeBitmap.
Change-Id: I81ce2befce91ac1e27c78ad059c4b173a2c7e679
Bug: 71578461
Test: CtsGraphicsTestCases
Switch to SkCodec::MakeFromStream, and use its error code to determine
the Exception/error message. Then pass that to
SkAndroidCodec::MakeFromCodec. This is essentially what happened
previously (minus error reporting).
Change-Id: Iabaa61a4321d2f2e257db587013afda605b005b0
Bug: 63909536
Test: CTS: I8d1672180d8325ae1caf44f0bbf41036b94e6253
In ImageDecoder. The goal is to tell the client that there is a partial
image (which they can use if the callback returns true) and also allow
them to know why the image is partial.
Change how the return value is handled. Instead of returning null, which
is inconsistent with the rest of ImageDecoder, throw the Exception.
Change-Id: I56c38a624c978aa6e6d00fc927b5e355bf9c718a
Bug: 63909536
Test: CTS: Ib2877276da8464b5f3eef0bbb848de202c90e97e
Allows a listener to determine the mimetype.
Change-Id: I0d2aa32f2dbfb37dba97a896037c48814390273d