Commit Graph

52 Commits

Author SHA1 Message Date
George Mount
8cab50afda Fix for quick "back" in Activity Transitions.
Bug 14990153

Stops two potential animators working against the background
drawable. Forces the entering views to become visible onResume.

Change-Id: I2da66b54a16c6c69533eebbeff6db7f5a7794a89
2014-05-20 15:36:31 -07:00
George Mount
7b75062fb0 Allow changing order of matching Views in Transitions.
Bug 14899804

Change-Id: I13c080141fce6be8430d540e3c42d40a445bb224
2014-05-14 12:40:06 -07:00
George Mount
11d0415481 Merge "Check for null Drawable in MoveImage" 2014-05-13 23:31:09 +00:00
George Mount
30da61d477 Add view name to Transition matching.
Bug 14625214

Change-Id: Ia1b21e6bd0ea4892b504746e582aeb175e0f0506
2014-05-13 13:07:06 -07:00
George Mount
d8cdb8cc2c Check for null Drawable in MoveImage
Bug 14676155

Change-Id: Ic8d2c3fc471a876f5369e743e60ffb0f238f3eed
2014-05-13 09:33:54 -07:00
George Mount
764af2958b Merge "Fix mismatch in Transition ID/instances" 2014-05-08 16:58:18 +00:00
George Mount
6de56bb07e Fix mismatch in Transition ID/instances
Bug 14597573

In a Transition, when a View is removed from a Scene
and that View has an ID in common with another View
in the end Scene, it will be matched, even if the
View in the start Scene already had a matching View
by instance. This CL prevents a match by ID when an
instance match is available.

Future: disable matching when two views have the
same ID.

Change-Id: I0e51d1f2d0a2d05d09e8e135f090d0e1b2a67efc
2014-05-07 15:09:08 -07:00
George Mount
080443bcb6 Add ImageView-specific shared element activity transition code.
Bug 14497858

Probably more than 50% of shared elements will be ImageViews and
sharing the scale type and matrix between the two Activities will
simplify shared element transitions.

Also fixed MoveImage, which had a bug when the scale type was FIX_XY.

Change-Id: Ic5548b4d1420ced12507c18edf76c9e50e27a929
2014-05-05 12:25:43 -07:00
George Mount
265f209d55 Fixed transition start delay propagation when duration = 0.
Bug 14443184

Also gave the propagation speed a tweak to make it more
obvious that there is a propagation.

Change-Id: If9dc3172ae6ce7e6a712ccd1b83ebec9bf880bfa
2014-05-01 07:11:52 -07:00
George Mount
a98fb7ab6a Add mechanism for Transitions to target a class.
Bug 14289299

Added ability to target a specific class similarly to the
mechanism for excluding a specific class in Transitions.
Also changed XML tag from excludeTargetId to excludeId to
make it symmetric with excludeClass.

Change-Id: Ib371820ec75761243e75b659565b905b1b19c9a2
2014-04-29 13:08:39 -07:00
George Mount
608b87d9e5 Add Transform and ClipBounds Transitions.
Made MoveImage use an overlay view. Drawables
cover all Views in the overlay and there may
be a desire to order the overlays.

Change-Id: Ic7b81f0d26d8cce3f475c2eebbce01538bc55d46
2014-04-29 13:08:35 -07:00
George Mount
f976c3d42b Add ability to exclude Views in transition XML.
Bug 14259955

Change-Id: I47bb10c530c9fec8910ddd96156fc38d6027e1f6
2014-04-29 13:08:33 -07:00
George Mount
80c1210e59 Merge "Fade Transition sometimes disappeared improperly." 2014-04-28 17:23:53 +00:00
George Mount
1b2fb2ca13 Fade Transition sometimes disappeared improperly.
Bug 14320504

Change-Id: I43c2ddd34a5bd3a366027cd3c09d088baa4fb6f4
2014-04-25 17:07:58 -07:00
George Mount
8c0ceb34c3 Properly filter out excluded views in createAnimators() call.
Bug 14258783

Change-Id: I2d07e9d72a87674c215d36ccfc004c45623e7c24
2014-04-22 16:21:23 -07:00
George Mount
31a217290c Split Activity Transitions out of PhoneWindow.
Bug 13622834
Made it possible to use shared elements without making
Views invisible.

Change-Id: I1e85c6bc19e634a9af225ad7f0309b4f003ea462
2014-04-17 09:49:25 -07:00
George Mount
d6107a3170 Add Transitions useful for Activity transitions.
Slide: transition in and out of the edge of the scene.
Explode: transition to the scene borders

Moved capability from Fade to Visibility.

Change-Id: Ibeb0d8f751c990edc467570d9665fbe251af2703
2014-04-07 09:14:09 -07:00
George Mount
cf68aad316 Fix problem with Animators pausing the wrong Window.
Bug 13347005

Because Windows can share a UI thread, pausing/resuming
Animators in transitions can affect other Windows. This
isolates the pause/resume to the Window being operated
on.

Change-Id: Iac84a0a2c838f30c309eea4931467ba758c6ba78
2014-03-06 14:36:28 -08:00
George Mount
e180337ee9 Change Activity Scene Transitions to be more automatic redo.
This reverts commit 206e30cd93
along with removing the additional startActivity* methods
and replaces them with ActivityOptions makeSceneTransitionAnimation
methods.

Change-Id: I52bec31ae3c4cea6d549810ae5a7acd8aea176d8
2014-02-26 15:30:22 -08:00
George Mount
206e30cd93 Revert "Change Activity Scene Transitions to be more automatic."
This reverts commit f10587faad.

Change-Id: I2785a3d2d6b667cad6d61dcbbc1c624161735fa4
2014-02-26 08:56:30 -08:00
George Mount
f10587faad Change Activity Scene Transitions to be more automatic.
Shared element transitions are enabled by default
when the Window has a TransitionManager.

Shared element location and size are captured and
transferred to the target Activity.

ActionBar is treated as a shared element.

Change-Id: I0f22ea4e5cbe80254e848444e3f235cb742684f4
2014-02-25 11:12:16 -08:00
George Mount
0a778eda69 Cross-Activity Scene transition API.
First pass at API for cross-Activity Scene transitions.
Remaining work:
  Transition back
  Automatically capture hero element info
  Transfer of surface texture to synchronize between Activities
  Possibly use scene names to indicate preferred transition

Change-Id: I59d07de1fae694a46b92b1c82525daa301ec1377
2014-02-04 16:18:43 -08:00
Adam Powell
cfbe9be5b3 Add support for cross-activity scenes and transitions
* Add theme attributes for specifying a top-level TransitionManager
  for an activity window.

* Add window feature for automatic content transitions. This
  automatically assigns/creates a Scene for setContentView calls.

* Add named transitions. This allows apps to define APIs for
  handshake-agreements about which exit/entrance transitions to play.

* Add new transition type for ActivityOptions. This lets the system
  use ActivityOptions to communicate transition specifics and
  arguments to the called activity.

* Have ActivityManager pass appropriate ActivityOptions through to the
  called Activity. Have the called activity call back into the caller
  to let it know which transition of a possible requested set was
  chosen.

Still to do:

* Define and pass arguments for transitions. This will require
  defining a Parcelable version of TransitionValues and deciding how
  much leeway apps should have for these things.

* Determine how to appropriately filter the ActivityOptions bundle so
  that only appropriate data reaches the target.

* Determine if generalizing the auto-Scenes functionality to
  ViewGroups is appropriate.

Change-Id: I10684b926129ab2fbc1adec9ef31767237acae79
2013-12-05 10:06:19 -08:00
Adam Powell
ab42aec4bc Fix docs
Change-Id: Iaeef1812e3dfa76abe40468066860f73d8a10f79
2013-11-06 15:00:36 -08:00
Adam Powell
18e905f42d Make Scenes and Transitions first-class in PhoneWindow/Themes
Add a window feature for content transitions. This implicitly creates
a Scene for each setContentView operation and runs the appropriate
transition. Applications can specify a TransitionManager XML in their
theme that will apply the appropriate transitions when these implicit
scene changes occur. Apps can specify a "to" with no "from" in a
transition to request an entrance transition for the given
content. This lays the groundwork for further full content
change/activity to activity transitions.

Change-Id: Ic815d9e0b9ce958152d70bf6ee01be075aa9fe88
2013-11-05 17:49:56 -08:00
Chet Haase
9f30380db3 am 93830ffb: am df52471c: am 5747919f: Merge "Fix leak in TransitionInflater" into klp-dev
* commit '93830ffb1479dad289958c96cc66c11d0efdae34':
  Fix leak in TransitionInflater
2013-10-31 14:44:51 -07:00
Chet Haase
5747919fed Merge "Fix leak in TransitionInflater" into klp-dev 2013-10-31 21:38:21 +00:00
Chet Haase
58ad12208a Fix leak in TransitionInflater
A static map in TransitionInflater keyed off of Context instances,
which could cause contexts/activities to leak over time. This
fix removes that map and simply creates a new inflater each time.
The savings of the cached inflater was minimal an unnecessary, and the
intended sharing is in the context embedded in the inflater anyway.

Issue #11436919 leak in TransitionInflator

Change-Id: Ic05ca47f57723bd572bb6143df4035d66eedf5ad
2013-10-31 14:25:56 -07:00
Adam Powell
1e9a2478be am 098bc61f: am fd08694e: am 215add2e: Merge "Hide TransitionManager default transition methods" into klp-dev
* commit '098bc61f6c1683c63c5210025e1f65bb41d41037':
  Hide TransitionManager default transition methods
2013-10-25 10:11:32 -07:00
Adam Powell
1e9f3d868b Hide TransitionManager default transition methods
Pending future API consideration.

Change-Id: Ia4b162392e1c96b485bc28781a199bc2979ec53f
2013-10-24 18:54:33 -07:00
Adam Powell
75c74a4098 am c3661b16: am 1fcdee0d: am 92da1779: Merge "Fix bug in Scene\'s use of setTag" into klp-dev
* commit 'c3661b169876bf094f09f69f40349b598bf3a745':
  Fix bug in Scene's use of setTag
2013-10-24 16:28:02 -07:00
Adam Powell
f3c1577212 Fix bug in Scene's use of setTag
setTagInternal must be used for framework resource IDs.

Bug 11374402

Change-Id: If4d256dbf05055dac70796edd8d7b94bf65d947d
2013-10-24 16:01:34 -07:00
Chet Haase
d5c54bba10 am 39e991bd: am f8525caf: am 02e4c3a1: Merge "Cache Scene objects by layout ID on the scene root" into klp-dev
* commit '39e991bd5e477b6d3849ecf4824d4f247316a690':
  Cache Scene objects by layout ID on the scene root
2013-10-23 15:42:28 -07:00
Adam Powell
40a67888f9 Cache Scene objects by layout ID on the scene root
The current tracking of scene objects in a static ThreadLocal is
problematic as it leaks the Context associated with the SceneRoot and
returns the wrong Scene object if the same layout ID is used across
different scene roots.

Track Scene objects on the scene root view instead to avoid these
issues.

Change-Id: I891986897f757f2666897c937b5ebb0ed1d531c1
2013-10-23 14:26:57 -07:00
Chet Haase
28e8db1940 am 43757cc8: am 2a8eaff4: am c9d8e383: Merge "Fix leak with transitions when views get removed" into klp-dev
* commit '43757cc8438e85bf0633580c660c4861338f1da2':
  Fix leak with transitions when views get removed
2013-10-23 12:30:20 -07:00
Chet Haase
df32aa8715 Fix leak with transitions when views get removed
Transitions, when started, add an OnPreDrawListener to the current
ViewTreeObserver (which is global to the view hierarchy). This listener
is removed when the listener is called.

It is possible to add this listener and then remove the view from
the hierarchy before the listener is called. This could result in
either the listener not getting called at all (since there was no
drawing event) or (in the case of this bug) the listener getting called
when the sceneRoot had no AttachInfo (which is the case when that
root has been removed from the hierarchy). This results in the listener
trying to remove itself from a *different* ViewTreeObserver than the one
it added itself to, leaving the actual listener still sitting on a list
of listeners in that original VTO. This can result in a growing list of
listeners and a growing amount of work that gets done on every frame.
It can also lead to a serious memory leak, since the objects referred to
by the transition may be non-trivial (as in the case of this bug).

The fix is to add another mechanism for the listener to get removed.
Specifically, we now listen for detach events on the sceneRoot. If that
view gets detached before the listener is called, then we have a chance to
remove it from the correct VTO before the AttachInfo becomes null.

Issue #11307391 keyguard is slow after updating to krt16c and playing music

Change-Id: I108413ea2f18f5351df0a11d4ae56fec0b4aa154
2013-10-22 16:27:56 -07:00
George Mount
1ffb280a7d Add ofArgb to ObjectAnimator and ValueAnimator.
Bug 10396985

Change-Id: Ib1fcea04b5a915800fc415b3d548a8853b05389c
2013-10-11 12:06:45 -07:00
Chet Haase
aafc91c05a Fix resource-loading code for TransitionSet
The inflation code in TransitionInflater was using the wrong
tag ("set") for TransitionSet. This fix corrects that problem
(changing it to "transitionSet") and documents the correct
tag in the TransitionSet javadocs.

Issue #11085279 Transitions: transition sets loaded from resources don't work

Change-Id: I8aaea9f31bbe368cffcca63d4eb6a5ec06c3ce7b
2013-10-06 12:10:12 -07:00
Chet Haase
aa00613322 Enable transitions in lockscreen media controller
Media controller now fades between different states. The code for
doing this was already there, but this CL enables them and changes
the behavior of transition's OnPreDrawListener to do the right thing.

Also, this CL fixes a bug in ChangeText found while testing this change.

Issue #11083563 ChangeText transition crashes when KEEP transition type used

Change-Id: I5e04c28e1b5faac017b0a4e49734d9faa7fe79cd
2013-10-04 14:05:48 -07:00
Chet Haase
b7a7fc9d23 Make fading transitions work better
Previously, a Fade transition would only affect a view if its
parent hierarchy was not also affected between the start/end states.
This caused problems for views which were removed from their parents
between scenes when their parents' visibility also changed between those
scenes. The effect would be that the transition would fade the parent...
but the child would no longer be in that parent, so the user would just see the
child view blink out.

This fix ensure that views are faded appropriately by fading them
regardless the parent hierarchy; if a view is removed from its
parent, fade it out.

Additionally, if that view has not been removed from its parent, but
its parent is no longer parented *and* scene being
transitioned from is based on a layout resource file (and thus
the views are considered temporary after transitioning), then it is
removed from its parent to be faded out in the overlay.

Also, renamed TextChange to ChangeText to be more consistent with
other transition class names.

Change-Id: I4e0e7dfc9e9d95c7a4ca586534b6d204c4f3bae0
2013-09-26 13:38:12 -07:00
Chet Haase
d8d7c38533 Disable ActionBar usage of transitions
Various artifacts across apps were coming from ActionBar's use of
the new transitions framework. Disabling transitions for now to get
things back to a more stable state.

Also, fixed some related bugs in transitions themselves, including
a change in TextChange to account for text selection, which was causing
errors in Keep's SearchView.

Issue #10860557 TextChange animator may old stale value
Issue #10819685 sometimes icons are lighter
Issue #10750525 Share and Settings icons overlap when stopping slideshow
Issue #10839551 Sometimes the search text box is right-aligned in Keep
Issue #10727484 Cursor incorrectly positioned after entering first letter during search action in keep app

Change-Id: Iad7cbf3297e18018308b8148b3519b032e63dace
2013-09-23 14:49:39 -07:00
Chet Haase
9b985721da Add equals() and hashcode() to SpannableString
ActionBar uses a transition to animate text changes. This transition
depends on testing the equality of start/end text values in CharSequence
objects. Without equals(), SpannableString will return false for objects
whose references are different, but whose text is exactly the same.

This CL adds the equals() method, and the accompanying hashcode method,
to ensure that two Spanned implementations will always be equal
if their text and span data are equal.

Issue #10760075 Wrong unread count in actionbar

Change-Id: I5e77d40dd302eca035e8c56d40f3cd0aef8e6424
2013-09-19 17:18:55 -07:00
Chet Haase
c46181a963 Use transition-only alpha property for fading transitions
The original bug is fixed already, but showed up some problems in
the underlying fade-transition implementation. This fix addresses
those and other issues. The biggest part of the change should help
transition robustness in general, as it removes the dependency on the
public 'alpha' property of views and uses, instead, a new hidden property
on views called 'transitionAlpha'. This is a value which is normally
opaque (1), but which can be used by transitions (only) to animate the
translucency of views without disturbing the actual 'alpha' value which
might be manipulated outside of transitions. This should make transitions
much more robust in general.

In implementing and testing this overall fix, I noticed a couple of things
about transitions that were simply wrong (such as starting fades from the
wrong start value, and incorrectly avoiding transitions on some views
that didn't happen to have ids), and those are fixed in this CL as well.

Issue #10726905 ActionBar weirdness in People app
Issue #10727937 Menu items in gallery appear in faded color after selecting an image/album by long press

Change-Id: If1618446db10c1bfcff4761449241de4f559afc1
2013-09-18 08:55:47 -07:00
Chet Haase
23c61f6bc5 Ensure that transitions animating alpha end on a reasonable value
The Fade transition sets an initial alpha value of 0 when items are
appearing. This makes items invisible to start with, and then they
eventually fade in as part of the transition when the transition's
animation runs.

But if that animation/transition gets interrupted, or not started, then
the alpha value would not be restored, and the value would stay 0,
making the items invisible indefinitely. This is what was happening in
the action bar of the People app when performing a search.

The fix is to handle Transition and animation events to restore the alpha
to its true value when the transition completes, whether that
transition is canceled or not.

Issue #10726905 ActionBar weirdness in People app

Change-Id: Idb65fd8d471d2ac0a1ddc243fee00ae99f7e72d8
2013-09-16 13:58:23 -07:00
Chet Haase
7660d121b2 Plug leaks in transitions
Transitions were leaking views due to TransitionsValues holding references
to views/parents. The references were fine, but the retention of the transition
objects themselves were not. There were a few different places that needed to
be plugged:
- clones were not making new copies of some fields, leading to caching references
in the original object (which was then cloned later to other clones)
- Visibility was using a persistent field to cache temporary values. This transition,
when cloned, would retain these instances, keeping references to views
- ViewTreeObserver had a bug that would leak listeners

Issue #10749071 Activity instance leak between TransitionManager and InputMethodManager

Change-Id: I1d5d457dc5e020c7b9e8392a95e3b2c488461119
2013-09-14 12:06:18 -07:00
Chet Haase
7d077d0364 Disable ActionBar transitions
A problem with transitions is causing various ActionBar icons to go
missing occasionally. This CL disables these transitions for now
to allow ActionBar to work as expected.

Issue #10726905 ActionBar weirdness in People app

Change-Id: I0cb774840ae84cbb733d65865f8c1b4c6d7490fa
2013-09-13 18:51:12 -07:00
Chet Haase
90b10f89d7 Merge "Fix TechChange's assumption about TextView targets" into klp-dev 2013-09-12 19:41:16 +00:00
Chet Haase
8529b30b91 Fix TechChange's assumption about TextView targets
Some of the code in the TextChange transition assumed that the
start values for a transition were for a TextView object. This may
not be the case, and we should return early (without creating an
animator) when it is not.

Issue #10725388 Frequent Framework crashes across apps

Change-Id: I6999eb2288f107f4b93ddb5b77cd068069d831ed
2013-09-12 11:19:32 -07:00
Chet Haase
ff58f92a0a Add exclude() methods to Transition
It would be useful for a transition to declare not just which
targets it wants to be run on, but also which targets it wants
to avoid. For example, you may not want to animate the items of
a ListView, or some other specific target in the view hierarchy.

This change adds various exclude*() methods which make it
possible to alter a transition to automatically ignore specific
views, ids, or classes in the hierarchy.

Issue #10692794 Transitions: Need API for excluding targets

Change-Id: If38025cdbee537a545e5a4268cbbd763af4622c5
2013-09-11 13:53:43 -07:00
Chet Haase
a56205c485 Fix for transition layout suppression
The ChangeBounds transition causes its target view parents to suppress
layout for the duration of the transition. This is done to avoid artifacts
caused by running layout while layout bounds are being animated between
different scene values.

In order to react correctly to new transition/scene information (such as
running a new transition while another is already running), the transition
system calls pause() on all running transitions to allow layout (among other
things) to work correctly, then resume() after this is finished. This works
in general, but pause/resume do not take account of child transitions that
have already played and ended. ChangeBounds, uses pause/resume to
restore normal layout and re-enable layout suppression. This means that
when resume() is called on a ChangeBounds transition that has already
ended, that transition will leave the parent in a suppressed-layout
state, basically forever. This can cause artifacts like we're seeing in
recent ActionBar changes where the account spinner is never repopulated because
layout is never allowed to run.

The fix is to note when a transition ends and noop future calls to pause/resume.

Issue #10648936 Transitions don't work with new ActionBar functionality

Change-Id: Id9d41c0352b2270d46cfd5ad4dba130767bbf303
2013-09-10 11:36:10 -07:00