Commit Graph

105 Commits

Author SHA1 Message Date
Rajdeep Dua
cf06d7390c Bug fix for android.animation.LayoutTransition getStartDelay (int transitionType)
Bug Id : 5813366

Change-Id: Icc482ad820a91a1896c61db67bb6b95cc2ae4c5b
2012-01-05 16:27:15 +05:30
Joe Fernandez
2b07267753 am 201469f5: am bb7f590a: Merge "docs: Add developer guide cross-references, Project ACRE, round 4" into ics-mr1
* commit '201469f54522436be79d4d6665721049bfc74320':
  docs: Add developer guide cross-references, Project ACRE, round 4
2011-12-22 15:59:34 -08:00
Joe Fernandez
3aef8e1d1b docs: Add developer guide cross-references, Project ACRE, round 4
Change-Id: I1b43414aaec8ea217b39a0d780c80a25409d0991
2011-12-22 15:08:23 -08:00
Jeff Brown
96e942dabe Use a Choreographer to schedule animation and drawing.
Both animations and drawing need to march to the beat of
the same drum, but the animation system doesn't know
abgout the view system and vice-versa so neither one
can drive the other.

We introduce the Choreographer as a drummer to keep
everyone in time and ensure a magnificent performance.

This patch enabled VSync based animations and drawing by
default.  Two system properties are provided for testing
purposes to control the behavior.

"debug.choreographer.vsync": Enables vsync based animation
timing.  Defaults to true.  When false, animations are
timed by posting delayed messages to a message queue in
the same way they used to be before this patch.

"debug.choreographer.animdraw": Enables the use of the animation
timer to drive drawing such that drawing is synchronized with
animations (in other words, with vsync or the timing loop).
Defaults to true.  When false, layout traversals and drawing
are posted to the message queue for execution without any delay or
synchronization in the same way they used to be before this patch.

Stubbed out part of the layoutlib animation code because it
depends on the old timing loop (opened bug 5712395)

Change-Id: I186d9518648e89bc3e809e393e9a9148bbbecc4d
2011-12-05 16:39:59 -08:00
Jeff Brown
9c38dbeb1d Refactor ValueAnimator to reduce use of ThreadLocals.
Change-Id: I494c9cc32e58b77d5f7ea092ee6a0ae4d2d805bb
2011-12-05 11:16:06 -08:00
Chet Haase
8a22e59311 Fix leak in LayoutTransition
LayoutTransition was making an incorrect assumption that there could
only be one transition animation on a child of a transitioning container.
But if multiple children are added/removed to/from that container, there would
be multiple calls to set up changing animations for each existing child
of that container. This meant that the child would have multiple, new
OnLayoutChangeListeners added to it as part of the setup process.

Meanwhile, we would cache only the latest listener in a hashmap that used
the child as a key for the listener. Then when we cleaned up the hashmap later,
we would remove only the latest listener from the child, leaving the rest there
for eternity.

The fix is to skip the setup entirely for children that already have listeners
set on them; they must, if that's the case, already have been set up and are
already listening for layout changes. Setting up the animation is redundant,
and adding another listener is a leak.

issue #5588509: memory leak in systemui

Change-Id: I2c9f312cc2bcf4f2d08ac6b5d8f8e495aa4f3597
2011-11-10 17:03:12 -08:00
Chet Haase
1a76dcd6d1 Fix issue #5367164: memory leak in LayoutTransition
When a transition occurs, layout change listeners are added to the container
being transitioned as well as every container up the view hierarchy. The
parent views were not having those listeners removed, so every time a transition
ran, more listeners would be added. Adding to that, the use of an ArrayList
as the collection to hold the listeners meant that adding duplicate items
would just increase the size of the list. There's now a sanity-check on the add
call to make sure that the listener does not exist already, but more importantly
we remove all listeners added when the transition ends.

Change-Id: I4ea05adf30765db091124065539b0ffd32729b3b
2011-10-06 12:42:18 -07:00
Chet Haase
d56c695175 Add end functionality to LayoutTransition
This new hidden API is called by ViewRootImpl when there is a pending
transition but the parent window is not visible.

Change-Id: Idd6a0959b391fae542e675e8740b6a16f8963678
2011-09-07 10:51:00 -07:00
Chet Haase
3c4ce72c4d Fix artifact with LayoutTransitions on disappearing window.
Logic in performTraversals() starts a transition running at the
proper time. But when a view's parent window goes away, this transition
may not start at that time because drawing gets canceled. But the
transition still hung off of the ViewRoot, waiting until some later
drawing operation to kick it off. This resulted in some weird animations
like the Recents panel appearing and having a single item animate off of it.

The fix is to delete pending transitions when drawing is skipped.

Change-Id: I3ab7702c16e069644a163424f977350743e2cecc
2011-09-02 16:10:43 -07:00
Xavier Ducrohet
c88ba95921 Merge "Make some methods/fields package private so that layoutlib can access them." 2011-08-11 18:20:09 -07:00
Xavier Ducrohet
7f9f99ea11 Make some methods/fields package private so that layoutlib can access them.
Change-Id: I4aeadfbaf8a4f6a459fa19937c21ac23d9e5fb64
2011-08-11 12:57:51 -07:00
Chet Haase
e115ffeb3a Fix behavior of custom animations for LayoutTransition.
Previously, setting custom animations on a LayoutTransition would cause
those animations to be run not only for changing views in the container, but
for the parent hierarchy of those views as well. This can lead to unexpected
behavior, as seen in the ApiDemos LayoutAnimations and LayoutAnimationsHideShow.
This change changes the behavior so that the parent hierarchy is animated by
the default animations (which change the bounds and scrollX/Y fields) instead
of custom animations.

Change-Id: I9a04d97fabbc34dc0d5809eb3fd8ac08e0801d7c
2011-08-11 11:32:43 -07:00
Chet Haase
8b699792b6 Fix cancellation of AnimatorSet when child animation has delay
Previously, AnimatorSet incorrectly checked whether child animations were
'running' to figure out what to cancel. If a child animation was started, but
sitting in a startDelay phase, it was not 'running', so the right cancel/end
events would not propagate.

The fix is to add a new isStarted() API to Animator, which returns true when
the animator has started (but not yet ended), regardless of whether the animator
has a startDelay or not. It's basically a superset of the existing isRunning()
method, which only returns true when an animator has actually started setting values.

Change-Id: I126814cb6637b58295b6d18d9b155235671f99be
2011-08-08 15:05:53 -07:00
Chet Haase
b8f574a165 Fix AnimatorSet cancellation issues
AnimatorSet was incorrectly ignoring cancel() when it was in the
initial startDelay phase. Fix is to change isRunning() to be true if the
animator is also in its delay phase.

Change-Id: I1a8c877de24fa294beea0ba30d495658255b13b3
2011-08-04 14:16:48 -07:00
Martijn Coenen
ecc2fd94fa Removed unused import from AnimatorSet.
Change-Id: I7d5b3327290845d44cbe0abd48bf45c6f43bf677
2011-08-02 11:33:49 -07:00
Martijn Coenen
d45204ba09 Fix ConcurrentModificationException in AnimatorSet.
Would occur if you would start an AnimatorSet for the
second time.

Change-Id: I8fa0e8ab039e8525acae1564b2e9dec4a0838981
2011-07-29 15:23:00 -05:00
Chet Haase
abb7d66049 Merge "Fixed animation ordering bug in LayoutTransition." 2011-07-18 13:07:34 -07:00
Chet Haase
eb1d851e0e Fixed animation ordering bug in LayoutTransition.
This bug caused an artifact in Recent Apps where you might see things
pop to their end location before popping back and then animating correctly
into place.

Change-Id: Ia7313ec76cc42162528c3c167b8bc562284b14bc
2011-07-18 12:12:36 -07:00
Chet Haase
622e05c4d2 Fix leak in LayoutTransition
Static objects were referencing the first LayoutTransition object,
which referenced its target container, which eventually referenced the
Activity. That reference chain never went away.
The fix is to create animators that do not reference any target
object (they are just templates which are loaded with real target
objects when they are started).

Change-Id: Ie29f53bf3b886b8052b6ee3a56647a312d9adeaa
2011-07-15 15:24:18 -07:00
Chet Haase
7dfacdb1c8 Fix Animator cancel() behavior
Previously, calling cancel() on an Animator would cause onAnimationCancel
events to be sent to all listeners. This was confusing for listeners
that were keying off this event for performing other actions, when the original
animator wasn't truly canceled (because it wasn't even running, or had already
been canceled earlier). This change hinges listener notification on
the animator actually running; no events are sent otherwise.

Also added the first set of Animator tests to verify that this behavior
is correct.

Change-Id: I81ab56559b5c0343c8dc7880e1c8235f3020975b
2011-07-12 11:55:51 -07:00
Chet Haase
b39f051631 Add 'Property' object
This change adds a generic Property facility to the SDK, which allows an
easy way to reference fields (private or otherwise) in a general way.
For example, animations can use this facility to animate 'properties'
on target objects in a way that is more code- and compiler-friendly than
the existing String-based approach (for objects which have implemented
Properties, of course). The animator classes have been updated to use
this new approach (in addition to Strings, which are still more generally
useful for objects which have get/set functions but not Property objects).

The change also includes new Property objects on View (which can now be
used in creating animations on Views).

There is an unrelated change on GLES20RecordingCanvas to change the way we
cache bitmaps, which avoids spurious garbage by using an ArrayList instead of
a HashSet.

Change-Id: I167b43a3fca20e7695b1a23ca81274367539acda
2011-06-08 09:42:37 -07:00
Chet Haase
cca2c98072 Add ability to transition parent hierarchy in layout transitions
This change compensates for changes in the parent hierarchy of
transitioning views. It automatically animates parents with the same
animations as those used for the CHANGING animations run on the container
children.

Change-Id: I86471d16a9070b024cc09c8f6e0f504a881fa99f
2011-05-24 15:29:39 -07:00
Chet Haase
c54ed966f7 Minor javadoc enhancements
Change-Id: Ic24bb0e1e669989f0cae3a9b8fa064b38c8e7948
2011-05-06 14:14:20 -07:00
Chet Haase
6cfdf45380 Fix bitfield bug with vertex shader selection
Change-Id: I8bd3005f363afb52e6624806efb3e04c4a56ee18
2011-04-22 16:42:10 -07:00
Chet Haase
d4dd7025a1 Fix bug with values in cloned animators.
When a ValueAnimator is cloned, we correctly clone the underlying
PropertyValuesHolder objects and assign them to the new object.
However, we then put values into the new property map using the
old values instead of the new ones. This means that the per-property
animated values cannot be retrieved with the property names from
the cloned animator, because the map refers to the values of the
original object, not the cloned object that is actually being animated.
Fix is easy: just put the cloned values (which are already being created)
into the map.

Change-Id: I81282ca1dab6b1767ddc894d57a1110b344b4b0a
2011-04-04 15:33:55 -07:00
Chet Haase
e8e45d32fd Cancel LayoutTransition animations selectively
A recent change to LayoutTransition caused new layout transitions to
cancel any previously-running animations. This was to handle situations
where a transition adding an item needed transitions removing items to
finish their job first (and vice versa). But canceling *all* running
animations from transitions caused some artifacts, like making the status
bar icons blink or fade in, depending on which one was started last.

The new approach is to cancel just the ones we care about: adding animations
cancel removing animations, and vice versa. Either one cancels 'changing'
animations, which prevents objects from being animated to the old end
locations, since the new transition will animate them to the correct new
end locations.

Change-Id: I68ac351b05365cace6639b6618422395c35c83fd
2011-03-02 18:37:31 -08:00
Chet Haase
a00f3865f5 Add ViewPropertyAnimator for easy animation of View properties
Change-Id: I2bc52ca16507d8d20004d2d6823e587791272aac
2011-02-25 06:47:53 -08:00
Chet Haase
a8bdc2a42e Merge "Fix bug with bad state in animators" 2011-02-23 16:59:03 -08:00
Chet Haase
154f14508a Fix bug with bad state in animators
Bug 3482310: The playing state was not being correctly set to
RUNNING after an animator was start()'d. Instead, we were seeking
to the start value (correct), setting the state to SEEKED (also correct),
but not resetting the playing state to STOPPED. So when the animation
actually started animating values, it didn't recognize that it was
starting a STOPPED animation, so it never set its state to RUNNING,
and never returned true from isRunning().

Change-Id: Iea92dce98f92f60052d8a9a451094b953f9f0c67
2011-02-23 16:53:18 -08:00
Scott Main
e86c12c9e4 am 02be2f1d: am 2788e4f9: docs: fix some typos
* commit '02be2f1d874078f227af34fcac7863eca1f35653':
  docs: fix some typos
2011-02-23 11:27:12 -08:00
Scott Main
2788e4f96a docs: fix some typos
Change-Id: I2dc9855f8fe87234d4337351e8bac6c382fb74d2
2011-02-23 10:54:31 -08:00
Chet Haase
e9140a72b1 Fix invalidation bug with View bounds properties
When setLeft/Right/Top/Bottom() functions were called on View,
invalidation was only happening at the parent level. When an
app is hardware accelerated, this means that the view's display
list is not being recreated. So views that were changing size due
to these calls were not getting redrawn properly, causing some
artifacts in animations (especially LayoutTransition, which
calls these setters).

Fix is to invalidate the child instead of just the child's bounds
in the parent.

Change-Id: Ic8b2a5db519345dce617f914c2214738f22031b2
2011-02-16 16:30:21 -08:00
Chet Haase
6b5e593725 Merge "Fix when >2 keyframes supplied" 2011-02-15 06:46:48 -08:00
Chet Haase
750e12e18f Fix when >2 keyframes supplied
When there are more than two keyframes, we treat each keyframe
interval as its own separate period during which to calculate animated
values. To do this, we calculate an intervaleFraction from the overall
elapsed fraction of the entire animation. This intervalFraction is then
used to calculate the animated values in that interval.

However, we failed to actually use the intervalFraction in some code
paths, using the overall fraction instead. This caused a jumping behavior
because we were incorrectly calculating the values during the intervals.

Change-Id: Ia052e1e8b5130ff450ee20c0a3581e3de42399e1
2011-02-11 15:21:35 -08:00
Chet Haase
add6577a01 Fix animation and layoutTransition issues.
There were some subtle timing issues in animators with ending animations that
were not completely initialized (possibly because a startDelay'd animator
was ended before the delay elapsed).
Also, LayoutTransition had bugs around running a transition on a container
while a previously-started transition was still in progress. This could result
in some minor artifacts or crash bugs, depending on the durations and delays set
on the transition animations.

Change-Id: Ic6a69601f1ce9a55db15fff6b8ed25950b354491
2011-02-09 16:47:29 -08:00
Chet Haase
0dfc398424 Fixed LayoutTransition bug moving multiple views
The problem was that there can be >1 animation spawned for each
view in a container, if there are multiple events that trigger
a transition. These animations would potentially clobber object
layout values, causing problems as successive animations tried to use those
clobbered values to set up their own animation values.

The fix is to track the created animations and cancel them as future
animations on those same objects get created. This mechanism used to
be in the code (the bug came about when that mechanism went away), but
was removed because of memory leaks of never removing animations that
were set up but never started. The new approach also caches pending
animations, but runs a second aniamtor to delete the entries in that
collection just in case.

Change-Id: If60c7d188712334dea69d0794dc6b4ce29ca6c09
2011-01-28 15:54:37 -08:00
Chet Haase
daf98e941e Use optimized display lists for all hwaccelerated rendering
Previously, display lists were used only if hardware acceleration
was enabled for an application (hardwareAccelerated=true) *and* if
setDrawingCacheEnabled(true) was called. This change makes the framework
use display lists for all views in an application if hardware acceleration
is enabled.

In addition, display list renderering has been optimized so that
any view's recreation of its own display list (which is necessary whenever
the visuals of that view change) will not cause any other display list
in its parent hierarchy to change. Instead, when there are any visual
changes in the hierarchy, only those views which need to have new
display list content will recreate their display lists.

This optimization works by caching display list references in each
parent display list (so the container of some child will refer to its
child's display list by a reference to the child's display list). Then when
a view needs to recreate its display list, it will do so inside the same
display list object. This will cause the content to get refreshed, but not
the reference to that content. Then when the view hierarchy is redrawn,
it will automatically pick up the new content from the old reference.

This optimization will not necessarily improve performance when applications
need to update the entire view hierarchy or redraw the entire screen, but it does
show significant improvements when redrawing only a portion of the screen,
especially when the regions that are not refreshed are complex and time-
consuming to redraw.

Change-Id: I68d21cac6a224a05703070ec85253220cb001eb4
2011-01-24 08:43:20 -08:00
Robert Ly
f99b782b9f Doc change: animation devguide topic
Change-Id: I52cdd29616f7f30784c0f8352c035493c8d413dc
2011-01-19 21:39:45 -08:00
Patrick Dubroy
8901ffab29 Add a method for clearing all animations on a thread. 2011-01-16 17:15:28 -08:00
Patrick Dubroy
7beecfaf3b Fix latent bug with reinitializing an ObjectAnimator. 2011-01-16 14:42:53 -08:00
Patrick Dubroy
51ae5fc2d2 Fix animation bugs caused by weak reference
Change-Id: I4c7bd9d4843c355efd9c89059462f19600c3be45
2011-01-16 14:23:15 -08:00
Chet Haase
b2ab04ffb6 Remove obsolete DoubleEvaluator
Change-Id: I4407468599061ff35c68589988fb1e897de28c69
2011-01-16 11:34:14 -08:00
Scott Main
2b90a9a714 fix sdk build breakage; remove invalid @note tag
Change-Id: Iaaf5a38388ceccdd0d1f3766523788f54f1dc8d2
2011-01-14 15:39:10 -08:00
Patrick Dubroy
ec84c3a189 Allow old view hierarchy to be GC'ed more quickly during rotation. 2011-01-14 14:13:31 -08:00
Chet Haase
9c0874408c Supress layout requests while a LayoutTransition is running.
LayoutTransition works by animating layout-related properties
(left, right, top, and bottom). This works great when that animation
is the only thing affecting the layout of the UI. But if there are other things
happening in the application that cause layout to run on that
container or in its parent hierarchy, this can cause the layout properties
on its children to get mis-set during the middle of the transition.
This results in artifacts like animating objects jumping to locations where
they would be were there no animation running.

The fix is to supress layout requests on that container (and its children)
until the transition is complete (then issue a layout request on the container
to make sure that the container has the correct layout data)

Change-Id: I15bf0423a11409f854076f86099233db7fe4edc0
2011-01-12 18:14:40 -08:00
Chet Haase
53ee3316bc Rename RGBEvaluator to ArgbEvaluator
Change-Id: Iee74b475960d623fa757349e4053bd7c58cf5734
2011-01-11 06:46:44 -08:00
Chet Haase
2954cd91ab Add start/endTransition events for CHANGE transitions
There was already a mechanism for sending out events for LayoutTransition
when animations started or ended, but the implementation only sent out events
for the appearing/disappearing animations. This fix provides callbacks to
listeners for the CHANGE_APPEARING and CHANGE_DISAPPEARING transitions, too.

Change-Id: Icfb8cc1c20d2df3e4a817255e96c9d0e94c1d8c4
2011-01-09 09:43:39 -08:00
Chet Haase
9e90a9953b Reuse display lists at the java level.
Objects are invalidated and reset instead of being nulled out
and recreated. This avoids creating small amounts of garbage for
the display list and canvas objects.

Change-Id: I464fac7ea8944c19ad6d03f13a95d9017e3f4262
2011-01-05 15:13:16 -08:00
Ben Komalo
cbda9104d0 Fix incorrect anonymous AnimatorListenerAdapter.
Change-Id: I0384a437089d11dda03d0657235404ea96e8b19d
2010-12-16 15:59:22 -08:00
Chet Haase
27c1d4debb Fix minor animation and doc issues
Change-Id: I0ea077d9434ac3e22e8600f22ca4a24a6a46965c
2010-12-16 15:25:52 -08:00