Commit Graph

30 Commits

Author SHA1 Message Date
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
Chet Haase
2a83181bd1 TextChange transition now uses CharSequence instead of String
TextChange made a bad assumption that target text views contained
String objects as their text, which is not always the case. For example,
Gmail ActionBar text views may contain SpannableString objects, which
caused a crash due to a bad cast operation.

Fix is to simply use CharSequence instead of String as the value that
is being stored and set on the text view.

Issue #10651858 TextChange transition casts CharSequence to String when not necessarily safe

Change-Id: I3f67f5d5e39201dc0fd2edcd3e4243033cf9ae08
2013-09-06 17:26:43 -07:00
Chet Haase
d82c8ac4db Transition API changes from API council recommendations
Issue #10460684 KLP API Review: android.view.transition and android.animation
Issue #10570740 Transitions: inflate transition targets from xml

Change-Id: I7a3f6d3aece2fcafc5efd555d033f79e86635c98
2013-09-04 14:46:38 -07:00