summaryrefslogtreecommitdiffstats
path: root/core/java/android/app
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-02-24 16:18:09 -0800
committerGeorge Mount <mount@google.com>2015-02-25 00:21:02 +0000
commit42161c5cb4f5f36cf83c8af3f20db70a70850a88 (patch)
tree9256d90f17a9718d5e2e0b4f3acd0aeba6863228 /core/java/android/app
parentcff41ae3635170b93acca5bfd2813b719e060e0f (diff)
downloadframeworks_base-42161c5cb4f5f36cf83c8af3f20db70a70850a88.zip
frameworks_base-42161c5cb4f5f36cf83c8af3f20db70a70850a88.tar.gz
frameworks_base-42161c5cb4f5f36cf83c8af3f20db70a70850a88.tar.bz2
Fix target location on nested shared elements.
Bug 19502062 When shared elements were nested, they *could* end in the wrong location. Also, when the shared element transition was interrupted, the final location was calculated incorrectly. This fixes both conditions. Change-Id: I23792507c1e9e96920721d38d7a2a21299f23112
Diffstat (limited to 'core/java/android/app')
-rw-r--r--core/java/android/app/ActivityTransitionCoordinator.java48
1 files changed, 16 insertions, 32 deletions
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java
index e3b27b5..2939322 100644
--- a/core/java/android/app/ActivityTransitionCoordinator.java
+++ b/core/java/android/app/ActivityTransitionCoordinator.java
@@ -206,7 +206,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
private ArrayList<GhostViewListeners> mGhostViewListeners =
new ArrayList<GhostViewListeners>();
private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>();
- final private ArrayList<View> mRootSharedElements = new ArrayList<View>();
private ArrayList<Matrix> mSharedElementParentMatrices;
public ActivityTransitionCoordinator(Window window,
@@ -253,17 +252,10 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
final String name = sharedElements.keyAt(i);
if (isFirstRun && (view == null || !view.isAttachedToWindow() || name == null)) {
sharedElements.removeAt(i);
- } else {
- if (!isNested(view, sharedElements)) {
- mSharedElementNames.add(name);
- mSharedElements.add(view);
- sharedElements.removeAt(i);
- if (isFirstRun) {
- // We need to keep track which shared elements are roots
- // and which are nested.
- mRootSharedElements.add(view);
- }
- }
+ } else if (!isNested(view, sharedElements)) {
+ mSharedElementNames.add(name);
+ mSharedElements.add(view);
+ sharedElements.removeAt(i);
}
}
isFirstRun = false;
@@ -520,24 +512,9 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
}
private void getSharedElementParentMatrix(View view, Matrix matrix) {
- final boolean isNestedInOtherSharedElement = !mRootSharedElements.contains(view);
- final boolean useParentMatrix;
- if (isNestedInOtherSharedElement) {
- useParentMatrix = true;
- } else {
- final int index = mSharedElementParentMatrices == null ? -1
- : mSharedElements.indexOf(view);
- if (index < 0) {
- useParentMatrix = true;
- } else {
- // The indices of mSharedElementParentMatrices matches the
- // mSharedElement matrices.
- Matrix parentMatrix = mSharedElementParentMatrices.get(index);
- matrix.set(parentMatrix);
- useParentMatrix = false;
- }
- }
- if (useParentMatrix) {
+ final int index = mSharedElementParentMatrices == null ? -1
+ : mSharedElements.indexOf(view);
+ if (index < 0) {
matrix.reset();
ViewParent viewParent = view.getParent();
if (viewParent instanceof ViewGroup) {
@@ -545,6 +522,11 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
ViewGroup parent = (ViewGroup) viewParent;
parent.transformMatrixToLocal(matrix);
}
+ } else {
+ // The indices of mSharedElementParentMatrices matches the
+ // mSharedElement matrices.
+ Matrix parentMatrix = mSharedElementParentMatrices.get(index);
+ matrix.set(parentMatrix);
}
}
@@ -701,7 +683,6 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
mResultReceiver = null;
mPendingTransition = null;
mListener = null;
- mRootSharedElements.clear();
mSharedElementParentMatrices = null;
}
@@ -817,9 +798,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
ViewGroup decor = getDecor();
if (decor != null) {
boolean moveWithParent = moveSharedElementWithParent();
+ Matrix tempMatrix = new Matrix();
for (int i = 0; i < numSharedElements; i++) {
View view = mSharedElements.get(i);
- GhostView.addGhost(view, decor);
+ tempMatrix.reset();
+ mSharedElementParentMatrices.get(i).invert(tempMatrix);
+ GhostView.addGhost(view, decor, tempMatrix);
ViewGroup parent = (ViewGroup) view.getParent();
if (moveWithParent && !isInTransitionGroup(parent, decor)) {
GhostViewListeners listener = new GhostViewListeners(view, parent, decor);